diff --git a/static/pdf.js/compatibility.js b/static/pdf.js/compatibility.js deleted file mode 100644 index 1119a274..00000000 --- a/static/pdf.js/compatibility.js +++ /dev/null @@ -1,593 +0,0 @@ -/* Copyright 2012 Mozilla Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* globals VBArray, PDFJS */ - -'use strict'; - -// Initializing PDFJS global object here, it case if we need to change/disable -// some PDF.js features, e.g. range requests -if (typeof PDFJS === 'undefined') { - (typeof window !== 'undefined' ? window : this).PDFJS = {}; -} - -// Checking if the typed arrays are supported -// Support: iOS<6.0 (subarray), IE<10, Android<4.0 -(function checkTypedArrayCompatibility() { - if (typeof Uint8Array !== 'undefined') { - // Support: iOS<6.0 - if (typeof Uint8Array.prototype.subarray === 'undefined') { - Uint8Array.prototype.subarray = function subarray(start, end) { - return new Uint8Array(this.slice(start, end)); - }; - Float32Array.prototype.subarray = function subarray(start, end) { - return new Float32Array(this.slice(start, end)); - }; - } - - // Support: Android<4.1 - if (typeof Float64Array === 'undefined') { - window.Float64Array = Float32Array; - } - return; - } - - function subarray(start, end) { - return new TypedArray(this.slice(start, end)); - } - - function setArrayOffset(array, offset) { - if (arguments.length < 2) { - offset = 0; - } - for (var i = 0, n = array.length; i < n; ++i, ++offset) { - this[offset] = array[i] & 0xFF; - } - } - - function TypedArray(arg1) { - var result, i, n; - if (typeof arg1 === 'number') { - result = []; - for (i = 0; i < arg1; ++i) { - result[i] = 0; - } - } else if ('slice' in arg1) { - result = arg1.slice(0); - } else { - result = []; - for (i = 0, n = arg1.length; i < n; ++i) { - result[i] = arg1[i]; - } - } - - result.subarray = subarray; - result.buffer = result; - result.byteLength = result.length; - result.set = setArrayOffset; - - if (typeof arg1 === 'object' && arg1.buffer) { - result.buffer = arg1.buffer; - } - return result; - } - - window.Uint8Array = TypedArray; - window.Int8Array = TypedArray; - - // we don't need support for set, byteLength for 32-bit array - // so we can use the TypedArray as well - window.Uint32Array = TypedArray; - window.Int32Array = TypedArray; - window.Uint16Array = TypedArray; - window.Float32Array = TypedArray; - window.Float64Array = TypedArray; -})(); - -// URL = URL || webkitURL -// Support: Safari<7, Android 4.2+ -(function normalizeURLObject() { - if (!window.URL) { - window.URL = window.webkitURL; - } -})(); - -// Object.defineProperty()? -// Support: Android<4.0, Safari<5.1 -(function checkObjectDefinePropertyCompatibility() { - if (typeof Object.defineProperty !== 'undefined') { - var definePropertyPossible = true; - try { - // some browsers (e.g. safari) cannot use defineProperty() on DOM objects - // and thus the native version is not sufficient - Object.defineProperty(new Image(), 'id', { value: 'test' }); - // ... another test for android gb browser for non-DOM objects - var Test = function Test() {}; - Test.prototype = { get id() { } }; - Object.defineProperty(new Test(), 'id', - { value: '', configurable: true, enumerable: true, writable: false }); - } catch (e) { - definePropertyPossible = false; - } - if (definePropertyPossible) { - return; - } - } - - Object.defineProperty = function objectDefineProperty(obj, name, def) { - delete obj[name]; - if ('get' in def) { - obj.__defineGetter__(name, def['get']); - } - if ('set' in def) { - obj.__defineSetter__(name, def['set']); - } - if ('value' in def) { - obj.__defineSetter__(name, function objectDefinePropertySetter(value) { - this.__defineGetter__(name, function objectDefinePropertyGetter() { - return value; - }); - return value; - }); - obj[name] = def.value; - } - }; -})(); - - -// No XMLHttpRequest#response? -// Support: IE<11, Android <4.0 -(function checkXMLHttpRequestResponseCompatibility() { - var xhrPrototype = XMLHttpRequest.prototype; - var xhr = new XMLHttpRequest(); - if (!('overrideMimeType' in xhr)) { - // IE10 might have response, but not overrideMimeType - // Support: IE10 - Object.defineProperty(xhrPrototype, 'overrideMimeType', { - value: function xmlHttpRequestOverrideMimeType(mimeType) {} - }); - } - if ('responseType' in xhr) { - return; - } - - // The worker will be using XHR, so we can save time and disable worker. - PDFJS.disableWorker = true; - - Object.defineProperty(xhrPrototype, 'responseType', { - get: function xmlHttpRequestGetResponseType() { - return this._responseType || 'text'; - }, - set: function xmlHttpRequestSetResponseType(value) { - if (value === 'text' || value === 'arraybuffer') { - this._responseType = value; - if (value === 'arraybuffer' && - typeof this.overrideMimeType === 'function') { - this.overrideMimeType('text/plain; charset=x-user-defined'); - } - } - } - }); - - // Support: IE9 - if (typeof VBArray !== 'undefined') { - Object.defineProperty(xhrPrototype, 'response', { - get: function xmlHttpRequestResponseGet() { - if (this.responseType === 'arraybuffer') { - return new Uint8Array(new VBArray(this.responseBody).toArray()); - } else { - return this.responseText; - } - } - }); - return; - } - - Object.defineProperty(xhrPrototype, 'response', { - get: function xmlHttpRequestResponseGet() { - if (this.responseType !== 'arraybuffer') { - return this.responseText; - } - var text = this.responseText; - var i, n = text.length; - var result = new Uint8Array(n); - for (i = 0; i < n; ++i) { - result[i] = text.charCodeAt(i) & 0xFF; - } - return result.buffer; - } - }); -})(); - -// window.btoa (base64 encode function) ? -// Support: IE<10 -(function checkWindowBtoaCompatibility() { - if ('btoa' in window) { - return; - } - - var digits = - 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - - window.btoa = function windowBtoa(chars) { - var buffer = ''; - var i, n; - for (i = 0, n = chars.length; i < n; i += 3) { - var b1 = chars.charCodeAt(i) & 0xFF; - var b2 = chars.charCodeAt(i + 1) & 0xFF; - var b3 = chars.charCodeAt(i + 2) & 0xFF; - var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4); - var d3 = i + 1 < n ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64; - var d4 = i + 2 < n ? (b3 & 0x3F) : 64; - buffer += (digits.charAt(d1) + digits.charAt(d2) + - digits.charAt(d3) + digits.charAt(d4)); - } - return buffer; - }; -})(); - -// window.atob (base64 encode function)? -// Support: IE<10 -(function checkWindowAtobCompatibility() { - if ('atob' in window) { - return; - } - - // https://github.com/davidchambers/Base64.js - var digits = - 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - window.atob = function (input) { - input = input.replace(/=+$/, ''); - if (input.length % 4 === 1) { - throw new Error('bad atob input'); - } - for ( - // initialize result and counters - var bc = 0, bs, buffer, idx = 0, output = ''; - // get next character - buffer = input.charAt(idx++); - // character found in table? - // initialize bit storage and add its ascii value - ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer, - // and if not first of each 4 characters, - // convert the first 8 bits to one ascii character - bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0 - ) { - // try to find character in table (0-63, not found => -1) - buffer = digits.indexOf(buffer); - } - return output; - }; -})(); - -// Function.prototype.bind? -// Support: Android<4.0, iOS<6.0 -(function checkFunctionPrototypeBindCompatibility() { - if (typeof Function.prototype.bind !== 'undefined') { - return; - } - - Function.prototype.bind = function functionPrototypeBind(obj) { - var fn = this, headArgs = Array.prototype.slice.call(arguments, 1); - var bound = function functionPrototypeBindBound() { - var args = headArgs.concat(Array.prototype.slice.call(arguments)); - return fn.apply(obj, args); - }; - return bound; - }; -})(); - -// HTMLElement dataset property -// Support: IE<11, Safari<5.1, Android<4.0 -(function checkDatasetProperty() { - var div = document.createElement('div'); - if ('dataset' in div) { - return; // dataset property exists - } - - Object.defineProperty(HTMLElement.prototype, 'dataset', { - get: function() { - if (this._dataset) { - return this._dataset; - } - - var dataset = {}; - for (var j = 0, jj = this.attributes.length; j < jj; j++) { - var attribute = this.attributes[j]; - if (attribute.name.substring(0, 5) !== 'data-') { - continue; - } - var key = attribute.name.substring(5).replace(/\-([a-z])/g, - function(all, ch) { - return ch.toUpperCase(); - }); - dataset[key] = attribute.value; - } - - Object.defineProperty(this, '_dataset', { - value: dataset, - writable: false, - enumerable: false - }); - return dataset; - }, - enumerable: true - }); -})(); - -// HTMLElement classList property -// Support: IE<10, Android<4.0, iOS<5.0 -(function checkClassListProperty() { - var div = document.createElement('div'); - if ('classList' in div) { - return; // classList property exists - } - - function changeList(element, itemName, add, remove) { - var s = element.className || ''; - var list = s.split(/\s+/g); - if (list[0] === '') { - list.shift(); - } - var index = list.indexOf(itemName); - if (index < 0 && add) { - list.push(itemName); - } - if (index >= 0 && remove) { - list.splice(index, 1); - } - element.className = list.join(' '); - return (index >= 0); - } - - var classListPrototype = { - add: function(name) { - changeList(this.element, name, true, false); - }, - contains: function(name) { - return changeList(this.element, name, false, false); - }, - remove: function(name) { - changeList(this.element, name, false, true); - }, - toggle: function(name) { - changeList(this.element, name, true, true); - } - }; - - Object.defineProperty(HTMLElement.prototype, 'classList', { - get: function() { - if (this._classList) { - return this._classList; - } - - var classList = Object.create(classListPrototype, { - element: { - value: this, - writable: false, - enumerable: true - } - }); - Object.defineProperty(this, '_classList', { - value: classList, - writable: false, - enumerable: false - }); - return classList; - }, - enumerable: true - }); -})(); - -// Check console compatibility -// In older IE versions the console object is not available -// unless console is open. -// Support: IE<10 -(function checkConsoleCompatibility() { - if (!('console' in window)) { - window.console = { - log: function() {}, - error: function() {}, - warn: function() {} - }; - } else if (!('bind' in console.log)) { - // native functions in IE9 might not have bind - console.log = (function(fn) { - return function(msg) { return fn(msg); }; - })(console.log); - console.error = (function(fn) { - return function(msg) { return fn(msg); }; - })(console.error); - console.warn = (function(fn) { - return function(msg) { return fn(msg); }; - })(console.warn); - } -})(); - -// Check onclick compatibility in Opera -// Support: Opera<15 -(function checkOnClickCompatibility() { - // workaround for reported Opera bug DSK-354448: - // onclick fires on disabled buttons with opaque content - function ignoreIfTargetDisabled(event) { - if (isDisabled(event.target)) { - event.stopPropagation(); - } - } - function isDisabled(node) { - return node.disabled || (node.parentNode && isDisabled(node.parentNode)); - } - if (navigator.userAgent.indexOf('Opera') !== -1) { - // use browser detection since we cannot feature-check this bug - document.addEventListener('click', ignoreIfTargetDisabled, true); - } -})(); - -// Checks if possible to use URL.createObjectURL() -// Support: IE -(function checkOnBlobSupport() { - // sometimes IE loosing the data created with createObjectURL(), see #3977 - if (navigator.userAgent.indexOf('Trident') >= 0) { - PDFJS.disableCreateObjectURL = true; - } -})(); - -// Checks if navigator.language is supported -(function checkNavigatorLanguage() { - if ('language' in navigator) { - return; - } - PDFJS.locale = navigator.userLanguage || 'en-US'; -})(); - -(function checkRangeRequests() { - // Safari has issues with cached range requests see: - // https://github.com/mozilla/pdf.js/issues/3260 - // Last tested with version 6.0.4. - // Support: Safari 6.0+ - var isSafari = Object.prototype.toString.call( - window.HTMLElement).indexOf('Constructor') > 0; - - // Older versions of Android (pre 3.0) has issues with range requests, see: - // https://github.com/mozilla/pdf.js/issues/3381. - // Make sure that we only match webkit-based Android browsers, - // since Firefox/Fennec works as expected. - // Support: Android<3.0 - var regex = /Android\s[0-2][^\d]/; - var isOldAndroid = regex.test(navigator.userAgent); - - // Range requests are broken in Chrome 39 and 40, https://crbug.com/442318 - var isChromeWithRangeBug = /Chrome\/(39|40)\./.test(navigator.userAgent); - - if (isSafari || isOldAndroid || isChromeWithRangeBug) { - PDFJS.disableRange = true; - PDFJS.disableStream = true; - } -})(); - -// Check if the browser supports manipulation of the history. -// Support: IE<10, Android<4.2 -(function checkHistoryManipulation() { - // Android 2.x has so buggy pushState support that it was removed in - // Android 3.0 and restored as late as in Android 4.2. - // Support: Android 2.x - if (!history.pushState || navigator.userAgent.indexOf('Android 2.') >= 0) { - PDFJS.disableHistory = true; - } -})(); - -// Support: IE<11, Chrome<21, Android<4.4, Safari<6 -(function checkSetPresenceInImageData() { - // IE < 11 will use window.CanvasPixelArray which lacks set function. - if (window.CanvasPixelArray) { - if (typeof window.CanvasPixelArray.prototype.set !== 'function') { - window.CanvasPixelArray.prototype.set = function(arr) { - for (var i = 0, ii = this.length; i < ii; i++) { - this[i] = arr[i]; - } - }; - } - } else { - // Old Chrome and Android use an inaccessible CanvasPixelArray prototype. - // Because we cannot feature detect it, we rely on user agent parsing. - var polyfill = false, versionMatch; - if (navigator.userAgent.indexOf('Chrom') >= 0) { - versionMatch = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./); - // Chrome < 21 lacks the set function. - polyfill = versionMatch && parseInt(versionMatch[2]) < 21; - } else if (navigator.userAgent.indexOf('Android') >= 0) { - // Android < 4.4 lacks the set function. - // Android >= 4.4 will contain Chrome in the user agent, - // thus pass the Chrome check above and not reach this block. - polyfill = /Android\s[0-4][^\d]/g.test(navigator.userAgent); - } else if (navigator.userAgent.indexOf('Safari') >= 0) { - versionMatch = navigator.userAgent. - match(/Version\/([0-9]+)\.([0-9]+)\.([0-9]+) Safari\//); - // Safari < 6 lacks the set function. - polyfill = versionMatch && parseInt(versionMatch[1]) < 6; - } - - if (polyfill) { - var contextPrototype = window.CanvasRenderingContext2D.prototype; - var createImageData = contextPrototype.createImageData; - contextPrototype.createImageData = function(w, h) { - var imageData = createImageData.call(this, w, h); - imageData.data.set = function(arr) { - for (var i = 0, ii = this.length; i < ii; i++) { - this[i] = arr[i]; - } - }; - return imageData; - }; - // this closure will be kept referenced, so clear its vars - contextPrototype = null; - } - } -})(); - -// Support: IE<10, Android<4.0, iOS -(function checkRequestAnimationFrame() { - function fakeRequestAnimationFrame(callback) { - window.setTimeout(callback, 20); - } - - var isIOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent); - if (isIOS) { - // requestAnimationFrame on iOS is broken, replacing with fake one. - window.requestAnimationFrame = fakeRequestAnimationFrame; - return; - } - if ('requestAnimationFrame' in window) { - return; - } - window.requestAnimationFrame = - window.mozRequestAnimationFrame || - window.webkitRequestAnimationFrame || - fakeRequestAnimationFrame; -})(); - -(function checkCanvasSizeLimitation() { - var isIOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent); - var isAndroid = /Android/g.test(navigator.userAgent); - if (isIOS || isAndroid) { - // 5MP - PDFJS.maxCanvasPixels = 5242880; - } -})(); - -// Disable fullscreen support for certain problematic configurations. -// Support: IE11+ (when embedded). -(function checkFullscreenSupport() { - var isEmbeddedIE = (navigator.userAgent.indexOf('Trident') >= 0 && - window.parent !== window); - if (isEmbeddedIE) { - PDFJS.disableFullscreen = true; - } -})(); - -// Provides document.currentScript support -// Support: IE, Chrome<29. -(function checkCurrentScript() { - if ('currentScript' in document) { - return; - } - Object.defineProperty(document, 'currentScript', { - get: function () { - var scripts = document.getElementsByTagName('script'); - return scripts[scripts.length - 1]; - }, - enumerable: true, - configurable: true - }); -})(); diff --git a/static/pdf.js/debugger.css b/static/pdf.js/debugger.css index c66160dd..b9d9f819 100644 --- a/static/pdf.js/debugger.css +++ b/static/pdf.js/debugger.css @@ -22,8 +22,8 @@ font: message-box; } #PDFBug { - background-color: rgba(255, 255, 255, 1); - border: 1px solid rgba(102, 102, 102, 1); + background-color: rgb(255 255 255); + border: 1px solid rgb(102 102 102); position: fixed; top: 32px; right: 0; @@ -33,8 +33,8 @@ width: var(--panel-width); } #PDFBug .controls { - background: rgba(238, 238, 238, 1); - border-bottom: 1px solid rgba(102, 102, 102, 1); + background: rgb(238 238 238); + border-bottom: 1px solid rgb(102 102 102); padding: 3px; } #PDFBug .panels { @@ -50,7 +50,7 @@ } .debuggerShowText, .debuggerHideText:hover { - background-color: rgba(255, 255, 0, 1); + background-color: rgb(255 255 0 / 0.25); } #PDFBug .stats { font-family: courier; @@ -82,7 +82,7 @@ } #viewer.textLayer-visible .canvasWrapper { - background-color: rgba(128, 255, 128, 1); + background-color: rgb(128 255 128); } #viewer.textLayer-visible .canvasWrapper canvas { @@ -90,22 +90,22 @@ } #viewer.textLayer-visible .textLayer span { - background-color: rgba(255, 255, 0, 0.1); - color: rgba(0, 0, 0, 1); - border: solid 1px rgba(255, 0, 0, 0.5); + background-color: rgb(255 255 0 / 0.1); + color: rgb(0 0 0); + border: solid 1px rgb(255 0 0 / 0.5); box-sizing: border-box; } #viewer.textLayer-visible .textLayer span[aria-owns] { - background-color: rgba(255, 0, 0, 0.3); + background-color: rgb(255 0 0 / 0.3); } #viewer.textLayer-hover .textLayer span:hover { - background-color: rgba(255, 255, 255, 1); - color: rgba(0, 0, 0, 1); + background-color: rgb(255 255 255); + color: rgb(0 0 0); } #viewer.textLayer-shadow .textLayer span { - background-color: rgba(255, 255, 255, 0.6); - color: rgba(0, 0, 0, 1); + background-color: rgb(255 255 255 / 0.6); + color: rgb(0 0 0); } diff --git a/static/pdf.js/debugger.js b/static/pdf.js/debugger.mjs similarity index 95% rename from static/pdf.js/debugger.js rename to static/pdf.js/debugger.mjs index 9160f840..59c1871b 100644 --- a/static/pdf.js/debugger.js +++ b/static/pdf.js/debugger.mjs @@ -111,21 +111,29 @@ const FontInspector = (function FontInspectorClosure() { } return moreInfo; } - const moreInfo = properties(fontObj, ["name", "type"]); + + const moreInfo = fontObj.css + ? properties(fontObj, ["baseFontName"]) + : properties(fontObj, ["name", "type"]); + const fontName = fontObj.loadedName; const font = document.createElement("div"); const name = document.createElement("span"); name.textContent = fontName; - const download = document.createElement("a"); - if (url) { - url = /url\(['"]?([^)"']+)/.exec(url); - download.href = url[1]; - } else if (fontObj.data) { - download.href = URL.createObjectURL( - new Blob([fontObj.data], { type: fontObj.mimetype }) - ); + let download; + if (!fontObj.css) { + download = document.createElement("a"); + if (url) { + url = /url\(['"]?([^)"']+)/.exec(url); + download.href = url[1]; + } else if (fontObj.data) { + download.href = URL.createObjectURL( + new Blob([fontObj.data], { type: fontObj.mimetype }) + ); + } + download.textContent = "Download"; } - download.textContent = "Download"; + const logIt = document.createElement("a"); logIt.href = ""; logIt.textContent = "Log"; @@ -139,7 +147,11 @@ const FontInspector = (function FontInspectorClosure() { select.addEventListener("click", function () { selectFont(fontName, select.checked); }); - font.append(select, name, " ", download, " ", logIt, moreInfo); + if (download) { + font.append(select, name, " ", download, " ", logIt, moreInfo); + } else { + font.append(select, name, " ", logIt, moreInfo); + } fonts.append(font); // Somewhat of a hack, should probably add a hook for when the text layer // is done rendering. @@ -574,7 +586,7 @@ class PDFBug { const link = document.createElement("link"); link.rel = "stylesheet"; - link.href = url.replace(/.js$/, ".css"); + link.href = url.replace(/\.mjs$/, ".css"); document.head.append(link); } diff --git a/static/pdf.js/images/cursor-editorFreeHighlight.svg b/static/pdf.js/images/cursor-editorFreeHighlight.svg new file mode 100644 index 00000000..513f6bdf --- /dev/null +++ b/static/pdf.js/images/cursor-editorFreeHighlight.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/static/pdf.js/images/cursor-editorTextHighlight.svg b/static/pdf.js/images/cursor-editorTextHighlight.svg new file mode 100644 index 00000000..800340cb --- /dev/null +++ b/static/pdf.js/images/cursor-editorTextHighlight.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/static/pdf.js/images/editor-toolbar-delete.svg b/static/pdf.js/images/editor-toolbar-delete.svg new file mode 100644 index 00000000..f84520d8 --- /dev/null +++ b/static/pdf.js/images/editor-toolbar-delete.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/static/pdf.js/images/gv-toolbarButton-openinapp.svg b/static/pdf.js/images/gv-toolbarButton-openinapp.svg deleted file mode 100644 index 80ec891a..00000000 --- a/static/pdf.js/images/gv-toolbarButton-openinapp.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/static/pdf.js/images/loading-dark.svg b/static/pdf.js/images/loading-dark.svg deleted file mode 100644 index fa5269b1..00000000 --- a/static/pdf.js/images/loading-dark.svg +++ /dev/null @@ -1,24 +0,0 @@ - \ No newline at end of file diff --git a/static/pdf.js/images/toolbarButton-editorFreeText.svg b/static/pdf.js/images/toolbarButton-editorFreeText.svg index e4db3a57..13a67bd9 100644 --- a/static/pdf.js/images/toolbarButton-editorFreeText.svg +++ b/static/pdf.js/images/toolbarButton-editorFreeText.svg @@ -1,3 +1,5 @@ - + + + diff --git a/static/pdf.js/images/toolbarButton-editorHighlight.svg b/static/pdf.js/images/toolbarButton-editorHighlight.svg new file mode 100644 index 00000000..b3cd7fda --- /dev/null +++ b/static/pdf.js/images/toolbarButton-editorHighlight.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/static/pdf.js/images/toolbarButton-editorStamp.svg b/static/pdf.js/images/toolbarButton-editorStamp.svg index f0469b1b..a1fef492 100644 --- a/static/pdf.js/images/toolbarButton-editorStamp.svg +++ b/static/pdf.js/images/toolbarButton-editorStamp.svg @@ -1,7 +1,7 @@ - + diff --git a/static/pdf.js/index.html b/static/pdf.js/index.html index 38fe9f3d..160761f5 100644 --- a/static/pdf.js/index.html +++ b/static/pdf.js/index.html @@ -28,16 +28,15 @@ See https://github.com/adobe-type-tools/cmap-resources PDF.js viewer - - - - - + + + + - + @@ -47,27 +46,27 @@ See https://github.com/adobe-type-tools/cmap-resources
- - - -
- @@ -88,29 +87,31 @@ See https://github.com/adobe-type-tools/cmap-resources
+ + @@ -135,116 +157,116 @@ See https://github.com/adobe-type-tools/cmap-resources @@ -253,83 +275,84 @@ See https://github.com/adobe-type-tools/cmap-resources
-
-
-
-
- + + +
- - - - - - -
-
- - - +
- + + + +
+ +
-
-
- + + + + + + + + + + + + +
@@ -351,85 +374,85 @@ See https://github.com/adobe-type-tools/cmap-resources
- +
- - + +
- File name: + File name:

-

- File size: + File size:

-

- Title: + Title:

-

- Author: + Author:

-

- Subject: + Subject:

-

- Keywords: + Keywords:

-

- Creation Date: + Creation Date:

-

- Modification Date: + Modification Date:

-

- Creator: + Creator:

-

- PDF Producer: + PDF Producer:

-

- PDF Version: + PDF Version:

-

- Page Count: + Page Count:

-

- Page Size: + Page Size:

-

- Fast Web View: + Fast Web View:

-

- +
- Choose an option - + Choose an option + Alt text (alternative text) helps when people can’t see the image or when it doesn’t load.
@@ -437,55 +460,53 @@ See https://github.com/adobe-type-tools/cmap-resources
- +
- + Aim for 1-2 sentences that describe the subject, setting, or actions.
- +
- +
- + This is used for ornamental images, like borders or watermarks.
- - + +
- Preparing document for printing… + Preparing document for printing…
- 0% + 0%
- +
- - diff --git a/static/pdf.js/l10n.js b/static/pdf.js/l10n.js deleted file mode 100644 index 3d5ecffa..00000000 --- a/static/pdf.js/l10n.js +++ /dev/null @@ -1,1033 +0,0 @@ -/** - * Copyright (c) 2011-2013 Fabien Cazenave, Mozilla. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ -/* - Additional modifications for PDF.js project: - - Disables language initialization on page loading; - - Removes consoleWarn and consoleLog and use console.log/warn directly. - - Removes window._ assignment. - - Remove compatibility code for OldIE. -*/ - -/*jshint browser: true, devel: true, es5: true, globalstrict: true */ -'use strict'; - -document.webL10n = (function(window, document, undefined) { - var gL10nData = {}; - var gTextData = ''; - var gTextProp = 'textContent'; - var gLanguage = ''; - var gMacros = {}; - var gReadyState = 'loading'; - - - /** - * Synchronously loading l10n resources significantly minimizes flickering - * from displaying the app with non-localized strings and then updating the - * strings. Although this will block all script execution on this page, we - * expect that the l10n resources are available locally on flash-storage. - * - * As synchronous XHR is generally considered as a bad idea, we're still - * loading l10n resources asynchronously -- but we keep this in a setting, - * just in case... and applications using this library should hide their - * content until the `localized' event happens. - */ - - var gAsyncResourceLoading = true; // read-only - - - /** - * DOM helpers for the so-called "HTML API". - * - * These functions are written for modern browsers. For old versions of IE, - * they're overridden in the 'startup' section at the end of this file. - */ - - function getL10nResourceLinks() { - return document.querySelectorAll('link[type="application/l10n"]'); - } - - function getL10nDictionary() { - var script = document.querySelector('script[type="application/l10n"]'); - // TODO: support multiple and external JSON dictionaries - return script ? JSON.parse(script.innerHTML) : null; - } - - function getTranslatableChildren(element) { - return element ? element.querySelectorAll('*[data-l10n-id]') : []; - } - - function getL10nAttributes(element) { - if (!element) - return {}; - - var l10nId = element.getAttribute('data-l10n-id'); - var l10nArgs = element.getAttribute('data-l10n-args'); - var args = {}; - if (l10nArgs) { - try { - args = JSON.parse(l10nArgs); - } catch (e) { - console.warn('could not parse arguments for #' + l10nId); - } - } - return { id: l10nId, args: args }; - } - - function fireL10nReadyEvent(lang) { - var evtObject = document.createEvent('Event'); - evtObject.initEvent('localized', true, false); - evtObject.language = lang; - document.dispatchEvent(evtObject); - } - - function xhrLoadText(url, onSuccess, onFailure) { - onSuccess = onSuccess || function _onSuccess(data) {}; - onFailure = onFailure || function _onFailure() { - console.warn(url + ' not found.'); - }; - - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, gAsyncResourceLoading); - if (xhr.overrideMimeType) { - xhr.overrideMimeType('text/plain; charset=utf-8'); - } - xhr.onreadystatechange = function() { - if (xhr.readyState == 4) { - if (xhr.status == 200 || xhr.status === 0) { - onSuccess(xhr.responseText); - } else { - onFailure(); - } - } - }; - xhr.onerror = onFailure; - xhr.ontimeout = onFailure; - - // in Firefox OS with the app:// protocol, trying to XHR a non-existing - // URL will raise an exception here -- hence this ugly try...catch. - try { - xhr.send(null); - } catch (e) { - onFailure(); - } - } - - - /** - * l10n resource parser: - * - reads (async XHR) the l10n resource matching `lang'; - * - imports linked resources (synchronously) when specified; - * - parses the text data (fills `gL10nData' and `gTextData'); - * - triggers success/failure callbacks when done. - * - * @param {string} href - * URL of the l10n resource to parse. - * - * @param {string} lang - * locale (language) to parse. Must be a lowercase string. - * - * @param {Function} successCallback - * triggered when the l10n resource has been successully parsed. - * - * @param {Function} failureCallback - * triggered when the an error has occured. - * - * @return {void} - * uses the following global variables: gL10nData, gTextData, gTextProp. - */ - - function parseResource(href, lang, successCallback, failureCallback) { - var baseURL = href.replace(/[^\/]*$/, '') || './'; - - // handle escaped characters (backslashes) in a string - function evalString(text) { - if (text.lastIndexOf('\\') < 0) - return text; - return text.replace(/\\\\/g, '\\') - .replace(/\\n/g, '\n') - .replace(/\\r/g, '\r') - .replace(/\\t/g, '\t') - .replace(/\\b/g, '\b') - .replace(/\\f/g, '\f') - .replace(/\\{/g, '{') - .replace(/\\}/g, '}') - .replace(/\\"/g, '"') - .replace(/\\'/g, "'"); - } - - // parse *.properties text data into an l10n dictionary - // If gAsyncResourceLoading is false, then the callback will be called - // synchronously. Otherwise it is called asynchronously. - function parseProperties(text, parsedPropertiesCallback) { - var dictionary = {}; - - // token expressions - var reBlank = /^\s*|\s*$/; - var reComment = /^\s*#|^\s*$/; - var reSection = /^\s*\[(.*)\]\s*$/; - var reImport = /^\s*@import\s+url\((.*)\)\s*$/i; - var reSplit = /^([^=\s]*)\s*=\s*(.+)$/; // TODO: escape EOLs with '\' - - // parse the *.properties file into an associative array - function parseRawLines(rawText, extendedSyntax, parsedRawLinesCallback) { - var entries = rawText.replace(reBlank, '').split(/[\r\n]+/); - var currentLang = '*'; - var genericLang = lang.split('-', 1)[0]; - var skipLang = false; - var match = ''; - - function nextEntry() { - // Use infinite loop instead of recursion to avoid reaching the - // maximum recursion limit for content with many lines. - while (true) { - if (!entries.length) { - parsedRawLinesCallback(); - return; - } - var line = entries.shift(); - - // comment or blank line? - if (reComment.test(line)) - continue; - - // the extended syntax supports [lang] sections and @import rules - if (extendedSyntax) { - match = reSection.exec(line); - if (match) { // section start? - // RFC 4646, section 4.4, "All comparisons MUST be performed - // in a case-insensitive manner." - - currentLang = match[1].toLowerCase(); - skipLang = (currentLang !== '*') && - (currentLang !== lang) && (currentLang !== genericLang); - continue; - } else if (skipLang) { - continue; - } - match = reImport.exec(line); - if (match) { // @import rule? - loadImport(baseURL + match[1], nextEntry); - return; - } - } - - // key-value pair - var tmp = line.match(reSplit); - if (tmp && tmp.length == 3) { - dictionary[tmp[1]] = evalString(tmp[2]); - } - } - } - nextEntry(); - } - - // import another *.properties file - function loadImport(url, callback) { - xhrLoadText(url, function(content) { - parseRawLines(content, false, callback); // don't allow recursive imports - }, null); - } - - // fill the dictionary - parseRawLines(text, true, function() { - parsedPropertiesCallback(dictionary); - }); - } - - // load and parse l10n data (warning: global variables are used here) - xhrLoadText(href, function(response) { - gTextData += response; // mostly for debug - - // parse *.properties text data into an l10n dictionary - parseProperties(response, function(data) { - - // find attribute descriptions, if any - for (var key in data) { - var id, prop, index = key.lastIndexOf('.'); - if (index > 0) { // an attribute has been specified - id = key.substring(0, index); - prop = key.substr(index + 1); - } else { // no attribute: assuming text content by default - id = key; - prop = gTextProp; - } - if (!gL10nData[id]) { - gL10nData[id] = {}; - } - gL10nData[id][prop] = data[key]; - } - - // trigger callback - if (successCallback) { - successCallback(); - } - }); - }, failureCallback); - } - - // load and parse all resources for the specified locale - function loadLocale(lang, callback) { - // RFC 4646, section 2.1 states that language tags have to be treated as - // case-insensitive. Convert to lowercase for case-insensitive comparisons. - if (lang) { - lang = lang.toLowerCase(); - } - - callback = callback || function _callback() {}; - - clear(); - gLanguage = lang; - - // check all nodes - // and load the resource files - var langLinks = getL10nResourceLinks(); - var langCount = langLinks.length; - if (langCount === 0) { - // we might have a pre-compiled dictionary instead - var dict = getL10nDictionary(); - if (dict && dict.locales && dict.default_locale) { - console.log('using the embedded JSON directory, early way out'); - gL10nData = dict.locales[lang]; - if (!gL10nData) { - var defaultLocale = dict.default_locale.toLowerCase(); - for (var anyCaseLang in dict.locales) { - anyCaseLang = anyCaseLang.toLowerCase(); - if (anyCaseLang === lang) { - gL10nData = dict.locales[lang]; - break; - } else if (anyCaseLang === defaultLocale) { - gL10nData = dict.locales[defaultLocale]; - } - } - } - callback(); - } else { - console.log('no resource to load, early way out'); - } - // early way out - fireL10nReadyEvent(lang); - gReadyState = 'complete'; - return; - } - - // start the callback when all resources are loaded - var onResourceLoaded = null; - var gResourceCount = 0; - onResourceLoaded = function() { - gResourceCount++; - if (gResourceCount >= langCount) { - callback(); - fireL10nReadyEvent(lang); - gReadyState = 'complete'; - } - }; - - // load all resource files - function L10nResourceLink(link) { - var href = link.href; - // Note: If |gAsyncResourceLoading| is false, then the following callbacks - // are synchronously called. - this.load = function(lang, callback) { - parseResource(href, lang, callback, function() { - console.warn(href + ' not found.'); - // lang not found, used default resource instead - console.warn('"' + lang + '" resource not found'); - gLanguage = ''; - // Resource not loaded, but we still need to call the callback. - callback(); - }); - }; - } - - for (var i = 0; i < langCount; i++) { - var resource = new L10nResourceLink(langLinks[i]); - resource.load(lang, onResourceLoaded); - } - } - - // clear all l10n data - function clear() { - gL10nData = {}; - gTextData = ''; - gLanguage = ''; - // TODO: clear all non predefined macros. - // There's no such macro /yet/ but we're planning to have some... - } - - - /** - * Get rules for plural forms (shared with JetPack), see: - * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html - * https://github.com/mozilla/addon-sdk/blob/master/python-lib/plural-rules-generator.p - * - * @param {string} lang - * locale (language) used. - * - * @return {Function} - * returns a function that gives the plural form name for a given integer: - * var fun = getPluralRules('en'); - * fun(1) -> 'one' - * fun(0) -> 'other' - * fun(1000) -> 'other'. - */ - - function getPluralRules(lang) { - var locales2rules = { - 'af': 3, - 'ak': 4, - 'am': 4, - 'ar': 1, - 'asa': 3, - 'az': 0, - 'be': 11, - 'bem': 3, - 'bez': 3, - 'bg': 3, - 'bh': 4, - 'bm': 0, - 'bn': 3, - 'bo': 0, - 'br': 20, - 'brx': 3, - 'bs': 11, - 'ca': 3, - 'cgg': 3, - 'chr': 3, - 'cs': 12, - 'cy': 17, - 'da': 3, - 'de': 3, - 'dv': 3, - 'dz': 0, - 'ee': 3, - 'el': 3, - 'en': 3, - 'eo': 3, - 'es': 3, - 'et': 3, - 'eu': 3, - 'fa': 0, - 'ff': 5, - 'fi': 3, - 'fil': 4, - 'fo': 3, - 'fr': 5, - 'fur': 3, - 'fy': 3, - 'ga': 8, - 'gd': 24, - 'gl': 3, - 'gsw': 3, - 'gu': 3, - 'guw': 4, - 'gv': 23, - 'ha': 3, - 'haw': 3, - 'he': 2, - 'hi': 4, - 'hr': 11, - 'hu': 0, - 'id': 0, - 'ig': 0, - 'ii': 0, - 'is': 3, - 'it': 3, - 'iu': 7, - 'ja': 0, - 'jmc': 3, - 'jv': 0, - 'ka': 0, - 'kab': 5, - 'kaj': 3, - 'kcg': 3, - 'kde': 0, - 'kea': 0, - 'kk': 3, - 'kl': 3, - 'km': 0, - 'kn': 0, - 'ko': 0, - 'ksb': 3, - 'ksh': 21, - 'ku': 3, - 'kw': 7, - 'lag': 18, - 'lb': 3, - 'lg': 3, - 'ln': 4, - 'lo': 0, - 'lt': 10, - 'lv': 6, - 'mas': 3, - 'mg': 4, - 'mk': 16, - 'ml': 3, - 'mn': 3, - 'mo': 9, - 'mr': 3, - 'ms': 0, - 'mt': 15, - 'my': 0, - 'nah': 3, - 'naq': 7, - 'nb': 3, - 'nd': 3, - 'ne': 3, - 'nl': 3, - 'nn': 3, - 'no': 3, - 'nr': 3, - 'nso': 4, - 'ny': 3, - 'nyn': 3, - 'om': 3, - 'or': 3, - 'pa': 3, - 'pap': 3, - 'pl': 13, - 'ps': 3, - 'pt': 3, - 'rm': 3, - 'ro': 9, - 'rof': 3, - 'ru': 11, - 'rwk': 3, - 'sah': 0, - 'saq': 3, - 'se': 7, - 'seh': 3, - 'ses': 0, - 'sg': 0, - 'sh': 11, - 'shi': 19, - 'sk': 12, - 'sl': 14, - 'sma': 7, - 'smi': 7, - 'smj': 7, - 'smn': 7, - 'sms': 7, - 'sn': 3, - 'so': 3, - 'sq': 3, - 'sr': 11, - 'ss': 3, - 'ssy': 3, - 'st': 3, - 'sv': 3, - 'sw': 3, - 'syr': 3, - 'ta': 3, - 'te': 3, - 'teo': 3, - 'th': 0, - 'ti': 4, - 'tig': 3, - 'tk': 3, - 'tl': 4, - 'tn': 3, - 'to': 0, - 'tr': 0, - 'ts': 3, - 'tzm': 22, - 'uk': 11, - 'ur': 3, - 've': 3, - 'vi': 0, - 'vun': 3, - 'wa': 4, - 'wae': 3, - 'wo': 0, - 'xh': 3, - 'xog': 3, - 'yo': 0, - 'zh': 0, - 'zu': 3 - }; - - // utility functions for plural rules methods - function isIn(n, list) { - return list.indexOf(n) !== -1; - } - function isBetween(n, start, end) { - return start <= n && n <= end; - } - - // list of all plural rules methods: - // map an integer to the plural form name to use - var pluralRules = { - '0': function(n) { - return 'other'; - }, - '1': function(n) { - if ((isBetween((n % 100), 3, 10))) - return 'few'; - if (n === 0) - return 'zero'; - if ((isBetween((n % 100), 11, 99))) - return 'many'; - if (n == 2) - return 'two'; - if (n == 1) - return 'one'; - return 'other'; - }, - '2': function(n) { - if (n !== 0 && (n % 10) === 0) - return 'many'; - if (n == 2) - return 'two'; - if (n == 1) - return 'one'; - return 'other'; - }, - '3': function(n) { - if (n == 1) - return 'one'; - return 'other'; - }, - '4': function(n) { - if ((isBetween(n, 0, 1))) - return 'one'; - return 'other'; - }, - '5': function(n) { - if ((isBetween(n, 0, 2)) && n != 2) - return 'one'; - return 'other'; - }, - '6': function(n) { - if (n === 0) - return 'zero'; - if ((n % 10) == 1 && (n % 100) != 11) - return 'one'; - return 'other'; - }, - '7': function(n) { - if (n == 2) - return 'two'; - if (n == 1) - return 'one'; - return 'other'; - }, - '8': function(n) { - if ((isBetween(n, 3, 6))) - return 'few'; - if ((isBetween(n, 7, 10))) - return 'many'; - if (n == 2) - return 'two'; - if (n == 1) - return 'one'; - return 'other'; - }, - '9': function(n) { - if (n === 0 || n != 1 && (isBetween((n % 100), 1, 19))) - return 'few'; - if (n == 1) - return 'one'; - return 'other'; - }, - '10': function(n) { - if ((isBetween((n % 10), 2, 9)) && !(isBetween((n % 100), 11, 19))) - return 'few'; - if ((n % 10) == 1 && !(isBetween((n % 100), 11, 19))) - return 'one'; - return 'other'; - }, - '11': function(n) { - if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14))) - return 'few'; - if ((n % 10) === 0 || - (isBetween((n % 10), 5, 9)) || - (isBetween((n % 100), 11, 14))) - return 'many'; - if ((n % 10) == 1 && (n % 100) != 11) - return 'one'; - return 'other'; - }, - '12': function(n) { - if ((isBetween(n, 2, 4))) - return 'few'; - if (n == 1) - return 'one'; - return 'other'; - }, - '13': function(n) { - if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14))) - return 'few'; - if (n != 1 && (isBetween((n % 10), 0, 1)) || - (isBetween((n % 10), 5, 9)) || - (isBetween((n % 100), 12, 14))) - return 'many'; - if (n == 1) - return 'one'; - return 'other'; - }, - '14': function(n) { - if ((isBetween((n % 100), 3, 4))) - return 'few'; - if ((n % 100) == 2) - return 'two'; - if ((n % 100) == 1) - return 'one'; - return 'other'; - }, - '15': function(n) { - if (n === 0 || (isBetween((n % 100), 2, 10))) - return 'few'; - if ((isBetween((n % 100), 11, 19))) - return 'many'; - if (n == 1) - return 'one'; - return 'other'; - }, - '16': function(n) { - if ((n % 10) == 1 && n != 11) - return 'one'; - return 'other'; - }, - '17': function(n) { - if (n == 3) - return 'few'; - if (n === 0) - return 'zero'; - if (n == 6) - return 'many'; - if (n == 2) - return 'two'; - if (n == 1) - return 'one'; - return 'other'; - }, - '18': function(n) { - if (n === 0) - return 'zero'; - if ((isBetween(n, 0, 2)) && n !== 0 && n != 2) - return 'one'; - return 'other'; - }, - '19': function(n) { - if ((isBetween(n, 2, 10))) - return 'few'; - if ((isBetween(n, 0, 1))) - return 'one'; - return 'other'; - }, - '20': function(n) { - if ((isBetween((n % 10), 3, 4) || ((n % 10) == 9)) && !( - isBetween((n % 100), 10, 19) || - isBetween((n % 100), 70, 79) || - isBetween((n % 100), 90, 99) - )) - return 'few'; - if ((n % 1000000) === 0 && n !== 0) - return 'many'; - if ((n % 10) == 2 && !isIn((n % 100), [12, 72, 92])) - return 'two'; - if ((n % 10) == 1 && !isIn((n % 100), [11, 71, 91])) - return 'one'; - return 'other'; - }, - '21': function(n) { - if (n === 0) - return 'zero'; - if (n == 1) - return 'one'; - return 'other'; - }, - '22': function(n) { - if ((isBetween(n, 0, 1)) || (isBetween(n, 11, 99))) - return 'one'; - return 'other'; - }, - '23': function(n) { - if ((isBetween((n % 10), 1, 2)) || (n % 20) === 0) - return 'one'; - return 'other'; - }, - '24': function(n) { - if ((isBetween(n, 3, 10) || isBetween(n, 13, 19))) - return 'few'; - if (isIn(n, [2, 12])) - return 'two'; - if (isIn(n, [1, 11])) - return 'one'; - return 'other'; - } - }; - - // return a function that gives the plural form name for a given integer - var index = locales2rules[lang.replace(/-.*$/, '')]; - if (!(index in pluralRules)) { - console.warn('plural form unknown for [' + lang + ']'); - return function() { return 'other'; }; - } - return pluralRules[index]; - } - - // pre-defined 'plural' macro - gMacros.plural = function(str, param, key, prop) { - var n = parseFloat(param); - if (isNaN(n)) - return str; - - // TODO: support other properties (l20n still doesn't...) - if (prop != gTextProp) - return str; - - // initialize _pluralRules - if (!gMacros._pluralRules) { - gMacros._pluralRules = getPluralRules(gLanguage); - } - var index = '[' + gMacros._pluralRules(n) + ']'; - - // try to find a [zero|one|two] key if it's defined - if (n === 0 && (key + '[zero]') in gL10nData) { - str = gL10nData[key + '[zero]'][prop]; - } else if (n == 1 && (key + '[one]') in gL10nData) { - str = gL10nData[key + '[one]'][prop]; - } else if (n == 2 && (key + '[two]') in gL10nData) { - str = gL10nData[key + '[two]'][prop]; - } else if ((key + index) in gL10nData) { - str = gL10nData[key + index][prop]; - } else if ((key + '[other]') in gL10nData) { - str = gL10nData[key + '[other]'][prop]; - } - - return str; - }; - - - /** - * l10n dictionary functions - */ - - // fetch an l10n object, warn if not found, apply `args' if possible - function getL10nData(key, args, fallback) { - var data = gL10nData[key]; - if (!data) { - console.warn('#' + key + ' is undefined.'); - if (!fallback) { - return null; - } - data = fallback; - } - - /** This is where l10n expressions should be processed. - * The plan is to support C-style expressions from the l20n project; - * until then, only two kinds of simple expressions are supported: - * {[ index ]} and {{ arguments }}. - */ - var rv = {}; - for (var prop in data) { - var str = data[prop]; - str = substIndexes(str, args, key, prop); - str = substArguments(str, args, key); - rv[prop] = str; - } - return rv; - } - - // replace {[macros]} with their values - function substIndexes(str, args, key, prop) { - var reIndex = /\{\[\s*([a-zA-Z]+)\(([a-zA-Z]+)\)\s*\]\}/; - var reMatch = reIndex.exec(str); - if (!reMatch || !reMatch.length) - return str; - - // an index/macro has been found - // Note: at the moment, only one parameter is supported - var macroName = reMatch[1]; - var paramName = reMatch[2]; - var param; - if (args && paramName in args) { - param = args[paramName]; - } else if (paramName in gL10nData) { - param = gL10nData[paramName]; - } - - // there's no macro parser yet: it has to be defined in gMacros - if (macroName in gMacros) { - var macro = gMacros[macroName]; - str = macro(str, param, key, prop); - } - return str; - } - - // replace {{arguments}} with their values - function substArguments(str, args, key) { - var reArgs = /\{\{\s*(.+?)\s*\}\}/g; - return str.replace(reArgs, function(matched_text, arg) { - if (args && arg in args) { - return args[arg]; - } - if (arg in gL10nData) { - return gL10nData[arg]; - } - console.log('argument {{' + arg + '}} for #' + key + ' is undefined.'); - return matched_text; - }); - } - - // translate an HTML element - function translateElement(element) { - var l10n = getL10nAttributes(element); - if (!l10n.id) - return; - - // get the related l10n object - var data = getL10nData(l10n.id, l10n.args); - if (!data) { - console.warn('#' + l10n.id + ' is undefined.'); - return; - } - - // translate element (TODO: security checks?) - if (data[gTextProp]) { // XXX - if (getChildElementCount(element) === 0) { - element[gTextProp] = data[gTextProp]; - } else { - // this element has element children: replace the content of the first - // (non-empty) child textNode and clear other child textNodes - var children = element.childNodes; - var found = false; - for (var i = 0, l = children.length; i < l; i++) { - if (children[i].nodeType === 3 && /\S/.test(children[i].nodeValue)) { - if (found) { - children[i].nodeValue = ''; - } else { - children[i].nodeValue = data[gTextProp]; - found = true; - } - } - } - // if no (non-empty) textNode is found, insert a textNode before the - // first element child. - if (!found) { - var textNode = document.createTextNode(data[gTextProp]); - element.insertBefore(textNode, element.firstChild); - } - } - delete data[gTextProp]; - } - - for (var k in data) { - element[k] = data[k]; - } - } - - // webkit browsers don't currently support 'children' on SVG elements... - function getChildElementCount(element) { - if (element.children) { - return element.children.length; - } - if (typeof element.childElementCount !== 'undefined') { - return element.childElementCount; - } - var count = 0; - for (var i = 0; i < element.childNodes.length; i++) { - count += element.nodeType === 1 ? 1 : 0; - } - return count; - } - - // translate an HTML subtree - function translateFragment(element) { - element = element || document.documentElement; - - // check all translatable children (= w/ a `data-l10n-id' attribute) - var children = getTranslatableChildren(element); - var elementCount = children.length; - for (var i = 0; i < elementCount; i++) { - translateElement(children[i]); - } - - // translate element itself if necessary - translateElement(element); - } - - return { - // get a localized string - get: function(key, args, fallbackString) { - var index = key.lastIndexOf('.'); - var prop = gTextProp; - if (index > 0) { // An attribute has been specified - prop = key.substr(index + 1); - key = key.substring(0, index); - } - var fallback; - if (fallbackString) { - fallback = {}; - fallback[prop] = fallbackString; - } - var data = getL10nData(key, args, fallback); - if (data && prop in data) { - return data[prop]; - } - return '{{' + key + '}}'; - }, - - // debug - getData: function() { return gL10nData; }, - getText: function() { return gTextData; }, - - // get|set the document language - getLanguage: function() { return gLanguage; }, - setLanguage: function(lang, callback) { - loadLocale(lang, function() { - if (callback) - callback(); - translateFragment(); - }); - }, - - // get the direction (ltr|rtl) of the current language - getDirection: function() { - // http://www.w3.org/International/questions/qa-scripts - // Arabic, Hebrew, Farsi, Pashto, Urdu - var rtlList = ['ar', 'he', 'fa', 'ps', 'ur']; - var shortCode = gLanguage.split('-', 1)[0]; - return (rtlList.indexOf(shortCode) >= 0) ? 'rtl' : 'ltr'; - }, - - // translate an element or document fragment - translate: translateFragment, - - // this can be used to prevent race conditions - getReadyState: function() { return gReadyState; }, - ready: function(callback) { - if (!callback) { - return; - } else if (gReadyState == 'complete' || gReadyState == 'interactive') { - window.setTimeout(function() { - callback(); - }); - } else if (document.addEventListener) { - document.addEventListener('localized', function once() { - document.removeEventListener('localized', once); - callback(); - }); - } - } - }; -}) (window, document); diff --git a/static/pdf.js/locale/ach/viewer.ftl b/static/pdf.js/locale/ach/viewer.ftl new file mode 100644 index 00000000..36769b70 --- /dev/null +++ b/static/pdf.js/locale/ach/viewer.ftl @@ -0,0 +1,225 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Pot buk mukato +pdfjs-previous-button-label = Mukato +pdfjs-next-button = + .title = Pot buk malubo +pdfjs-next-button-label = Malubo +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Pot buk +# 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 = pi { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } me { $pagesCount }) +pdfjs-zoom-out-button = + .title = Jwik Matidi +pdfjs-zoom-out-button-label = Jwik Matidi +pdfjs-zoom-in-button = + .title = Kwot Madit +pdfjs-zoom-in-button-label = Kwot Madit +pdfjs-zoom-select = + .title = Kwoti +pdfjs-presentation-mode-button = + .title = Lokke i kit me tyer +pdfjs-presentation-mode-button-label = Kit me tyer +pdfjs-open-file-button = + .title = Yab Pwail +pdfjs-open-file-button-label = Yab +pdfjs-print-button = + .title = Go +pdfjs-print-button-label = Go + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Gintic +pdfjs-tools-button-label = Gintic +pdfjs-first-page-button = + .title = Cit i pot buk mukwongo +pdfjs-first-page-button-label = Cit i pot buk mukwongo +pdfjs-last-page-button = + .title = Cit i pot buk magiko +pdfjs-last-page-button-label = Cit i pot buk magiko +pdfjs-page-rotate-cw-button = + .title = Wire i tung lacuc +pdfjs-page-rotate-cw-button-label = Wire i tung lacuc +pdfjs-page-rotate-ccw-button = + .title = Wire i tung lacam +pdfjs-page-rotate-ccw-button-label = Wire i tung lacam +pdfjs-cursor-text-select-tool-button = + .title = Cak gitic me yero coc +pdfjs-cursor-text-select-tool-button-label = Gitic me yero coc +pdfjs-cursor-hand-tool-button = + .title = Cak gitic me cing +pdfjs-cursor-hand-tool-button-label = Gitic cing + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Jami me gin acoya… +pdfjs-document-properties-button-label = Jami me gin acoya… +pdfjs-document-properties-file-name = Nying pwail: +pdfjs-document-properties-file-size = Dit pa pwail: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Wiye: +pdfjs-document-properties-author = Ngat mucoyo: +pdfjs-document-properties-subject = Subjek: +pdfjs-document-properties-keywords = Lok mapire tek: +pdfjs-document-properties-creation-date = Nino dwe me cwec: +pdfjs-document-properties-modification-date = Nino dwe me yub: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Lacwec: +pdfjs-document-properties-producer = Layub PDF: +pdfjs-document-properties-version = Kit PDF: +pdfjs-document-properties-page-count = Kwan me pot buk: +pdfjs-document-properties-page-size = Dit pa potbuk: +pdfjs-document-properties-page-size-unit-inches = i +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = atir +pdfjs-document-properties-page-size-orientation-landscape = arii +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 = Waraga +pdfjs-document-properties-page-size-name-legal = Cik + +## 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 }) + +## + +pdfjs-document-properties-linearized-yes = Eyo +pdfjs-document-properties-linearized-no = Pe +pdfjs-document-properties-close-button = Lor + +## Print + +pdfjs-print-progress-message = Yubo coc me agoya… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Juki +pdfjs-printing-not-supported = Ciko: Layeny ma pe teno goyo liweng. +pdfjs-printing-not-ready = Ciko: PDF pe ocane weng me agoya. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Lok gintic ma inget +pdfjs-toggle-sidebar-button-label = Lok gintic ma inget +pdfjs-document-outline-button = + .title = Nyut Wiyewiye me Gin acoya (dii-kiryo me yaro/kano jami weng) +pdfjs-document-outline-button-label = Pek pa gin acoya +pdfjs-attachments-button = + .title = Nyut twec +pdfjs-attachments-button-label = Twec +pdfjs-thumbs-button = + .title = Nyut cal +pdfjs-thumbs-button-label = Cal +pdfjs-findbar-button = + .title = Nong iye gin acoya +pdfjs-findbar-button-label = Nong + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Pot buk { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Cal me pot buk { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Nong + .placeholder = Nong i dokumen… +pdfjs-find-previous-button = + .title = Nong timme pa lok mukato +pdfjs-find-previous-button-label = Mukato +pdfjs-find-next-button = + .title = Nong timme pa lok malubo +pdfjs-find-next-button-label = Malubo +pdfjs-find-highlight-checkbox = Ket Lanyut I Weng +pdfjs-find-match-case-checkbox-label = Lok marwate +pdfjs-find-reached-top = Oo iwi gin acoya, omede ki i tere +pdfjs-find-reached-bottom = Oo i agiki me gin acoya, omede ki iwiye +pdfjs-find-not-found = Lok pe ononge + +## Predefined zoom values + +pdfjs-page-scale-width = Lac me iye pot buk +pdfjs-page-scale-fit = Porre me pot buk +pdfjs-page-scale-auto = Kwot pire kene +pdfjs-page-scale-actual = Dite kikome +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = Bal otime kun cano PDF. +pdfjs-invalid-file-error = Pwail me PDF ma pe atir onyo obale woko. +pdfjs-missing-file-error = Pwail me PDF tye ka rem. +pdfjs-unexpected-response-error = Lagam mape kigeno pa lapok tic. +pdfjs-rendering-error = Bal otime i kare me nyuto pot buk. + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Lok angea manok] + +## Password + +pdfjs-password-label = Ket mung me donyo me yabo pwail me PDF man. +pdfjs-password-invalid = Mung me donyo pe atir. Tim ber i tem doki. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Juki +pdfjs-web-fonts-disabled = Kijuko dit pa coc me kakube woko: pe romo tic ki dit pa coc me PDF ma kiketo i kine. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/ach/viewer.properties b/static/pdf.js/locale/ach/viewer.properties deleted file mode 100644 index 110e317f..00000000 --- a/static/pdf.js/locale/ach/viewer.properties +++ /dev/null @@ -1,203 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Pot buk mukato -previous_label=Mukato -next.title=Pot buk malubo -next_label=Malubo - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Pot buk -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=pi {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} me {{pagesCount}}) - -zoom_out.title=Jwik Matidi -zoom_out_label=Jwik Matidi -zoom_in.title=Kwot Madit -zoom_in_label=Kwot Madit -zoom.title=Kwoti -presentation_mode.title=Lokke i kit me tyer -presentation_mode_label=Kit me tyer -open_file.title=Yab Pwail -open_file_label=Yab -print.title=Go -print_label=Go -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -# LOCALIZATION NOTE (download_button_label): 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. -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. - -# Secondary toolbar and context menu -tools.title=Gintic -tools_label=Gintic -first_page.title=Cit i pot buk mukwongo -first_page_label=Cit i pot buk mukwongo -last_page.title=Cit i pot buk magiko -last_page_label=Cit i pot buk magiko -page_rotate_cw.title=Wire i tung lacuc -page_rotate_cw_label=Wire i tung lacuc -page_rotate_ccw.title=Wire i tung lacam -page_rotate_ccw_label=Wire i tung lacam - -cursor_text_select_tool.title=Cak gitic me yero coc -cursor_text_select_tool_label=Gitic me yero coc -cursor_hand_tool.title=Cak gitic me cing -cursor_hand_tool_label=Gitic cing - - - -# Document properties dialog box -document_properties.title=Jami me gin acoya… -document_properties_label=Jami me gin acoya… -document_properties_file_name=Nying pwail: -document_properties_file_size=Dit pa pwail: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Wiye: -document_properties_author=Ngat mucoyo: -document_properties_subject=Subjek: -document_properties_keywords=Lok mapire tek: -document_properties_creation_date=Nino dwe me cwec: -document_properties_modification_date=Nino dwe me yub: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Lacwec: -document_properties_producer=Layub PDF: -document_properties_version=Kit PDF: -document_properties_page_count=Kwan me pot buk: -document_properties_page_size=Dit pa potbuk: -document_properties_page_size_unit_inches=i -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=atir -document_properties_page_size_orientation_landscape=arii -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Waraga -document_properties_page_size_name_legal=Cik -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized_yes=Eyo -document_properties_linearized_no=Pe -document_properties_close=Lor - -print_progress_message=Yubo coc me agoya… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Juki - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Lok gintic ma inget -toggle_sidebar_label=Lok gintic ma inget -document_outline.title=Nyut Wiyewiye me Gin acoya (dii-kiryo me yaro/kano jami weng) -document_outline_label=Pek pa gin acoya -attachments.title=Nyut twec -attachments_label=Twec -thumbs.title=Nyut cal -thumbs_label=Cal -findbar.title=Nong iye gin acoya -findbar_label=Nong - -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Pot buk {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Cal me pot buk {{page}} - -# Find panel button title and messages -find_input.title=Nong -find_input.placeholder=Nong i dokumen… -find_previous.title=Nong timme pa lok mukato -find_previous_label=Mukato -find_next.title=Nong timme pa lok malubo -find_next_label=Malubo -find_highlight=Ket Lanyut I Weng -find_match_case_label=Lok marwate -find_reached_top=Oo iwi gin acoya, omede ki i tere -find_reached_bottom=Oo i agiki me gin acoya, omede ki iwiye -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_not_found=Lok pe ononge - -# Predefined zoom values -page_scale_width=Lac me iye pot buk -page_scale_fit=Porre me pot buk -page_scale_auto=Kwot pire kene -page_scale_actual=Dite kikome -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Bal otime kun cano PDF. -invalid_file_error=Pwail me PDF ma pe atir onyo obale woko. -missing_file_error=Pwail me PDF tye ka rem. -unexpected_response_error=Lagam mape kigeno pa lapok tic. -rendering_error=Bal otime i kare me nyuto pot buk. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Lok angea manok] -password_label=Ket mung me donyo me yabo pwail me PDF man. -password_invalid=Mung me donyo pe atir. Tim ber i tem doki. -password_ok=OK -password_cancel=Juki - -printing_not_supported=Ciko: Layeny ma pe teno goyo liweng. -printing_not_ready=Ciko: PDF pe ocane weng me agoya. -web_fonts_disabled=Kijuko dit pa coc me kakube woko: pe romo tic ki dit pa coc me PDF ma kiketo i kine. - -# Editor - - - -# Editor Parameters - -# Editor aria diff --git a/static/pdf.js/locale/af/viewer.ftl b/static/pdf.js/locale/af/viewer.ftl new file mode 100644 index 00000000..7c4346fe --- /dev/null +++ b/static/pdf.js/locale/af/viewer.ftl @@ -0,0 +1,212 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Vorige bladsy +pdfjs-previous-button-label = Vorige +pdfjs-next-button = + .title = Volgende bladsy +pdfjs-next-button-label = Volgende +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Bladsy +# 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 = van { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } van { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zoem uit +pdfjs-zoom-out-button-label = Zoem uit +pdfjs-zoom-in-button = + .title = Zoem in +pdfjs-zoom-in-button-label = Zoem in +pdfjs-zoom-select = + .title = Zoem +pdfjs-presentation-mode-button = + .title = Wissel na voorleggingsmodus +pdfjs-presentation-mode-button-label = Voorleggingsmodus +pdfjs-open-file-button = + .title = Open lêer +pdfjs-open-file-button-label = Open +pdfjs-print-button = + .title = Druk +pdfjs-print-button-label = Druk + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Nutsgoed +pdfjs-tools-button-label = Nutsgoed +pdfjs-first-page-button = + .title = Gaan na eerste bladsy +pdfjs-first-page-button-label = Gaan na eerste bladsy +pdfjs-last-page-button = + .title = Gaan na laaste bladsy +pdfjs-last-page-button-label = Gaan na laaste bladsy +pdfjs-page-rotate-cw-button = + .title = Roteer kloksgewys +pdfjs-page-rotate-cw-button-label = Roteer kloksgewys +pdfjs-page-rotate-ccw-button = + .title = Roteer anti-kloksgewys +pdfjs-page-rotate-ccw-button-label = Roteer anti-kloksgewys +pdfjs-cursor-text-select-tool-button = + .title = Aktiveer gereedskap om teks te merk +pdfjs-cursor-text-select-tool-button-label = Teksmerkgereedskap +pdfjs-cursor-hand-tool-button = + .title = Aktiveer handjie +pdfjs-cursor-hand-tool-button-label = Handjie + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Dokumenteienskappe… +pdfjs-document-properties-button-label = Dokumenteienskappe… +pdfjs-document-properties-file-name = Lêernaam: +pdfjs-document-properties-file-size = Lêergrootte: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } kG ({ $size_b } grepe) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MG ({ $size_b } grepe) +pdfjs-document-properties-title = Titel: +pdfjs-document-properties-author = Outeur: +pdfjs-document-properties-subject = Onderwerp: +pdfjs-document-properties-keywords = Sleutelwoorde: +pdfjs-document-properties-creation-date = Skeppingsdatum: +pdfjs-document-properties-modification-date = Wysigingsdatum: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Skepper: +pdfjs-document-properties-producer = PDF-vervaardiger: +pdfjs-document-properties-version = PDF-weergawe: +pdfjs-document-properties-page-count = Aantal bladsye: + +## 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-close-button = Sluit + +## Print + +pdfjs-print-progress-message = Berei tans dokument voor om te druk… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Kanselleer +pdfjs-printing-not-supported = Waarskuwing: Dié blaaier ondersteun nie drukwerk ten volle nie. +pdfjs-printing-not-ready = Waarskuwing: Die PDF is nog nie volledig gelaai vir drukwerk nie. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Sypaneel aan/af +pdfjs-toggle-sidebar-button-label = Sypaneel aan/af +pdfjs-document-outline-button = + .title = Wys dokumentskema (dubbelklik om alle items oop/toe te vou) +pdfjs-document-outline-button-label = Dokumentoorsig +pdfjs-attachments-button = + .title = Wys aanhegsels +pdfjs-attachments-button-label = Aanhegsels +pdfjs-thumbs-button = + .title = Wys duimnaels +pdfjs-thumbs-button-label = Duimnaels +pdfjs-findbar-button = + .title = Soek in dokument +pdfjs-findbar-button-label = Vind + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Bladsy { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Duimnael van bladsy { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Vind + .placeholder = Soek in dokument… +pdfjs-find-previous-button = + .title = Vind die vorige voorkoms van die frase +pdfjs-find-previous-button-label = Vorige +pdfjs-find-next-button = + .title = Vind die volgende voorkoms van die frase +pdfjs-find-next-button-label = Volgende +pdfjs-find-highlight-checkbox = Verlig almal +pdfjs-find-match-case-checkbox-label = Kassensitief +pdfjs-find-reached-top = Bokant van dokument is bereik; gaan voort van onder af +pdfjs-find-reached-bottom = Einde van dokument is bereik; gaan voort van bo af +pdfjs-find-not-found = Frase nie gevind nie + +## Predefined zoom values + +pdfjs-page-scale-width = Bladsywydte +pdfjs-page-scale-fit = Pas bladsy +pdfjs-page-scale-auto = Outomatiese zoem +pdfjs-page-scale-actual = Werklike grootte +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = 'n Fout het voorgekom met die laai van die PDF. +pdfjs-invalid-file-error = Ongeldige of korrupte PDF-lêer. +pdfjs-missing-file-error = PDF-lêer is weg. +pdfjs-unexpected-response-error = Onverwagse antwoord van bediener. +pdfjs-rendering-error = 'n Fout het voorgekom toe die bladsy weergegee is. + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type }-annotasie] + +## Password + +pdfjs-password-label = Gee die wagwoord om dié PDF-lêer mee te open. +pdfjs-password-invalid = Ongeldige wagwoord. Probeer gerus weer. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Kanselleer +pdfjs-web-fonts-disabled = Webfonte is gedeaktiveer: kan nie PDF-fonte wat ingebed is, gebruik nie. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/af/viewer.properties b/static/pdf.js/locale/af/viewer.properties deleted file mode 100644 index f2a9e2a1..00000000 --- a/static/pdf.js/locale/af/viewer.properties +++ /dev/null @@ -1,156 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Vorige bladsy -previous_label=Vorige -next.title=Volgende bladsy -next_label=Volgende - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Bladsy -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=van {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} van {{pagesCount}}) - -zoom_out.title=Zoem uit -zoom_out_label=Zoem uit -zoom_in.title=Zoem in -zoom_in_label=Zoem in -zoom.title=Zoem -presentation_mode.title=Wissel na voorleggingsmodus -presentation_mode_label=Voorleggingsmodus -open_file.title=Open lêer -open_file_label=Open -print.title=Druk -print_label=Druk - -# Secondary toolbar and context menu -tools.title=Nutsgoed -tools_label=Nutsgoed -first_page.title=Gaan na eerste bladsy -first_page_label=Gaan na eerste bladsy -last_page.title=Gaan na laaste bladsy -last_page_label=Gaan na laaste bladsy -page_rotate_cw.title=Roteer kloksgewys -page_rotate_cw_label=Roteer kloksgewys -page_rotate_ccw.title=Roteer anti-kloksgewys -page_rotate_ccw_label=Roteer anti-kloksgewys - -cursor_text_select_tool.title=Aktiveer gereedskap om teks te merk -cursor_text_select_tool_label=Teksmerkgereedskap -cursor_hand_tool.title=Aktiveer handjie -cursor_hand_tool_label=Handjie - -# Document properties dialog box -document_properties.title=Dokumenteienskappe… -document_properties_label=Dokumenteienskappe… -document_properties_file_name=Lêernaam: -document_properties_file_size=Lêergrootte: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} kG ({{size_b}} grepe) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MG ({{size_b}} grepe) -document_properties_title=Titel: -document_properties_author=Outeur: -document_properties_subject=Onderwerp: -document_properties_keywords=Sleutelwoorde: -document_properties_creation_date=Skeppingsdatum: -document_properties_modification_date=Wysigingsdatum: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Skepper: -document_properties_producer=PDF-vervaardiger: -document_properties_version=PDF-weergawe: -document_properties_page_count=Aantal bladsye: -document_properties_close=Sluit - -print_progress_message=Berei tans dokument voor om te druk… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Kanselleer - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Sypaneel aan/af -toggle_sidebar_label=Sypaneel aan/af -document_outline.title=Wys dokumentskema (dubbelklik om alle items oop/toe te vou) -document_outline_label=Dokumentoorsig -attachments.title=Wys aanhegsels -attachments_label=Aanhegsels -thumbs.title=Wys duimnaels -thumbs_label=Duimnaels -findbar.title=Soek in dokument -findbar_label=Vind - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Bladsy {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Duimnael van bladsy {{page}} - -# Find panel button title and messages -find_input.title=Vind -find_input.placeholder=Soek in dokument… -find_previous.title=Vind die vorige voorkoms van die frase -find_previous_label=Vorige -find_next.title=Vind die volgende voorkoms van die frase -find_next_label=Volgende -find_highlight=Verlig almal -find_match_case_label=Kassensitief -find_reached_top=Bokant van dokument is bereik; gaan voort van onder af -find_reached_bottom=Einde van dokument is bereik; gaan voort van bo af -find_not_found=Frase nie gevind nie - -# Predefined zoom values -page_scale_width=Bladsywydte -page_scale_fit=Pas bladsy -page_scale_auto=Outomatiese zoem -page_scale_actual=Werklike grootte -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error='n Fout het voorgekom met die laai van die PDF. -invalid_file_error=Ongeldige of korrupte PDF-lêer. -missing_file_error=PDF-lêer is weg. -unexpected_response_error=Onverwagse antwoord van bediener. - -rendering_error='n Fout het voorgekom toe die bladsy weergegee is. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}}-annotasie] -password_label=Gee die wagwoord om dié PDF-lêer mee te open. -password_invalid=Ongeldige wagwoord. Probeer gerus weer. -password_ok=OK -password_cancel=Kanselleer - -printing_not_supported=Waarskuwing: Dié blaaier ondersteun nie drukwerk ten volle nie. -printing_not_ready=Waarskuwing: Die PDF is nog nie volledig gelaai vir drukwerk nie. -web_fonts_disabled=Webfonte is gedeaktiveer: kan nie PDF-fonte wat ingebed is, gebruik nie. - diff --git a/static/pdf.js/locale/an/viewer.ftl b/static/pdf.js/locale/an/viewer.ftl new file mode 100644 index 00000000..67331477 --- /dev/null +++ b/static/pdf.js/locale/an/viewer.ftl @@ -0,0 +1,257 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Pachina anterior +pdfjs-previous-button-label = Anterior +pdfjs-next-button = + .title = Pachina siguient +pdfjs-next-button-label = Siguient +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Pachina +# 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 = de { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount }) +pdfjs-zoom-out-button = + .title = Achiquir +pdfjs-zoom-out-button-label = Achiquir +pdfjs-zoom-in-button = + .title = Agrandir +pdfjs-zoom-in-button-label = Agrandir +pdfjs-zoom-select = + .title = Grandaria +pdfjs-presentation-mode-button = + .title = Cambear t'o modo de presentación +pdfjs-presentation-mode-button-label = Modo de presentación +pdfjs-open-file-button = + .title = Ubrir o fichero +pdfjs-open-file-button-label = Ubrir +pdfjs-print-button = + .title = Imprentar +pdfjs-print-button-label = Imprentar + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Ferramientas +pdfjs-tools-button-label = Ferramientas +pdfjs-first-page-button = + .title = Ir ta la primer pachina +pdfjs-first-page-button-label = Ir ta la primer pachina +pdfjs-last-page-button = + .title = Ir ta la zaguer pachina +pdfjs-last-page-button-label = Ir ta la zaguer pachina +pdfjs-page-rotate-cw-button = + .title = Chirar enta la dreita +pdfjs-page-rotate-cw-button-label = Chira enta la dreita +pdfjs-page-rotate-ccw-button = + .title = Chirar enta la zurda +pdfjs-page-rotate-ccw-button-label = Chirar enta la zurda +pdfjs-cursor-text-select-tool-button = + .title = Activar la ferramienta de selección de texto +pdfjs-cursor-text-select-tool-button-label = Ferramienta de selección de texto +pdfjs-cursor-hand-tool-button = + .title = Activar la ferramienta man +pdfjs-cursor-hand-tool-button-label = Ferramienta man +pdfjs-scroll-vertical-button = + .title = Usar lo desplazamiento vertical +pdfjs-scroll-vertical-button-label = Desplazamiento vertical +pdfjs-scroll-horizontal-button = + .title = Usar lo desplazamiento horizontal +pdfjs-scroll-horizontal-button-label = Desplazamiento horizontal +pdfjs-scroll-wrapped-button = + .title = Activaar lo desplazamiento contino +pdfjs-scroll-wrapped-button-label = Desplazamiento contino +pdfjs-spread-none-button = + .title = No unir vistas de pachinas +pdfjs-spread-none-button-label = Una pachina nomás +pdfjs-spread-odd-button = + .title = Mostrar vista de pachinas, con as impars a la zurda +pdfjs-spread-odd-button-label = Doble pachina, impar a la zurda +pdfjs-spread-even-button = + .title = Amostrar vista de pachinas, con as pars a la zurda +pdfjs-spread-even-button-label = Doble pachina, para a la zurda + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Propiedatz d'o documento... +pdfjs-document-properties-button-label = Propiedatz d'o documento... +pdfjs-document-properties-file-name = Nombre de fichero: +pdfjs-document-properties-file-size = Grandaria d'o fichero: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Titol: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Afer: +pdfjs-document-properties-keywords = Parolas clau: +pdfjs-document-properties-creation-date = Calendata de creyación: +pdfjs-document-properties-modification-date = Calendata de modificación: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Creyador: +pdfjs-document-properties-producer = Creyador de PDF: +pdfjs-document-properties-version = Versión de PDF: +pdfjs-document-properties-page-count = Numero de pachinas: +pdfjs-document-properties-page-size = Mida de pachina: +pdfjs-document-properties-page-size-unit-inches = pulgadas +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = vertical +pdfjs-document-properties-page-size-orientation-landscape = horizontal +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 = Carta +pdfjs-document-properties-page-size-name-legal = 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 } x { $height } { $unit } { $orientation } +pdfjs-document-properties-page-size-dimension-name-string = { $width } x { $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 = Vista web rapida: +pdfjs-document-properties-linearized-yes = Sí +pdfjs-document-properties-linearized-no = No +pdfjs-document-properties-close-button = Zarrar + +## Print + +pdfjs-print-progress-message = Se ye preparando la documentación pa imprentar… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Cancelar +pdfjs-printing-not-supported = Pare cuenta: Iste navegador no maneya totalment as impresions. +pdfjs-printing-not-ready = Aviso: Encara no se ha cargau completament o PDF ta imprentar-lo. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Amostrar u amagar a barra lateral +pdfjs-toggle-sidebar-notification-button = + .title = Cambiar barra lateral (lo documento contiene esquema/adchuntos/capas) +pdfjs-toggle-sidebar-button-label = Amostrar a barra lateral +pdfjs-document-outline-button = + .title = Amostrar esquema d'o documento (fer doble clic pa expandir/compactar totz los items) +pdfjs-document-outline-button-label = Esquema d'o documento +pdfjs-attachments-button = + .title = Amostrar os adchuntos +pdfjs-attachments-button-label = Adchuntos +pdfjs-layers-button = + .title = Amostrar capas (doble clic para reiniciar totas las capas a lo estau per defecto) +pdfjs-layers-button-label = Capas +pdfjs-thumbs-button = + .title = Amostrar as miniaturas +pdfjs-thumbs-button-label = Miniaturas +pdfjs-findbar-button = + .title = Trobar en o documento +pdfjs-findbar-button-label = Trobar +pdfjs-additional-layers = Capas adicionals + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Pachina { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura d'a pachina { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Trobar + .placeholder = Trobar en o documento… +pdfjs-find-previous-button = + .title = Trobar l'anterior coincidencia d'a frase +pdfjs-find-previous-button-label = Anterior +pdfjs-find-next-button = + .title = Trobar a siguient coincidencia d'a frase +pdfjs-find-next-button-label = Siguient +pdfjs-find-highlight-checkbox = Resaltar-lo tot +pdfjs-find-match-case-checkbox-label = Coincidencia de mayusclas/minusclas +pdfjs-find-entire-word-checkbox-label = Parolas completas +pdfjs-find-reached-top = S'ha plegau a l'inicio d'o documento, se contina dende baixo +pdfjs-find-reached-bottom = S'ha plegau a la fin d'o documento, se contina dende alto +pdfjs-find-not-found = No s'ha trobau a frase + +## Predefined zoom values + +pdfjs-page-scale-width = Amplaria d'a pachina +pdfjs-page-scale-fit = Achuste d'a pachina +pdfjs-page-scale-auto = Grandaria automatica +pdfjs-page-scale-actual = Grandaria actual +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = S'ha produciu una error en cargar o PDF. +pdfjs-invalid-file-error = O PDF no ye valido u ye estorbau. +pdfjs-missing-file-error = No i ha fichero PDF. +pdfjs-unexpected-response-error = Respuesta a lo servicio inasperada. +pdfjs-rendering-error = Ha ocurriu una error en renderizar a pachina. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Anotación { $type }] + +## Password + +pdfjs-password-label = Introduzca a clau ta ubrir iste fichero PDF. +pdfjs-password-invalid = Clau invalida. Torna a intentar-lo. +pdfjs-password-ok-button = Acceptar +pdfjs-password-cancel-button = Cancelar +pdfjs-web-fonts-disabled = As fuents web son desactivadas: no se puet incrustar fichers PDF. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/an/viewer.properties b/static/pdf.js/locale/an/viewer.properties deleted file mode 100644 index 2fc1056b..00000000 --- a/static/pdf.js/locale/an/viewer.properties +++ /dev/null @@ -1,222 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Pachina anterior -previous_label=Anterior -next.title=Pachina siguient -next_label=Siguient - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Pachina -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=de {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} de {{pagesCount}}) - -zoom_out.title=Achiquir -zoom_out_label=Achiquir -zoom_in.title=Agrandir -zoom_in_label=Agrandir -zoom.title=Grandaria -presentation_mode.title=Cambear t'o modo de presentación -presentation_mode_label=Modo de presentación -open_file.title=Ubrir o fichero -open_file_label=Ubrir -print.title=Imprentar -print_label=Imprentar - -# Secondary toolbar and context menu -tools.title=Ferramientas -tools_label=Ferramientas -first_page.title=Ir ta la primer pachina -first_page_label=Ir ta la primer pachina -last_page.title=Ir ta la zaguer pachina -last_page_label=Ir ta la zaguer pachina -page_rotate_cw.title=Chirar enta la dreita -page_rotate_cw_label=Chira enta la dreita -page_rotate_ccw.title=Chirar enta la zurda -page_rotate_ccw_label=Chirar enta la zurda - -cursor_text_select_tool.title=Activar la ferramienta de selección de texto -cursor_text_select_tool_label=Ferramienta de selección de texto -cursor_hand_tool.title=Activar la ferramienta man -cursor_hand_tool_label=Ferramienta man - -scroll_vertical.title=Usar lo desplazamiento vertical -scroll_vertical_label=Desplazamiento vertical -scroll_horizontal.title=Usar lo desplazamiento horizontal -scroll_horizontal_label=Desplazamiento horizontal -scroll_wrapped.title=Activaar lo desplazamiento contino -scroll_wrapped_label=Desplazamiento contino - -spread_none.title=No unir vistas de pachinas -spread_none_label=Una pachina nomás -spread_odd.title=Mostrar vista de pachinas, con as impars a la zurda -spread_odd_label=Doble pachina, impar a la zurda -spread_even.title=Amostrar vista de pachinas, con as pars a la zurda -spread_even_label=Doble pachina, para a la zurda - -# Document properties dialog box -document_properties.title=Propiedatz d'o documento... -document_properties_label=Propiedatz d'o documento... -document_properties_file_name=Nombre de fichero: -document_properties_file_size=Grandaria d'o fichero: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Titol: -document_properties_author=Autor: -document_properties_subject=Afer: -document_properties_keywords=Parolas clau: -document_properties_creation_date=Calendata de creyación: -document_properties_modification_date=Calendata de modificación: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Creyador: -document_properties_producer=Creyador de PDF: -document_properties_version=Versión de PDF: -document_properties_page_count=Numero de pachinas: -document_properties_page_size=Mida de pachina: -document_properties_page_size_unit_inches=pulgadas -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=vertical -document_properties_page_size_orientation_landscape=horizontal -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Carta -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} x {{height}} {{unit}} {{orientation}} -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} x {{height}} {{unit}} {{name}}, {{orientation}} -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Vista web rapida: -document_properties_linearized_yes=Sí -document_properties_linearized_no=No -document_properties_close=Zarrar - -print_progress_message=Se ye preparando la documentación pa imprentar… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Cancelar - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Amostrar u amagar a barra lateral -toggle_sidebar_notification2.title=Cambiar barra lateral (lo documento contiene esquema/adchuntos/capas) -toggle_sidebar_label=Amostrar a barra lateral -document_outline.title=Amostrar esquema d'o documento (fer doble clic pa expandir/compactar totz los items) -document_outline_label=Esquema d'o documento -attachments.title=Amostrar os adchuntos -attachments_label=Adchuntos -layers.title=Amostrar capas (doble clic para reiniciar totas las capas a lo estau per defecto) -layers_label=Capas -thumbs.title=Amostrar as miniaturas -thumbs_label=Miniaturas -findbar.title=Trobar en o documento -findbar_label=Trobar - -additional_layers=Capas adicionals -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Pachina {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura d'a pachina {{page}} - -# Find panel button title and messages -find_input.title=Trobar -find_input.placeholder=Trobar en o documento… -find_previous.title=Trobar l'anterior coincidencia d'a frase -find_previous_label=Anterior -find_next.title=Trobar a siguient coincidencia d'a frase -find_next_label=Siguient -find_highlight=Resaltar-lo tot -find_match_case_label=Coincidencia de mayusclas/minusclas -find_entire_word_label=Parolas completas -find_reached_top=S'ha plegau a l'inicio d'o documento, se contina dende baixo -find_reached_bottom=S'ha plegau a la fin d'o documento, se contina dende alto -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} de {{total}} coincidencia -find_match_count[two]={{current}} de {{total}} coincidencias -find_match_count[few]={{current}} de {{total}} coincidencias -find_match_count[many]={{current}} de {{total}} coincidencias -find_match_count[other]={{current}} de {{total}} coincidencias -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Mas de {{limit}} coincidencias -find_match_count_limit[one]=Mas de {{limit}} coincidencias -find_match_count_limit[two]=Mas que {{limit}} coincidencias -find_match_count_limit[few]=Mas que {{limit}} coincidencias -find_match_count_limit[many]=Mas que {{limit}} coincidencias -find_match_count_limit[other]=Mas que {{limit}} coincidencias -find_not_found=No s'ha trobau a frase - -# Predefined zoom values -page_scale_width=Amplaria d'a pachina -page_scale_fit=Achuste d'a pachina -page_scale_auto=Grandaria automatica -page_scale_actual=Grandaria actual -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=S'ha produciu una error en cargar o PDF. -invalid_file_error=O PDF no ye valido u ye estorbau. -missing_file_error=No i ha fichero PDF. -unexpected_response_error=Respuesta a lo servicio inasperada. - -rendering_error=Ha ocurriu una error en renderizar a pachina. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Anotación {{type}}] -password_label=Introduzca a clau ta ubrir iste fichero PDF. -password_invalid=Clau invalida. Torna a intentar-lo. -password_ok=Acceptar -password_cancel=Cancelar - -printing_not_supported=Pare cuenta: Iste navegador no maneya totalment as impresions. -printing_not_ready=Aviso: Encara no se ha cargau completament o PDF ta imprentar-lo. -web_fonts_disabled=As fuents web son desactivadas: no se puet incrustar fichers PDF. - diff --git a/static/pdf.js/locale/ar/viewer.ftl b/static/pdf.js/locale/ar/viewer.ftl new file mode 100644 index 00000000..97d6da57 --- /dev/null +++ b/static/pdf.js/locale/ar/viewer.ftl @@ -0,0 +1,404 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = انتقل لوضع العرض التقديمي +pdfjs-presentation-mode-button-label = وضع العرض التقديمي +pdfjs-open-file-button = + .title = افتح ملفًا +pdfjs-open-file-button-label = افتح +pdfjs-print-button = + .title = اطبع +pdfjs-print-button-label = اطبع +pdfjs-save-button = + .title = احفظ +pdfjs-save-button-label = احفظ +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = نزّل +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = نزّل +pdfjs-bookmark-button = + .title = الصفحة الحالية (عرض URL من الصفحة الحالية) +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 = التمرير الملتف +pdfjs-spread-none-button = + .title = لا تدمج هوامش الصفحات مع بعضها البعض +pdfjs-spread-none-button-label = بلا هوامش +pdfjs-spread-odd-button = + .title = ادمج هوامش الصفحات الفردية +pdfjs-spread-odd-button-label = هوامش الصفحات الفردية +pdfjs-spread-even-button = + .title = ادمج هوامش الصفحات الزوجية +pdfjs-spread-even-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 = حجم الملف: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } ك.بايت ({ $size_b } بايت) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } م.بايت ({ $size_b } بايت) +pdfjs-document-properties-title = العنوان: +pdfjs-document-properties-author = المؤلف: +pdfjs-document-properties-subject = الموضوع: +pdfjs-document-properties-keywords = الكلمات الأساسية: +pdfjs-document-properties-creation-date = تاريخ الإنشاء: +pdfjs-document-properties-modification-date = تاريخ التعديل: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }، { $time } +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 = طوليّ +pdfjs-document-properties-page-size-orientation-landscape = عرضيّ +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = خطاب +pdfjs-document-properties-page-size-name-legal = قانونيّ + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = ‏{ $width } × ‏{ $height } ‏{ $unit } (‏{ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = ‏{ $width } × ‏{ $height } ‏{ $unit } (‏{ $name }، { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = العرض السريع عبر الوِب: +pdfjs-document-properties-linearized-yes = نعم +pdfjs-document-properties-linearized-no = لا +pdfjs-document-properties-close-button = أغلق + +## Print + +pdfjs-print-progress-message = يُحضّر المستند للطباعة… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }٪ +pdfjs-print-progress-close-button = ألغِ +pdfjs-printing-not-supported = تحذير: لا يدعم هذا المتصفح الطباعة بشكل كامل. +pdfjs-printing-not-ready = تحذير: ملف PDF لم يُحمّل كاملًا للطباعة. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = بدّل ظهور الشريط الجانبي +pdfjs-toggle-sidebar-notification-button = + .title = بدّل ظهور الشريط الجانبي (يحتوي المستند على مخطط أو مرفقات أو طبقات) +pdfjs-toggle-sidebar-button-label = بدّل ظهور الشريط الجانبي +pdfjs-document-outline-button = + .title = اعرض فهرس المستند (نقر مزدوج لتمديد أو تقليص كل العناصر) +pdfjs-document-outline-button-label = مخطط المستند +pdfjs-attachments-button = + .title = اعرض المرفقات +pdfjs-attachments-button-label = المُرفقات +pdfjs-layers-button = + .title = اعرض الطبقات (انقر مرتين لتصفير كل الطبقات إلى الحالة المبدئية) +pdfjs-layers-button-label = ‏‏الطبقات +pdfjs-thumbs-button = + .title = اعرض مُصغرات +pdfjs-thumbs-button-label = مُصغّرات +pdfjs-current-outline-item-button = + .title = ابحث عن عنصر المخطّط التفصيلي الحالي +pdfjs-current-outline-item-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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = مصغّرة صفحة { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = ابحث + .placeholder = ابحث في المستند… +pdfjs-find-previous-button = + .title = ابحث عن التّواجد السّابق للعبارة +pdfjs-find-previous-button-label = السابق +pdfjs-find-next-button = + .title = ابحث عن التّواجد التّالي للعبارة +pdfjs-find-next-button-label = التالي +pdfjs-find-highlight-checkbox = أبرِز الكل +pdfjs-find-match-case-checkbox-label = طابق حالة الأحرف +pdfjs-find-match-diacritics-checkbox-label = طابِق الحركات +pdfjs-find-entire-word-checkbox-label = كلمات كاملة +pdfjs-find-reached-top = تابعت من الأسفل بعدما وصلت إلى بداية المستند +pdfjs-find-reached-bottom = تابعت من الأعلى بعدما وصلت إلى نهاية المستند +# 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 -> + [zero] لا مطابقة + [one] { $current } من أصل { $total } مطابقة + [two] { $current } من أصل { $total } مطابقة + [few] { $current } من أصل { $total } مطابقة + [many] { $current } من أصل { $total } مطابقة + *[other] { $current } من أصل { $total } مطابقة + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [zero] { $limit } مطابقة + [one] أكثر من { $limit } مطابقة + [two] أكثر من { $limit } مطابقة + [few] أكثر من { $limit } مطابقة + [many] أكثر من { $limit } مطابقة + *[other] أكثر من { $limit } مطابقات + } +pdfjs-find-not-found = لا وجود للعبارة + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = حدث عطل أثناء تحميل ملف PDF. +pdfjs-invalid-file-error = ملف PDF تالف أو غير صحيح. +pdfjs-missing-file-error = ملف PDF غير موجود. +pdfjs-unexpected-response-error = استجابة خادوم غير متوقعة. +pdfjs-rendering-error = حدث خطأ أثناء عرض الصفحة. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }، { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [تعليق { $type }] + +## Password + +pdfjs-password-label = أدخل لكلمة السر لفتح هذا الملف. +pdfjs-password-invalid = كلمة سر خطأ. من فضلك أعد المحاولة. +pdfjs-password-ok-button = حسنا +pdfjs-password-cancel-button = ألغِ +pdfjs-web-fonts-disabled = خطوط الوب مُعطّلة: تعذّر استخدام خطوط PDF المُضمّنة. + +## Editing + +pdfjs-editor-free-text-button = + .title = نص +pdfjs-editor-free-text-button-label = نص +pdfjs-editor-ink-button = + .title = ارسم +pdfjs-editor-ink-button-label = ارسم +pdfjs-editor-stamp-button = + .title = أضِف أو حرّر الصور +pdfjs-editor-stamp-button-label = أضِف أو حرّر الصور +pdfjs-editor-highlight-button = + .title = أبرِز +pdfjs-editor-highlight-button-label = أبرِز +pdfjs-highlight-floating-button = + .title = أبرِز +pdfjs-highlight-floating-button1 = + .title = أبرِز + .aria-label = أبرِز +pdfjs-highlight-floating-button-label = أبرِز + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = أزِل الرسم +pdfjs-editor-remove-freetext-button = + .title = أزِل النص +pdfjs-editor-remove-stamp-button = + .title = أزِل الصورة +pdfjs-editor-remove-highlight-button = + .title = أزِل الإبراز + +## + +# 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 = العتامة +pdfjs-editor-stamp-add-image-button = + .title = أضِف صورة +pdfjs-editor-stamp-add-image-button-label = أضِف صورة +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = السماكة +pdfjs-editor-free-highlight-thickness-title = + .title = غيّر السُمك عند إبراز عناصر أُخرى غير النص +pdfjs-free-text = + .aria-label = محرِّر النص +pdfjs-free-text-default-content = ابدأ الكتابة… +pdfjs-ink = + .aria-label = محرِّر الرسم +pdfjs-ink-canvas = + .aria-label = صورة أنشأها المستخدم + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = نص بديل +pdfjs-editor-alt-text-edit-button-label = تحرير النص البديل +pdfjs-editor-alt-text-dialog-label = اختر خيار +pdfjs-editor-alt-text-dialog-description = يساعد النص البديل عندما لا يتمكن الأشخاص من رؤية الصورة أو عندما لا يتم تحميلها. +pdfjs-editor-alt-text-add-description-label = أضِف وصف +pdfjs-editor-alt-text-add-description-description = استهدف جملتين تصفان الموضوع أو الإعداد أو الإجراءات. +pdfjs-editor-alt-text-mark-decorative-label = علّمها على أنها زخرفية +pdfjs-editor-alt-text-mark-decorative-description = يُستخدم هذا في الصور المزخرفة، مثل الحدود أو العلامات المائية. +pdfjs-editor-alt-text-cancel-button = ألغِ +pdfjs-editor-alt-text-save-button = احفظ +pdfjs-editor-alt-text-decorative-tooltip = عُلّمت على أنها زخرفية +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = على سبيل المثال، "يجلس شاب على الطاولة لتناول وجبة" + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = الزاوية اليُسرى العُليا — غيّر الحجم +pdfjs-editor-resizer-label-top-middle = أعلى الوسط - غيّر الحجم +pdfjs-editor-resizer-label-top-right = الزاوية اليُمنى العُليا - غيّر الحجم +pdfjs-editor-resizer-label-middle-right = اليمين الأوسط - غيّر الحجم +pdfjs-editor-resizer-label-bottom-right = الزاوية اليُمنى السُفلى - غيّر الحجم +pdfjs-editor-resizer-label-bottom-middle = أسفل الوسط - غيّر الحجم +pdfjs-editor-resizer-label-bottom-left = الزاوية اليُسرى السُفلية - غيّر الحجم +pdfjs-editor-resizer-label-middle-left = مُنتصف اليسار - غيّر الحجم + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = أبرِز اللون +pdfjs-editor-colorpicker-button = + .title = غيّر اللون +pdfjs-editor-colorpicker-dropdown = + .aria-label = اختيارات الألوان +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 = أظهِر الكل diff --git a/static/pdf.js/locale/ar/viewer.properties b/static/pdf.js/locale/ar/viewer.properties deleted file mode 100644 index 01c94239..00000000 --- a/static/pdf.js/locale/ar/viewer.properties +++ /dev/null @@ -1,224 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=الصفحة السابقة -previous_label=السابقة -next.title=الصفحة التالية -next_label=التالية - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=صفحة -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=من {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} من {{pagesCount}}) - -zoom_out.title=بعّد -zoom_out_label=بعّد -zoom_in.title=قرّب -zoom_in_label=قرّب -zoom.title=التقريب -presentation_mode.title=انتقل لوضع العرض التقديمي -presentation_mode_label=وضع العرض التقديمي -open_file.title=افتح ملفًا -open_file_label=افتح -print.title=اطبع -print_label=اطبع - -# Secondary toolbar and context menu -tools.title=الأدوات -tools_label=الأدوات -first_page.title=انتقل إلى الصفحة الأولى -first_page_label=انتقل إلى الصفحة الأولى -last_page.title=انتقل إلى الصفحة الأخيرة -last_page_label=انتقل إلى الصفحة الأخيرة -page_rotate_cw.title=أدر باتجاه عقارب الساعة -page_rotate_cw_label=أدر باتجاه عقارب الساعة -page_rotate_ccw.title=أدر بعكس اتجاه عقارب الساعة -page_rotate_ccw_label=أدر بعكس اتجاه عقارب الساعة - -cursor_text_select_tool.title=فعّل أداة اختيار النص -cursor_text_select_tool_label=أداة اختيار النص -cursor_hand_tool.title=فعّل أداة اليد -cursor_hand_tool_label=أداة اليد - -scroll_vertical.title=استخدم التمرير الرأسي -scroll_vertical_label=التمرير الرأسي -scroll_horizontal.title=استخدم التمرير الأفقي -scroll_horizontal_label=التمرير الأفقي -scroll_wrapped.title=استخدم التمرير الملتف -scroll_wrapped_label=التمرير الملتف - -spread_none.title=لا تدمج هوامش الصفحات مع بعضها البعض -spread_none_label=بلا هوامش -spread_odd.title=ادمج هوامش الصفحات الفردية -spread_odd_label=هوامش الصفحات الفردية -spread_even.title=ادمج هوامش الصفحات الزوجية -spread_even_label=هوامش الصفحات الزوجية - -# Document properties dialog box -document_properties.title=خصائص المستند… -document_properties_label=خصائص المستند… -document_properties_file_name=اسم الملف: -document_properties_file_size=حجم الملف: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} ك.بايت ({{size_b}} بايت) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} م.بايت ({{size_b}} بايت) -document_properties_title=العنوان: -document_properties_author=المؤلف: -document_properties_subject=الموضوع: -document_properties_keywords=الكلمات الأساسية: -document_properties_creation_date=تاريخ الإنشاء: -document_properties_modification_date=تاريخ التعديل: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}، {{time}} -document_properties_creator=المنشئ: -document_properties_producer=منتج PDF: -document_properties_version=إصدارة PDF: -document_properties_page_count=عدد الصفحات: -document_properties_page_size=مقاس الورقة: -document_properties_page_size_unit_inches=بوصة -document_properties_page_size_unit_millimeters=ملم -document_properties_page_size_orientation_portrait=طوليّ -document_properties_page_size_orientation_landscape=عرضيّ -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=خطاب -document_properties_page_size_name_legal=قانونيّ -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string=‏{{width}} × ‏{{height}} ‏{{unit}} (‏{{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string=‏{{width}} × ‏{{height}} ‏{{unit}} (‏{{name}}، {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=العرض السريع عبر الوِب: -document_properties_linearized_yes=نعم -document_properties_linearized_no=لا -document_properties_close=أغلق - -print_progress_message=يُحضّر المستند للطباعة… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}٪ -print_progress_close=ألغِ - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=بدّل ظهور الشريط الجانبي -toggle_sidebar_notification2.title=بدّل ظهور الشريط الجانبي (يحتوي المستند على مخطط أو مرفقات أو طبقات) -toggle_sidebar_label=بدّل ظهور الشريط الجانبي -document_outline.title=اعرض فهرس المستند (نقر مزدوج لتمديد أو تقليص كل العناصر) -document_outline_label=مخطط المستند -attachments.title=اعرض المرفقات -attachments_label=المُرفقات -layers.title=اعرض الطبقات (انقر مرتين لتصفير كل الطبقات إلى الحالة المبدئية) -layers_label=‏‏الطبقات -thumbs.title=اعرض مُصغرات -thumbs_label=مُصغّرات -findbar.title=ابحث في المستند -findbar_label=ابحث - -additional_layers=الطبقات الإضافية -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=صفحة {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=صفحة {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=مصغّرة صفحة {{page}} - -# Find panel button title and messages -find_input.title=ابحث -find_input.placeholder=ابحث في المستند… -find_previous.title=ابحث عن التّواجد السّابق للعبارة -find_previous_label=السابق -find_next.title=ابحث عن التّواجد التّالي للعبارة -find_next_label=التالي -find_highlight=أبرِز الكل -find_match_case_label=طابق حالة الأحرف -find_entire_word_label=كلمات كاملة -find_reached_top=تابعت من الأسفل بعدما وصلت إلى بداية المستند -find_reached_bottom=تابعت من الأعلى بعدما وصلت إلى نهاية المستند -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} من أصل مطابقة واحدة -find_match_count[two]={{current}} من أصل مطابقتين -find_match_count[few]={{current}} من أصل {{total}} مطابقات -find_match_count[many]={{current}} من أصل {{total}} مطابقة -find_match_count[other]={{current}} من أصل {{total}} مطابقة -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=فقط -find_match_count_limit[one]=أكثر من مطابقة واحدة -find_match_count_limit[two]=أكثر من مطابقتين -find_match_count_limit[few]=أكثر من {{limit}} مطابقات -find_match_count_limit[many]=أكثر من {{limit}} مطابقة -find_match_count_limit[other]=أكثر من {{limit}} مطابقة -find_not_found=لا وجود للعبارة - -# Predefined zoom values -page_scale_width=عرض الصفحة -page_scale_fit=ملائمة الصفحة -page_scale_auto=تقريب تلقائي -page_scale_actual=الحجم الفعلي -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}٪ - -loading_error=حدث عطل أثناء تحميل ملف PDF. -invalid_file_error=ملف PDF تالف أو غير صحيح. -missing_file_error=ملف PDF غير موجود. -unexpected_response_error=استجابة خادوم غير متوقعة. - -rendering_error=حدث خطأ أثناء عرض الصفحة. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}، {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[تعليق {{type}}] -password_label=أدخل لكلمة السر لفتح هذا الملف. -password_invalid=كلمة سر خطأ. من فضلك أعد المحاولة. -password_ok=حسنا -password_cancel=ألغِ - -printing_not_supported=تحذير: لا يدعم هذا المتصفح الطباعة بشكل كامل. -printing_not_ready=تحذير: ملف PDF لم يُحمّل كاملًا للطباعة. -web_fonts_disabled=خطوط الوب مُعطّلة: تعذّر استخدام خطوط PDF المُضمّنة. - diff --git a/static/pdf.js/locale/ast/viewer.ftl b/static/pdf.js/locale/ast/viewer.ftl new file mode 100644 index 00000000..2503cafc --- /dev/null +++ b/static/pdf.js/locale/ast/viewer.ftl @@ -0,0 +1,201 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Páxina anterior +pdfjs-previous-button-label = Anterior +pdfjs-next-button = + .title = Páxina siguiente +pdfjs-next-button-label = Siguiente +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Páxina +# 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 = de { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount }) +pdfjs-zoom-out-button = + .title = Alloñar +pdfjs-zoom-out-button-label = Alloña +pdfjs-zoom-in-button = + .title = Averar +pdfjs-zoom-in-button-label = Avera +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Cambiar al mou de presentación +pdfjs-presentation-mode-button-label = Mou de presentación +pdfjs-open-file-button-label = Abrir +pdfjs-print-button = + .title = Imprentar +pdfjs-print-button-label = Imprentar + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Ferramientes +pdfjs-tools-button-label = Ferramientes +pdfjs-first-page-button-label = Dir a la primer páxina +pdfjs-last-page-button-label = Dir a la última páxina +pdfjs-page-rotate-cw-button = + .title = Voltia a la derecha +pdfjs-page-rotate-cw-button-label = Voltiar a la derecha +pdfjs-page-rotate-ccw-button = + .title = Voltia a la esquierda +pdfjs-page-rotate-ccw-button-label = Voltiar a la esquierda +pdfjs-cursor-text-select-tool-button = + .title = Activa la ferramienta d'esbilla de testu +pdfjs-cursor-text-select-tool-button-label = Ferramienta d'esbilla de testu +pdfjs-cursor-hand-tool-button = + .title = Activa la ferramienta de mano +pdfjs-cursor-hand-tool-button-label = Ferramienta de mano +pdfjs-scroll-vertical-button = + .title = Usa'l desplazamientu vertical +pdfjs-scroll-vertical-button-label = Desplazamientu vertical +pdfjs-scroll-horizontal-button = + .title = Usa'l desplazamientu horizontal +pdfjs-scroll-horizontal-button-label = Desplazamientu horizontal +pdfjs-scroll-wrapped-button = + .title = Usa'l desplazamientu continuu +pdfjs-scroll-wrapped-button-label = Desplazamientu continuu +pdfjs-spread-none-button-label = Fueyes individuales +pdfjs-spread-odd-button-label = Fueyes pares +pdfjs-spread-even-button-label = Fueyes impares + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Propiedaes del documentu… +pdfjs-document-properties-button-label = Propiedaes del documentu… +pdfjs-document-properties-file-name = Nome del ficheru: +pdfjs-document-properties-file-size = Tamañu del ficheru: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Títulu: +pdfjs-document-properties-keywords = Pallabres clave: +pdfjs-document-properties-creation-date = Data de creación: +pdfjs-document-properties-modification-date = Data de modificación: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-producer = Productor del PDF: +pdfjs-document-properties-version = Versión del PDF: +pdfjs-document-properties-page-count = Númberu de páxines: +pdfjs-document-properties-page-size = Tamañu de páxina: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = vertical +pdfjs-document-properties-page-size-orientation-landscape = horizontal +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 + +## 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 = Vista web rápida: +pdfjs-document-properties-linearized-yes = Sí +pdfjs-document-properties-linearized-no = Non +pdfjs-document-properties-close-button = Zarrar + +## Print + +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Encaboxar + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Alternar la barra llateral +pdfjs-attachments-button = + .title = Amosar los axuntos +pdfjs-attachments-button-label = Axuntos +pdfjs-layers-button-label = Capes +pdfjs-thumbs-button = + .title = Amosar les miniatures +pdfjs-thumbs-button-label = Miniatures +pdfjs-findbar-button-label = Atopar +pdfjs-additional-layers = Capes adicionales + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Páxina { $page } + +## Find panel button title and messages + +pdfjs-find-previous-button-label = Anterior +pdfjs-find-next-button-label = Siguiente +pdfjs-find-entire-word-checkbox-label = Pallabres completes +pdfjs-find-reached-top = Algamóse'l comienzu de la páxina, síguese dende abaxo +pdfjs-find-reached-bottom = Algamóse la fin del documentu, síguese dende arriba + +## Predefined zoom values + +pdfjs-page-scale-auto = Zoom automáticu +pdfjs-page-scale-actual = Tamañu real +# 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 = Páxina { $page } + +## Loading indicator messages + +pdfjs-loading-error = Asocedió un fallu mentanto se cargaba'l PDF. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } + +## Password + +pdfjs-password-ok-button = Aceptar +pdfjs-password-cancel-button = Encaboxar + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/ast/viewer.properties b/static/pdf.js/locale/ast/viewer.properties deleted file mode 100644 index 4274e180..00000000 --- a/static/pdf.js/locale/ast/viewer.properties +++ /dev/null @@ -1,185 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Páxina anterior -previous_label=Anterior -next.title=Páxina siguiente -next_label=Siguiente - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Páxina -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=de {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} de {{pagesCount}}) - -zoom_out.title=Alloñar -zoom_out_label=Alloña -zoom_in.title=Averar -zoom_in_label=Avera -zoom.title=Zoom -presentation_mode.title=Cambiar al mou de presentación -presentation_mode_label=Mou de presentación -open_file_label=Abrir -print.title=Imprentar -print_label=Imprentar - -# Secondary toolbar and context menu -tools.title=Ferramientes -tools_label=Ferramientes -first_page_label=Dir a la primer páxina -last_page_label=Dir a la última páxina -page_rotate_cw.title=Voltia a la derecha -page_rotate_cw_label=Voltiar a la derecha -page_rotate_ccw.title=Voltia a la esquierda -page_rotate_ccw_label=Voltiar a la esquierda - -cursor_text_select_tool.title=Activa la ferramienta d'esbilla de testu -cursor_text_select_tool_label=Ferramienta d'esbilla de testu -cursor_hand_tool.title=Activa la ferramienta de mano -cursor_hand_tool_label=Ferramienta de mano - -scroll_vertical.title=Usa'l desplazamientu vertical -scroll_vertical_label=Desplazamientu vertical -scroll_horizontal.title=Usa'l desplazamientu horizontal -scroll_horizontal_label=Desplazamientu horizontal -scroll_wrapped.title=Usa'l desplazamientu continuu -scroll_wrapped_label=Desplazamientu continuu - -spread_none_label=Fueyes individuales -spread_odd_label=Fueyes pares -spread_even_label=Fueyes impares - -# Document properties dialog box -document_properties.title=Propiedaes del documentu… -document_properties_label=Propiedaes del documentu… -document_properties_file_name=Nome del ficheru: -document_properties_file_size=Tamañu del ficheru: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Títulu: -document_properties_keywords=Pallabres clave: -document_properties_creation_date=Data de creación: -document_properties_modification_date=Data de modificación: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_producer=Productor del PDF: -document_properties_version=Versión del PDF: -document_properties_page_count=Númberu de páxines: -document_properties_page_size=Tamañu de páxina: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=vertical -document_properties_page_size_orientation_landscape=horizontal -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Vista web rápida: -document_properties_linearized_yes=Sí -document_properties_linearized_no=Non -document_properties_close=Zarrar - -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Encaboxar - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Alternar la barra llateral -attachments.title=Amosar los axuntos -attachments_label=Axuntos -layers_label=Capes -thumbs.title=Amosar les miniatures -thumbs_label=Miniatures -findbar_label=Atopar - -additional_layers=Capes adicionales -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Páxina {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Páxina {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. - -# Find panel button title and messages -find_previous_label=Anterior -find_next_label=Siguiente -find_entire_word_label=Pallabres completes -find_reached_top=Algamóse'l comienzu de la páxina, síguese dende abaxo -find_reached_bottom=Algamóse la fin del documentu, síguese dende arriba -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count[one]={{current}} de {{total}} coincidencia -find_match_count[two]={{current}} de {{total}} coincidencies -find_match_count[few]={{current}} de {{total}} coincidencies -find_match_count[many]={{current}} de {{total}} coincidencies -find_match_count[other]={{current}} de {{total}} coincidencies -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit[zero]=Más de {{limit}} coincidencies -find_match_count_limit[one]=Más de {{limit}} coincidencia -find_match_count_limit[two]=Más de {{limit}} coincidencies -find_match_count_limit[few]=Más de {{limit}} coincidencies -find_match_count_limit[many]=Más de {{limit}} coincidencies -find_match_count_limit[other]=Más de {{limit}} coincidencies - -# Predefined zoom values -page_scale_auto=Zoom automáticu -page_scale_actual=Tamañu real -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=Asocedió un fallu mentanto se cargaba'l PDF. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -password_ok=Aceptar -password_cancel=Encaboxar - -# LOCALIZATION NOTE (unsupported_feature_signatures): Should contain the same -# exact string as in the `chrome.properties` file. - diff --git a/static/pdf.js/locale/az/viewer.ftl b/static/pdf.js/locale/az/viewer.ftl new file mode 100644 index 00000000..773aae4d --- /dev/null +++ b/static/pdf.js/locale/az/viewer.ftl @@ -0,0 +1,257 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Əvvəlki səhifə +pdfjs-previous-button-label = Əvvəlkini tap +pdfjs-next-button = + .title = Növbəti səhifə +pdfjs-next-button-label = İrəli +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Səhifə +# 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 = Uzaqlaş +pdfjs-zoom-out-button-label = Uzaqlaş +pdfjs-zoom-in-button = + .title = Yaxınlaş +pdfjs-zoom-in-button-label = Yaxınlaş +pdfjs-zoom-select = + .title = Yaxınlaşdırma +pdfjs-presentation-mode-button = + .title = Təqdimat Rejiminə Keç +pdfjs-presentation-mode-button-label = Təqdimat Rejimi +pdfjs-open-file-button = + .title = Fayl Aç +pdfjs-open-file-button-label = Aç +pdfjs-print-button = + .title = Yazdır +pdfjs-print-button-label = Yazdır + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Alətlər +pdfjs-tools-button-label = Alətlər +pdfjs-first-page-button = + .title = İlk Səhifəyə get +pdfjs-first-page-button-label = İlk Səhifəyə get +pdfjs-last-page-button = + .title = Son Səhifəyə get +pdfjs-last-page-button-label = Son Səhifəyə get +pdfjs-page-rotate-cw-button = + .title = Saat İstiqamətində Fırlat +pdfjs-page-rotate-cw-button-label = Saat İstiqamətində Fırlat +pdfjs-page-rotate-ccw-button = + .title = Saat İstiqamətinin Əksinə Fırlat +pdfjs-page-rotate-ccw-button-label = Saat İstiqamətinin Əksinə Fırlat +pdfjs-cursor-text-select-tool-button = + .title = Yazı seçmə alətini aktivləşdir +pdfjs-cursor-text-select-tool-button-label = Yazı seçmə aləti +pdfjs-cursor-hand-tool-button = + .title = Əl alətini aktivləşdir +pdfjs-cursor-hand-tool-button-label = Əl aləti +pdfjs-scroll-vertical-button = + .title = Şaquli sürüşdürmə işlət +pdfjs-scroll-vertical-button-label = Şaquli sürüşdürmə +pdfjs-scroll-horizontal-button = + .title = Üfüqi sürüşdürmə işlət +pdfjs-scroll-horizontal-button-label = Üfüqi sürüşdürmə +pdfjs-scroll-wrapped-button = + .title = Bükülü sürüşdürmə işlət +pdfjs-scroll-wrapped-button-label = Bükülü sürüşdürmə +pdfjs-spread-none-button = + .title = Yan-yana birləşdirilmiş səhifələri işlətmə +pdfjs-spread-none-button-label = Birləşdirmə +pdfjs-spread-odd-button = + .title = Yan-yana birləşdirilmiş səhifələri tək nömrəli səhifələrdən başlat +pdfjs-spread-odd-button-label = Tək nömrəli +pdfjs-spread-even-button = + .title = Yan-yana birləşdirilmiş səhifələri cüt nömrəli səhifələrdən başlat +pdfjs-spread-even-button-label = Cüt nömrəli + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Sənəd xüsusiyyətləri… +pdfjs-document-properties-button-label = Sənəd xüsusiyyətləri… +pdfjs-document-properties-file-name = Fayl adı: +pdfjs-document-properties-file-size = Fayl ölçüsü: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bayt) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bayt) +pdfjs-document-properties-title = Başlık: +pdfjs-document-properties-author = Müəllif: +pdfjs-document-properties-subject = Mövzu: +pdfjs-document-properties-keywords = Açar sözlər: +pdfjs-document-properties-creation-date = Yaradılış Tarixi : +pdfjs-document-properties-modification-date = Dəyişdirilmə Tarixi : +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Yaradan: +pdfjs-document-properties-producer = PDF yaradıcısı: +pdfjs-document-properties-version = PDF versiyası: +pdfjs-document-properties-page-count = Səhifə sayı: +pdfjs-document-properties-page-size = Səhifə Ölçüsü: +pdfjs-document-properties-page-size-unit-inches = inç +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = portret +pdfjs-document-properties-page-size-orientation-landscape = albom +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 = Məktub +pdfjs-document-properties-page-size-name-legal = Hüquqi + +## 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 = Fast Web View: +pdfjs-document-properties-linearized-yes = Bəli +pdfjs-document-properties-linearized-no = Xeyr +pdfjs-document-properties-close-button = Qapat + +## Print + +pdfjs-print-progress-message = Sənəd çap üçün hazırlanır… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Ləğv et +pdfjs-printing-not-supported = Xəbərdarlıq: Çap bu səyyah tərəfindən tam olaraq dəstəklənmir. +pdfjs-printing-not-ready = Xəbərdarlıq: PDF çap üçün tam yüklənməyib. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Yan Paneli Aç/Bağla +pdfjs-toggle-sidebar-notification-button = + .title = Yan paneli çevir (sənəddə icmal/bağlamalar/laylar mövcuddur) +pdfjs-toggle-sidebar-button-label = Yan Paneli Aç/Bağla +pdfjs-document-outline-button = + .title = Sənədin eskizini göstər (bütün bəndləri açmaq/yığmaq üçün iki dəfə klikləyin) +pdfjs-document-outline-button-label = Sənəd strukturu +pdfjs-attachments-button = + .title = Bağlamaları göstər +pdfjs-attachments-button-label = Bağlamalar +pdfjs-layers-button = + .title = Layları göstər (bütün layları ilkin halına sıfırlamaq üçün iki dəfə klikləyin) +pdfjs-layers-button-label = Laylar +pdfjs-thumbs-button = + .title = Kiçik şəkilləri göstər +pdfjs-thumbs-button-label = Kiçik şəkillər +pdfjs-findbar-button = + .title = Sənəddə Tap +pdfjs-findbar-button-label = Tap +pdfjs-additional-layers = Əlavə laylar + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Səhifə{ $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = { $page } səhifəsinin kiçik vəziyyəti + +## Find panel button title and messages + +pdfjs-find-input = + .title = Tap + .placeholder = Sənəddə tap… +pdfjs-find-previous-button = + .title = Bir öncəki uyğun gələn sözü tapır +pdfjs-find-previous-button-label = Geri +pdfjs-find-next-button = + .title = Bir sonrakı uyğun gələn sözü tapır +pdfjs-find-next-button-label = İrəli +pdfjs-find-highlight-checkbox = İşarələ +pdfjs-find-match-case-checkbox-label = Böyük/kiçik hərfə həssaslıq +pdfjs-find-entire-word-checkbox-label = Tam sözlər +pdfjs-find-reached-top = Sənədin yuxarısına çatdı, aşağıdan davam edir +pdfjs-find-reached-bottom = Sənədin sonuna çatdı, yuxarıdan davam edir +pdfjs-find-not-found = Uyğunlaşma tapılmadı + +## Predefined zoom values + +pdfjs-page-scale-width = Səhifə genişliyi +pdfjs-page-scale-fit = Səhifəni sığdır +pdfjs-page-scale-auto = Avtomatik yaxınlaşdır +pdfjs-page-scale-actual = Hazırkı Həcm +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = PDF yüklenərkən bir səhv yarandı. +pdfjs-invalid-file-error = Səhv və ya zədələnmiş olmuş PDF fayl. +pdfjs-missing-file-error = PDF fayl yoxdur. +pdfjs-unexpected-response-error = Gözlənilməz server cavabı. +pdfjs-rendering-error = Səhifə göstərilərkən səhv yarandı. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Annotasiyası] + +## Password + +pdfjs-password-label = Bu PDF faylı açmaq üçün parolu daxil edin. +pdfjs-password-invalid = Parol səhvdir. Bir daha yoxlayın. +pdfjs-password-ok-button = Tamam +pdfjs-password-cancel-button = Ləğv et +pdfjs-web-fonts-disabled = Web Şriftlər söndürülüb: yerləşdirilmiş PDF şriftlərini istifadə etmək mümkün deyil. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/az/viewer.properties b/static/pdf.js/locale/az/viewer.properties deleted file mode 100644 index ee114846..00000000 --- a/static/pdf.js/locale/az/viewer.properties +++ /dev/null @@ -1,222 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Əvvəlki səhifə -previous_label=Əvvəlkini tap -next.title=Növbəti səhifə -next_label=İrəli - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Səhifə -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=/ {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} / {{pagesCount}}) - -zoom_out.title=Uzaqlaş -zoom_out_label=Uzaqlaş -zoom_in.title=Yaxınlaş -zoom_in_label=Yaxınlaş -zoom.title=Yaxınlaşdırma -presentation_mode.title=Təqdimat Rejiminə Keç -presentation_mode_label=Təqdimat Rejimi -open_file.title=Fayl Aç -open_file_label=Aç -print.title=Yazdır -print_label=Yazdır - -# Secondary toolbar and context menu -tools.title=Alətlər -tools_label=Alətlər -first_page.title=İlk Səhifəyə get -first_page_label=İlk Səhifəyə get -last_page.title=Son Səhifəyə get -last_page_label=Son Səhifəyə get -page_rotate_cw.title=Saat İstiqamətində Fırlat -page_rotate_cw_label=Saat İstiqamətində Fırlat -page_rotate_ccw.title=Saat İstiqamətinin Əksinə Fırlat -page_rotate_ccw_label=Saat İstiqamətinin Əksinə Fırlat - -cursor_text_select_tool.title=Yazı seçmə alətini aktivləşdir -cursor_text_select_tool_label=Yazı seçmə aləti -cursor_hand_tool.title=Əl alətini aktivləşdir -cursor_hand_tool_label=Əl aləti - -scroll_vertical.title=Şaquli sürüşdürmə işlət -scroll_vertical_label=Şaquli sürüşdürmə -scroll_horizontal.title=Üfüqi sürüşdürmə işlət -scroll_horizontal_label=Üfüqi sürüşdürmə -scroll_wrapped.title=Bükülü sürüşdürmə işlət -scroll_wrapped_label=Bükülü sürüşdürmə - -spread_none.title=Yan-yana birləşdirilmiş səhifələri işlətmə -spread_none_label=Birləşdirmə -spread_odd.title=Yan-yana birləşdirilmiş səhifələri tək nömrəli səhifələrdən başlat -spread_odd_label=Tək nömrəli -spread_even.title=Yan-yana birləşdirilmiş səhifələri cüt nömrəli səhifələrdən başlat -spread_even_label=Cüt nömrəli - -# Document properties dialog box -document_properties.title=Sənəd xüsusiyyətləri… -document_properties_label=Sənəd xüsusiyyətləri… -document_properties_file_name=Fayl adı: -document_properties_file_size=Fayl ölçüsü: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bayt) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bayt) -document_properties_title=Başlık: -document_properties_author=Müəllif: -document_properties_subject=Mövzu: -document_properties_keywords=Açar sözlər: -document_properties_creation_date=Yaradılış Tarixi : -document_properties_modification_date=Dəyişdirilmə Tarixi : -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Yaradan: -document_properties_producer=PDF yaradıcısı: -document_properties_version=PDF versiyası: -document_properties_page_count=Səhifə sayı: -document_properties_page_size=Səhifə Ölçüsü: -document_properties_page_size_unit_inches=inç -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=portret -document_properties_page_size_orientation_landscape=albom -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Məktub -document_properties_page_size_name_legal=Hüquqi -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Fast Web View: -document_properties_linearized_yes=Bəli -document_properties_linearized_no=Xeyr -document_properties_close=Qapat - -print_progress_message=Sənəd çap üçün hazırlanır… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Ləğv et - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Yan Paneli Aç/Bağla -toggle_sidebar_notification2.title=Yan paneli çevir (sənəddə icmal/bağlamalar/laylar mövcuddur) -toggle_sidebar_label=Yan Paneli Aç/Bağla -document_outline.title=Sənədin eskizini göstər (bütün bəndləri açmaq/yığmaq üçün iki dəfə klikləyin) -document_outline_label=Sənəd strukturu -attachments.title=Bağlamaları göstər -attachments_label=Bağlamalar -layers.title=Layları göstər (bütün layları ilkin halına sıfırlamaq üçün iki dəfə klikləyin) -layers_label=Laylar -thumbs.title=Kiçik şəkilləri göstər -thumbs_label=Kiçik şəkillər -findbar.title=Sənəddə Tap -findbar_label=Tap - -additional_layers=Əlavə laylar -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Səhifə{{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas={{page}} səhifəsinin kiçik vəziyyəti - -# Find panel button title and messages -find_input.title=Tap -find_input.placeholder=Sənəddə tap… -find_previous.title=Bir öncəki uyğun gələn sözü tapır -find_previous_label=Geri -find_next.title=Bir sonrakı uyğun gələn sözü tapır -find_next_label=İrəli -find_highlight=İşarələ -find_match_case_label=Böyük/kiçik hərfə həssaslıq -find_entire_word_label=Tam sözlər -find_reached_top=Sənədin yuxarısına çatdı, aşağıdan davam edir -find_reached_bottom=Sənədin sonuna çatdı, yuxarıdan davam edir -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} / {{total}} uyğunluq -find_match_count[two]={{current}} / {{total}} uyğunluq -find_match_count[few]={{current}} / {{total}} uyğunluq -find_match_count[many]={{current}} / {{total}} uyğunluq -find_match_count[other]={{current}} / {{total}} uyğunluq -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]={{limit}}-dan çox uyğunluq -find_match_count_limit[one]={{limit}}-dən çox uyğunluq -find_match_count_limit[two]={{limit}}-dən çox uyğunluq -find_match_count_limit[few]={{limit}} uyğunluqdan daha çox -find_match_count_limit[many]={{limit}} uyğunluqdan daha çox -find_match_count_limit[other]={{limit}} uyğunluqdan daha çox -find_not_found=Uyğunlaşma tapılmadı - -# Predefined zoom values -page_scale_width=Səhifə genişliyi -page_scale_fit=Səhifəni sığdır -page_scale_auto=Avtomatik yaxınlaşdır -page_scale_actual=Hazırkı Həcm -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=PDF yüklenərkən bir səhv yarandı. -invalid_file_error=Səhv və ya zədələnmiş olmuş PDF fayl. -missing_file_error=PDF fayl yoxdur. -unexpected_response_error=Gözlənilməz server cavabı. - -rendering_error=Səhifə göstərilərkən səhv yarandı. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Annotasiyası] -password_label=Bu PDF faylı açmaq üçün parolu daxil edin. -password_invalid=Parol səhvdir. Bir daha yoxlayın. -password_ok=Tamam -password_cancel=Ləğv et - -printing_not_supported=Xəbərdarlıq: Çap bu səyyah tərəfindən tam olaraq dəstəklənmir. -printing_not_ready=Xəbərdarlıq: PDF çap üçün tam yüklənməyib. -web_fonts_disabled=Web Şriftlər söndürülüb: yerləşdirilmiş PDF şriftlərini istifadə etmək mümkün deyil. - diff --git a/static/pdf.js/locale/be/viewer.ftl b/static/pdf.js/locale/be/viewer.ftl new file mode 100644 index 00000000..ee1f4301 --- /dev/null +++ b/static/pdf.js/locale/be/viewer.ftl @@ -0,0 +1,404 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = Пераключыцца ў рэжым паказу +pdfjs-presentation-mode-button-label = Рэжым паказу +pdfjs-open-file-button = + .title = Адкрыць файл +pdfjs-open-file-button-label = Адкрыць +pdfjs-print-button = + .title = Друкаваць +pdfjs-print-button-label = Друкаваць +pdfjs-save-button = + .title = Захаваць +pdfjs-save-button-label = Захаваць +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Сцягнуць +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = Сцягнуць +pdfjs-bookmark-button = + .title = Дзейная старонка (паглядзець URL-адрас з дзейнай старонкі) +pdfjs-bookmark-button-label = Цяперашняя старонка +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Адкрыць у праграме +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-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 = Выкарыстоўваць пракрутку старонкi +pdfjs-scroll-page-button-label = Пракрутка старонкi +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 = Маштабавальная пракрутка +pdfjs-spread-none-button = + .title = Не выкарыстоўваць разгорнутыя старонкі +pdfjs-spread-none-button-label = Без разгорнутых старонак +pdfjs-spread-odd-button = + .title = Разгорнутыя старонкі пачынаючы з няцотных нумароў +pdfjs-spread-odd-button-label = Няцотныя старонкі злева +pdfjs-spread-even-button = + .title = Разгорнутыя старонкі пачынаючы з цотных нумароў +pdfjs-spread-even-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 = Памер файла: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } байт) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } МБ ({ $size_b } байт) +pdfjs-document-properties-title = Загаловак: +pdfjs-document-properties-author = Аўтар: +pdfjs-document-properties-subject = Тэма: +pdfjs-document-properties-keywords = Ключавыя словы: +pdfjs-document-properties-creation-date = Дата стварэння: +pdfjs-document-properties-modification-date = Дата змянення: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = кніжная +pdfjs-document-properties-page-size-orientation-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 = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = Хуткі прагляд у Інтэрнэце: +pdfjs-document-properties-linearized-yes = Так +pdfjs-document-properties-linearized-no = Не +pdfjs-document-properties-close-button = Закрыць + +## Print + +pdfjs-print-progress-message = Падрыхтоўка дакумента да друку… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Скасаваць +pdfjs-printing-not-supported = Папярэджанне: друк не падтрымліваецца цалкам гэтым браўзерам. +pdfjs-printing-not-ready = Увага: PDF не сцягнуты цалкам для друкавання. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Паказаць/схаваць бакавую панэль +pdfjs-toggle-sidebar-notification-button = + .title = Паказаць/схаваць бакавую панэль (дакумент мае змест/укладанні/пласты) +pdfjs-toggle-sidebar-button-label = Паказаць/схаваць бакавую панэль +pdfjs-document-outline-button = + .title = Паказаць структуру дакумента (двайная пстрычка, каб разгарнуць /згарнуць усе элементы) +pdfjs-document-outline-button-label = Структура дакумента +pdfjs-attachments-button = + .title = Паказаць далучэнні +pdfjs-attachments-button-label = Далучэнні +pdfjs-layers-button = + .title = Паказаць пласты (націсніце двойчы, каб скінуць усе пласты да прадвызначанага стану) +pdfjs-layers-button-label = Пласты +pdfjs-thumbs-button = + .title = Паказ мініяцюр +pdfjs-thumbs-button-label = Мініяцюры +pdfjs-current-outline-item-button = + .title = Знайсці бягучы элемент структуры +pdfjs-current-outline-item-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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Мініяцюра старонкі { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Шукаць + .placeholder = Шукаць у дакуменце… +pdfjs-find-previous-button = + .title = Знайсці папярэдні выпадак выразу +pdfjs-find-previous-button-label = Папярэдні +pdfjs-find-next-button = + .title = Знайсці наступны выпадак выразу +pdfjs-find-next-button-label = Наступны +pdfjs-find-highlight-checkbox = Падфарбаваць усе +pdfjs-find-match-case-checkbox-label = Адрозніваць вялікія/малыя літары +pdfjs-find-match-diacritics-checkbox-label = З улікам дыякрытык +pdfjs-find-entire-word-checkbox-label = Словы цалкам +pdfjs-find-reached-top = Дасягнуты пачатак дакумента, працяг з канца +pdfjs-find-reached-bottom = Дасягнуты канец дакумента, працяг з пачатку +# 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 } з { $total } супадзенняў + [few] { $current } з { $total } супадзенняў + *[many] { $current } з { $total } супадзенняў + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Больш за { $limit } супадзенне + [few] Больш за { $limit } супадзенні + *[many] Больш за { $limit } супадзенняў + } +pdfjs-find-not-found = Выраз не знойдзены + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = Здарылася памылка ў часе загрузкі PDF. +pdfjs-invalid-file-error = Няспраўны або пашкоджаны файл PDF. +pdfjs-missing-file-error = Адсутны файл PDF. +pdfjs-unexpected-response-error = Нечаканы адказ сервера. +pdfjs-rendering-error = Здарылася памылка падчас адлюстравання старонкі. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Annotation] + +## Password + +pdfjs-password-label = Увядзіце пароль, каб адкрыць гэты файл PDF. +pdfjs-password-invalid = Нядзейсны пароль. Паспрабуйце зноў. +pdfjs-password-ok-button = Добра +pdfjs-password-cancel-button = Скасаваць +pdfjs-web-fonts-disabled = Шрыфты Сеціва забаронены: немагчыма ўжываць укладзеныя шрыфты PDF. + +## Editing + +pdfjs-editor-free-text-button = + .title = Тэкст +pdfjs-editor-free-text-button-label = Тэкст +pdfjs-editor-ink-button = + .title = Маляваць +pdfjs-editor-ink-button-label = Маляваць +pdfjs-editor-stamp-button = + .title = Дадаць або змяніць выявы +pdfjs-editor-stamp-button-label = Дадаць або змяніць выявы +pdfjs-editor-highlight-button = + .title = Вылучэнне +pdfjs-editor-highlight-button-label = Вылучэнне +pdfjs-highlight-floating-button = + .title = Вылучэнне +pdfjs-highlight-floating-button1 = + .title = Падфарбаваць + .aria-label = Падфарбаваць +pdfjs-highlight-floating-button-label = Падфарбаваць + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Выдаліць малюнак +pdfjs-editor-remove-freetext-button = + .title = Выдаліць тэкст +pdfjs-editor-remove-stamp-button = + .title = Выдаліць выяву +pdfjs-editor-remove-highlight-button = + .title = Выдаліць падфарбоўку + +## + +# 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 = Непразрыстасць +pdfjs-editor-stamp-add-image-button = + .title = Дадаць выяву +pdfjs-editor-stamp-add-image-button-label = Дадаць выяву +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Таўшчыня +pdfjs-editor-free-highlight-thickness-title = + .title = Змяняць таўшчыню пры вылучэнні іншых элементаў, акрамя тэксту +pdfjs-free-text = + .aria-label = Тэкставы рэдактар +pdfjs-free-text-default-content = Пачніце набор тэксту… +pdfjs-ink = + .aria-label = Графічны рэдактар +pdfjs-ink-canvas = + .aria-label = Выява, створаная карыстальнікам + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Альтэрнатыўны тэкст +pdfjs-editor-alt-text-edit-button-label = Змяніць альтэрнатыўны тэкст +pdfjs-editor-alt-text-dialog-label = Выберыце варыянт +pdfjs-editor-alt-text-dialog-description = Альтэрнатыўны тэкст дапамагае, калі людзі не бачаць выяву або калі яна не загружаецца. +pdfjs-editor-alt-text-add-description-label = Дадаць апісанне +pdfjs-editor-alt-text-add-description-description = Старайцеся скласці 1-2 сказы, якія апісваюць прадмет, абстаноўку або дзеянні. +pdfjs-editor-alt-text-mark-decorative-label = Пазначыць як дэкаратыўны +pdfjs-editor-alt-text-mark-decorative-description = Выкарыстоўваецца для дэкаратыўных выяваў, такіх як рамкі або вадзяныя знакі. +pdfjs-editor-alt-text-cancel-button = Скасаваць +pdfjs-editor-alt-text-save-button = Захаваць +pdfjs-editor-alt-text-decorative-tooltip = Пазначаны як дэкаратыўны +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Напрыклад, «Малады чалавек садзіцца за стол есці» + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Верхні левы кут — змяніць памер +pdfjs-editor-resizer-label-top-middle = Уверсе пасярэдзіне — змяніць памер +pdfjs-editor-resizer-label-top-right = Верхні правы кут — змяніць памер +pdfjs-editor-resizer-label-middle-right = Пасярэдзіне справа — змяніць памер +pdfjs-editor-resizer-label-bottom-right = Правы ніжні кут — змяніць памер +pdfjs-editor-resizer-label-bottom-middle = Пасярэдзіне ўнізе — змяніць памер +pdfjs-editor-resizer-label-bottom-left = Левы ніжні кут — змяніць памер +pdfjs-editor-resizer-label-middle-left = Пасярэдзіне злева — змяніць памер + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Колер падфарбоўкі +pdfjs-editor-colorpicker-button = + .title = Змяніць колер +pdfjs-editor-colorpicker-dropdown = + .aria-label = Выбар колеру +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 = Паказаць усе diff --git a/static/pdf.js/locale/be/viewer.properties b/static/pdf.js/locale/be/viewer.properties deleted file mode 100644 index 7981034b..00000000 --- a/static/pdf.js/locale/be/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Папярэдняя старонка -previous_label=Папярэдняя -next.title=Наступная старонка -next_label=Наступная - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Старонка -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=з {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} з {{pagesCount}}) - -zoom_out.title=Паменшыць -zoom_out_label=Паменшыць -zoom_in.title=Павялічыць -zoom_in_label=Павялічыць -zoom.title=Павялічэнне тэксту -presentation_mode.title=Пераключыцца ў рэжым паказу -presentation_mode_label=Рэжым паказу -open_file.title=Адкрыць файл -open_file_label=Адкрыць -print.title=Друкаваць -print_label=Друкаваць -save.title=Захаваць -save_label=Захаваць -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Сцягнуць -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Сцягнуць -bookmark1.title=Дзейная старонка (паглядзець URL-адрас з дзейнай старонкі) -bookmark1_label=Цяперашняя старонка -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Адкрыць у праграме -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Адкрыць у праграме - -# Secondary toolbar and context menu -tools.title=Прылады -tools_label=Прылады -first_page.title=Перайсці на першую старонку -first_page_label=Перайсці на першую старонку -last_page.title=Перайсці на апошнюю старонку -last_page_label=Перайсці на апошнюю старонку -page_rotate_cw.title=Павярнуць па сонцу -page_rotate_cw_label=Павярнуць па сонцу -page_rotate_ccw.title=Павярнуць супраць сонца -page_rotate_ccw_label=Павярнуць супраць сонца - -cursor_text_select_tool.title=Уключыць прыладу выбару тэксту -cursor_text_select_tool_label=Прылада выбару тэксту -cursor_hand_tool.title=Уключыць ручную прыладу -cursor_hand_tool_label=Ручная прылада - -scroll_page.title=Выкарыстоўваць пракрутку старонкi -scroll_page_label=Пракрутка старонкi -scroll_vertical.title=Ужываць вертыкальную пракрутку -scroll_vertical_label=Вертыкальная пракрутка -scroll_horizontal.title=Ужываць гарызантальную пракрутку -scroll_horizontal_label=Гарызантальная пракрутка -scroll_wrapped.title=Ужываць маштабавальную пракрутку -scroll_wrapped_label=Маштабавальная пракрутка - -spread_none.title=Не выкарыстоўваць разгорнутыя старонкі -spread_none_label=Без разгорнутых старонак -spread_odd.title=Разгорнутыя старонкі пачынаючы з няцотных нумароў -spread_odd_label=Няцотныя старонкі злева -spread_even.title=Разгорнутыя старонкі пачынаючы з цотных нумароў -spread_even_label=Цотныя старонкі злева - -# Document properties dialog box -document_properties.title=Уласцівасці дакумента… -document_properties_label=Уласцівасці дакумента… -document_properties_file_name=Назва файла: -document_properties_file_size=Памер файла: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} КБ ({{size_b}} байт) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} МБ ({{size_b}} байт) -document_properties_title=Загаловак: -document_properties_author=Аўтар: -document_properties_subject=Тэма: -document_properties_keywords=Ключавыя словы: -document_properties_creation_date=Дата стварэння: -document_properties_modification_date=Дата змянення: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Стваральнік: -document_properties_producer=Вырабнік PDF: -document_properties_version=Версія PDF: -document_properties_page_count=Колькасць старонак: -document_properties_page_size=Памер старонкі: -document_properties_page_size_unit_inches=цаляў -document_properties_page_size_unit_millimeters=мм -document_properties_page_size_orientation_portrait=кніжная -document_properties_page_size_orientation_landscape=альбомная -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Хуткі прагляд у Інтэрнэце: -document_properties_linearized_yes=Так -document_properties_linearized_no=Не -document_properties_close=Закрыць - -print_progress_message=Падрыхтоўка дакумента да друку… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Скасаваць - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Паказаць/схаваць бакавую панэль -toggle_sidebar_notification2.title=Паказаць/схаваць бакавую панэль (дакумент мае змест/укладанні/пласты) -toggle_sidebar_label=Паказаць/схаваць бакавую панэль -document_outline.title=Паказаць структуру дакумента (двайная пстрычка, каб разгарнуць /згарнуць усе элементы) -document_outline_label=Структура дакумента -attachments.title=Паказаць далучэнні -attachments_label=Далучэнні -layers.title=Паказаць пласты (націсніце двойчы, каб скінуць усе пласты да прадвызначанага стану) -layers_label=Пласты -thumbs.title=Паказ мініяцюр -thumbs_label=Мініяцюры -current_outline_item.title=Знайсці бягучы элемент структуры -current_outline_item_label=Бягучы элемент структуры -findbar.title=Пошук у дакуменце -findbar_label=Знайсці - -additional_layers=Дадатковыя пласты -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Старонка {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Старонка {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Мініяцюра старонкі {{page}} - -# Find panel button title and messages -find_input.title=Шукаць -find_input.placeholder=Шукаць у дакуменце… -find_previous.title=Знайсці папярэдні выпадак выразу -find_previous_label=Папярэдні -find_next.title=Знайсці наступны выпадак выразу -find_next_label=Наступны -find_highlight=Падфарбаваць усе -find_match_case_label=Адрозніваць вялікія/малыя літары -find_match_diacritics_label=З улікам дыякрытык -find_entire_word_label=Словы цалкам -find_reached_top=Дасягнуты пачатак дакумента, працяг з канца -find_reached_bottom=Дасягнуты канец дакумента, працяг з пачатку -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} з {{total}} супадзення -find_match_count[two]={{current}} з {{total}} супадзенняў -find_match_count[few]={{current}} з {{total}} супадзенняў -find_match_count[many]={{current}} з {{total}} супадзенняў -find_match_count[other]={{current}} з {{total}} супадзенняў -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Больш за {{limit}} супадзенняў -find_match_count_limit[one]=Больш за {{limit}} супадзенне -find_match_count_limit[two]=Больш за {{limit}} супадзенняў -find_match_count_limit[few]=Больш за {{limit}} супадзенняў -find_match_count_limit[many]=Больш за {{limit}} супадзенняў -find_match_count_limit[other]=Больш за {{limit}} супадзенняў -find_not_found=Выраз не знойдзены - -# Predefined zoom values -page_scale_width=Шырыня старонкі -page_scale_fit=Уцісненне старонкі -page_scale_auto=Аўтаматычнае павелічэнне -page_scale_actual=Сапраўдны памер -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Здарылася памылка ў часе загрузкі PDF. -invalid_file_error=Няспраўны або пашкоджаны файл PDF. -missing_file_error=Адсутны файл PDF. -unexpected_response_error=Нечаканы адказ сервера. -rendering_error=Здарылася памылка падчас адлюстравання старонкі. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Annotation] -password_label=Увядзіце пароль, каб адкрыць гэты файл PDF. -password_invalid=Нядзейсны пароль. Паспрабуйце зноў. -password_ok=Добра -password_cancel=Скасаваць - -printing_not_supported=Папярэджанне: друк не падтрымліваецца цалкам гэтым браўзерам. -printing_not_ready=Увага: PDF не сцягнуты цалкам для друкавання. -web_fonts_disabled=Шрыфты Сеціва забаронены: немагчыма ўжываць укладзеныя шрыфты PDF. - -# Editor -editor_free_text2.title=Тэкст -editor_free_text2_label=Тэкст -editor_ink2.title=Маляваць -editor_ink2_label=Маляваць - -editor_stamp.title=Дадаць выяву -editor_stamp_label=Дадаць выяву - -editor_stamp1.title=Дадаць або змяніць выявы -editor_stamp1_label=Дадаць або змяніць выявы - -free_text2_default_content=Пачніце набор тэксту… - -# Editor Parameters -editor_free_text_color=Колер -editor_free_text_size=Памер -editor_ink_color=Колер -editor_ink_thickness=Таўшчыня -editor_ink_opacity=Непразрыстасць - -editor_stamp_add_image_label=Дадаць выяву -editor_stamp_add_image.title=Дадаць выяву - -# Editor aria -editor_free_text2_aria_label=Тэкставы рэдактар -editor_ink2_aria_label=Графічны рэдактар -editor_ink_canvas_aria_label=Выява, створаная карыстальнікам diff --git a/static/pdf.js/locale/bg/viewer.ftl b/static/pdf.js/locale/bg/viewer.ftl new file mode 100644 index 00000000..7522054c --- /dev/null +++ b/static/pdf.js/locale/bg/viewer.ftl @@ -0,0 +1,384 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = Превключване към режим на представяне +pdfjs-presentation-mode-button-label = Режим на представяне +pdfjs-open-file-button = + .title = Отваряне на файл +pdfjs-open-file-button-label = Отваряне +pdfjs-print-button = + .title = Отпечатване +pdfjs-print-button-label = Отпечатване +pdfjs-save-button = + .title = Запазване +pdfjs-save-button-label = Запазване +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Изтегляне +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = Изтегляне +pdfjs-bookmark-button = + .title = Текуща страница (преглед на адреса на страницата) +pdfjs-bookmark-button-label = Текуща страница +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Отваряне в приложение +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-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 = Мащабируемо плъзгане +pdfjs-spread-none-button = + .title = Режимът на сдвояване е изключен +pdfjs-spread-none-button-label = Без сдвояване +pdfjs-spread-odd-button = + .title = Сдвояване, започвайки от нечетните страници +pdfjs-spread-odd-button-label = Нечетните отляво +pdfjs-spread-even-button = + .title = Сдвояване, започвайки от четните страници +pdfjs-spread-even-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 = Големина на файл: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } байта) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } МБ ({ $size_b } байта) +pdfjs-document-properties-title = Заглавие: +pdfjs-document-properties-author = Автор: +pdfjs-document-properties-subject = Тема: +pdfjs-document-properties-keywords = Ключови думи: +pdfjs-document-properties-creation-date = Дата на създаване: +pdfjs-document-properties-modification-date = Дата на промяна: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = портрет +pdfjs-document-properties-page-size-orientation-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 = Letter +pdfjs-document-properties-page-size-name-legal = Правни въпроси + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = Бърз преглед: +pdfjs-document-properties-linearized-yes = Да +pdfjs-document-properties-linearized-no = Не +pdfjs-document-properties-close-button = Затваряне + +## Print + +pdfjs-print-progress-message = Подготвяне на документа за отпечатване… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Отказ +pdfjs-printing-not-supported = Внимание: Този четец няма пълна поддръжка на отпечатване. +pdfjs-printing-not-ready = Внимание: Този PDF файл не е напълно зареден за печат. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Превключване на страничната лента +pdfjs-toggle-sidebar-notification-button = + .title = Превключване на страничната лента (документът има структура/прикачени файлове/слоеве) +pdfjs-toggle-sidebar-button-label = Превключване на страничната лента +pdfjs-document-outline-button = + .title = Показване на структурата на документа (двукратно щракване за свиване/разгъване на всичко) +pdfjs-document-outline-button-label = Структура на документа +pdfjs-attachments-button = + .title = Показване на притурките +pdfjs-attachments-button-label = Притурки +pdfjs-layers-button = + .title = Показване на слоевете (двукратно щракване за възстановяване на всички слоеве към състоянието по подразбиране) +pdfjs-layers-button-label = Слоеве +pdfjs-thumbs-button = + .title = Показване на миниатюрите +pdfjs-thumbs-button-label = Миниатюри +pdfjs-current-outline-item-button = + .title = Намиране на текущия елемент от структурата +pdfjs-current-outline-item-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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Миниатюра на страница { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Търсене + .placeholder = Търсене в документа… +pdfjs-find-previous-button = + .title = Намиране на предишно съвпадение на фразата +pdfjs-find-previous-button-label = Предишна +pdfjs-find-next-button = + .title = Намиране на следващо съвпадение на фразата +pdfjs-find-next-button-label = Следваща +pdfjs-find-highlight-checkbox = Открояване на всички +pdfjs-find-match-case-checkbox-label = Съвпадение на регистъра +pdfjs-find-match-diacritics-checkbox-label = Без производни букви +pdfjs-find-entire-word-checkbox-label = Цели думи +pdfjs-find-reached-top = Достигнато е началото на документа, продължаване от края +pdfjs-find-reached-bottom = Достигнат е краят на документа, продължаване от началото +# 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 } от { $total } съвпадение + *[other] { $current } от { $total } съвпадения + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Повече от { $limit } съвпадение + *[other] Повече от { $limit } съвпадения + } +pdfjs-find-not-found = Фразата не е намерена + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = Получи се грешка при зареждане на PDF-а. +pdfjs-invalid-file-error = Невалиден или повреден PDF файл. +pdfjs-missing-file-error = Липсващ PDF файл. +pdfjs-unexpected-response-error = Неочакван отговор от сървъра. +pdfjs-rendering-error = Грешка при изчертаване на страницата. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Анотация { $type }] + +## Password + +pdfjs-password-label = Въведете парола за отваряне на този PDF файл. +pdfjs-password-invalid = Невалидна парола. Моля, опитайте отново. +pdfjs-password-ok-button = Добре +pdfjs-password-cancel-button = Отказ +pdfjs-web-fonts-disabled = Уеб-шрифтовете са забранени: разрешаване на използването на вградените PDF шрифтове. + +## Editing + +pdfjs-editor-free-text-button = + .title = Текст +pdfjs-editor-free-text-button-label = Текст +pdfjs-editor-ink-button = + .title = Рисуване +pdfjs-editor-ink-button-label = Рисуване +pdfjs-editor-stamp-button = + .title = Добавяне или променяне на изображения +pdfjs-editor-stamp-button-label = Добавяне или променяне на изображения +pdfjs-editor-remove-button = + .title = Премахване + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Премахване на рисунката +pdfjs-editor-remove-freetext-button = + .title = Премахване на текста +pdfjs-editor-remove-stamp-button = + .title = Пермахване на изображението +pdfjs-editor-remove-highlight-button = + .title = Премахване на открояването + +## + +# 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 = Прозрачност +pdfjs-editor-stamp-add-image-button = + .title = Добавяне на изображение +pdfjs-editor-stamp-add-image-button-label = Добавяне на изображение +pdfjs-free-text = + .aria-label = Текстов редактор +pdfjs-free-text-default-content = Започнете да пишете… +pdfjs-ink = + .aria-label = Промяна на рисунка +pdfjs-ink-canvas = + .aria-label = Изображение, създадено от потребител + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Алтернативен текст +pdfjs-editor-alt-text-edit-button-label = Промяна на алтернативния текст +pdfjs-editor-alt-text-dialog-label = Изберете от възможностите +pdfjs-editor-alt-text-dialog-description = Алтернативният текст помага на потребителите, когато не могат да видят изображението или то не се зарежда. +pdfjs-editor-alt-text-add-description-label = Добавяне на описание +pdfjs-editor-alt-text-add-description-description = Стремете се към 1-2 изречения, описващи предмета, настройката или действията. +pdfjs-editor-alt-text-mark-decorative-label = Отбелязване като декоративно +pdfjs-editor-alt-text-mark-decorative-description = Използва се за орнаменти или декоративни изображения, като контури и водни знаци. +pdfjs-editor-alt-text-cancel-button = Отказ +pdfjs-editor-alt-text-save-button = Запазване +pdfjs-editor-alt-text-decorative-tooltip = Отбелязване като декоративно +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Например, „Млад мъж седи на маса и се храни“ + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Горен ляв ъгъл — преоразмеряване +pdfjs-editor-resizer-label-top-middle = Горе в средата — преоразмеряване +pdfjs-editor-resizer-label-top-right = Горен десен ъгъл — преоразмеряване +pdfjs-editor-resizer-label-middle-right = Дясно в средата — преоразмеряване +pdfjs-editor-resizer-label-bottom-right = Долен десен ъгъл — преоразмеряване +pdfjs-editor-resizer-label-bottom-middle = Долу в средата — преоразмеряване +pdfjs-editor-resizer-label-bottom-left = Долен ляв ъгъл — преоразмеряване +pdfjs-editor-resizer-label-middle-left = Ляво в средата — преоразмеряване + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Цвят на открояване +pdfjs-editor-colorpicker-button = + .title = Промяна на цвят +pdfjs-editor-colorpicker-dropdown = + .aria-label = Избор на цвят +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 = Червено diff --git a/static/pdf.js/locale/bg/viewer.properties b/static/pdf.js/locale/bg/viewer.properties deleted file mode 100644 index 1dde358e..00000000 --- a/static/pdf.js/locale/bg/viewer.properties +++ /dev/null @@ -1,214 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Предишна страница -previous_label=Предишна -next.title=Следваща страница -next_label=Следваща - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Страница -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=от {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} от {{pagesCount}}) - -zoom_out.title=Намаляване -zoom_out_label=Намаляване -zoom_in.title=Увеличаване -zoom_in_label=Увеличаване -zoom.title=Мащабиране -presentation_mode.title=Превключване към режим на представяне -presentation_mode_label=Режим на представяне -open_file.title=Отваряне на файл -open_file_label=Отваряне -print.title=Отпечатване -print_label=Отпечатване - -# Secondary toolbar and context menu -tools.title=Инструменти -tools_label=Инструменти -first_page.title=Към първата страница -first_page_label=Към първата страница -last_page.title=Към последната страница -last_page_label=Към последната страница -page_rotate_cw.title=Завъртане по час. стрелка -page_rotate_cw_label=Завъртане по часовниковата стрелка -page_rotate_ccw.title=Завъртане обратно на час. стрелка -page_rotate_ccw_label=Завъртане обратно на часовниковата стрелка - -cursor_text_select_tool.title=Включване на инструмента за избор на текст -cursor_text_select_tool_label=Инструмент за избор на текст -cursor_hand_tool.title=Включване на инструмента ръка -cursor_hand_tool_label=Инструмент ръка - -scroll_vertical.title=Използване на вертикално плъзгане -scroll_vertical_label=Вертикално плъзгане -scroll_horizontal.title=Използване на хоризонтално -scroll_horizontal_label=Хоризонтално плъзгане -scroll_wrapped.title=Използване на мащабируемо плъзгане -scroll_wrapped_label=Мащабируемо плъзгане - -spread_none.title=Режимът на сдвояване е изключен -spread_none_label=Без сдвояване -spread_odd.title=Сдвояване, започвайки от нечетните страници -spread_odd_label=Нечетните отляво -spread_even.title=Сдвояване, започвайки от четните страници -spread_even_label=Четните отляво - -# Document properties dialog box -document_properties.title=Свойства на документа… -document_properties_label=Свойства на документа… -document_properties_file_name=Име на файл: -document_properties_file_size=Големина на файл: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} КБ ({{size_b}} байта) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} МБ ({{size_b}} байта) -document_properties_title=Заглавие: -document_properties_author=Автор: -document_properties_subject=Тема: -document_properties_keywords=Ключови думи: -document_properties_creation_date=Дата на създаване: -document_properties_modification_date=Дата на промяна: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Създател: -document_properties_producer=PDF произведен от: -document_properties_version=Издание на PDF: -document_properties_page_count=Брой страници: -document_properties_page_size=Размер на страницата: -document_properties_page_size_unit_inches=инч -document_properties_page_size_unit_millimeters=мм -document_properties_page_size_orientation_portrait=портрет -document_properties_page_size_orientation_landscape=пейзаж -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Правни въпроси -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Бърз преглед: -document_properties_linearized_yes=Да -document_properties_linearized_no=Не -document_properties_close=Затваряне - -print_progress_message=Подготвяне на документа за отпечатване… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Отказ - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Превключване на страничната лента -toggle_sidebar_label=Превключване на страничната лента -document_outline.title=Показване на структурата на документа (двукратно щракване за свиване/разгъване на всичко) -document_outline_label=Структура на документа -attachments.title=Показване на притурките -attachments_label=Притурки -thumbs.title=Показване на миниатюрите -thumbs_label=Миниатюри -findbar.title=Намиране в документа -findbar_label=Търсене - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Страница {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Миниатюра на страница {{page}} - -# Find panel button title and messages -find_input.title=Търсене -find_input.placeholder=Търсене в документа… -find_previous.title=Намиране на предишно съвпадение на фразата -find_previous_label=Предишна -find_next.title=Намиране на следващо съвпадение на фразата -find_next_label=Следваща -find_highlight=Открояване на всички -find_match_case_label=Съвпадение на регистъра -find_entire_word_label=Цели думи -find_reached_top=Достигнато е началото на документа, продължаване от края -find_reached_bottom=Достигнат е краят на документа, продължаване от началото -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} от {{total}} съвпадение -find_match_count[two]={{current}} от {{total}} съвпадения -find_match_count[few]={{current}} от {{total}} съвпадения -find_match_count[many]={{current}} от {{total}} съвпадения -find_match_count[other]={{current}} от {{total}} съвпадения -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Повече от {{limit}} съвпадения -find_match_count_limit[one]=Повече от {{limit}} съвпадение -find_match_count_limit[two]=Повече от {{limit}} съвпадения -find_match_count_limit[few]=Повече от {{limit}} съвпадения -find_match_count_limit[many]=Повече от {{limit}} съвпадения -find_match_count_limit[other]=Повече от {{limit}} съвпадения -find_not_found=Фразата не е намерена - -# Predefined zoom values -page_scale_width=Ширина на страницата -page_scale_fit=Вместване в страницата -page_scale_auto=Автоматично мащабиране -page_scale_actual=Действителен размер -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=Получи се грешка при зареждане на PDF-а. -invalid_file_error=Невалиден или повреден PDF файл. -missing_file_error=Липсващ PDF файл. -unexpected_response_error=Неочакван отговор от сървъра. - -rendering_error=Грешка при изчертаване на страницата. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Анотация {{type}}] -password_label=Въведете парола за отваряне на този PDF файл. -password_invalid=Невалидна парола. Моля, опитайте отново. -password_ok=Добре -password_cancel=Отказ - -printing_not_supported=Внимание: Този четец няма пълна поддръжка на отпечатване. -printing_not_ready=Внимание: Този PDF файл не е напълно зареден за печат. -web_fonts_disabled=Уеб-шрифтовете са забранени: разрешаване на използването на вградените PDF шрифтове. - diff --git a/static/pdf.js/locale/bn/viewer.ftl b/static/pdf.js/locale/bn/viewer.ftl new file mode 100644 index 00000000..1e20ecb8 --- /dev/null +++ b/static/pdf.js/locale/bn/viewer.ftl @@ -0,0 +1,247 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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 = ({ $pagesCount } এর { $pageNumber }) +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-presentation-mode-button = + .title = উপস্থাপনা মোডে স্যুইচ করুন +pdfjs-presentation-mode-button-label = উপস্থাপনা মোড +pdfjs-open-file-button = + .title = ফাইল খুলুন +pdfjs-open-file-button-label = খুলুন +pdfjs-print-button = + .title = মুদ্রণ +pdfjs-print-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-vertical-button = + .title = উলম্ব স্ক্রলিং ব্যবহার করুন +pdfjs-scroll-vertical-button-label = উলম্ব স্ক্রলিং +pdfjs-scroll-horizontal-button = + .title = অনুভূমিক স্ক্রলিং ব্যবহার করুন +pdfjs-scroll-horizontal-button-label = অনুভূমিক স্ক্রলিং +pdfjs-scroll-wrapped-button = + .title = Wrapped স্ক্রোলিং ব্যবহার করুন +pdfjs-scroll-wrapped-button-label = Wrapped স্ক্রোলিং +pdfjs-spread-none-button = + .title = পেজ স্প্রেডগুলোতে যোগদান করবেন না +pdfjs-spread-none-button-label = Spreads নেই +pdfjs-spread-odd-button-label = বিজোড় Spreads +pdfjs-spread-even-button-label = জোড় Spreads + +## Document properties dialog + +pdfjs-document-properties-button = + .title = নথি বৈশিষ্ট্য… +pdfjs-document-properties-button-label = নথি বৈশিষ্ট্য… +pdfjs-document-properties-file-name = ফাইলের নাম: +pdfjs-document-properties-file-size = ফাইলের আকার: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } কেবি ({ $size_b } বাইট) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } এমবি ({ $size_b } বাইট) +pdfjs-document-properties-title = শিরোনাম: +pdfjs-document-properties-author = লেখক: +pdfjs-document-properties-subject = বিষয়: +pdfjs-document-properties-keywords = কীওয়ার্ড: +pdfjs-document-properties-creation-date = তৈরির তারিখ: +pdfjs-document-properties-modification-date = পরিবর্তনের তারিখ: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = প্রস্তুতকারক: +pdfjs-document-properties-producer = পিডিএফ প্রস্তুতকারক: +pdfjs-document-properties-version = পিডিএফ সংষ্করণ: +pdfjs-document-properties-page-count = মোট পাতা: +pdfjs-document-properties-page-size = পাতার সাইজ: +pdfjs-document-properties-page-size-unit-inches = এর মধ্যে +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = উলম্ব +pdfjs-document-properties-page-size-orientation-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 = Fast Web View: +pdfjs-document-properties-linearized-yes = হ্যাঁ +pdfjs-document-properties-linearized-no = না +pdfjs-document-properties-close-button = বন্ধ + +## Print + +pdfjs-print-progress-message = মুদ্রণের জন্য নথি প্রস্তুত করা হচ্ছে… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = বাতিল +pdfjs-printing-not-supported = সতর্কতা: এই ব্রাউজারে মুদ্রণ সম্পূর্ণভাবে সমর্থিত নয়। +pdfjs-printing-not-ready = সতর্কীকরণ: পিডিএফটি মুদ্রণের জন্য সম্পূর্ণ লোড হয়নি। + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = সাইডবার টগল করুন +pdfjs-toggle-sidebar-button-label = সাইডবার টগল করুন +pdfjs-document-outline-button = + .title = নথির আউটলাইন দেখাও (সব আইটেম প্রসারিত/সঙ্কুচিত করতে ডবল ক্লিক করুন) +pdfjs-document-outline-button-label = নথির রূপরেখা +pdfjs-attachments-button = + .title = সংযুক্তি দেখাও +pdfjs-attachments-button-label = সংযুক্তি +pdfjs-thumbs-button = + .title = থাম্বনেইল সমূহ প্রদর্শন করুন +pdfjs-thumbs-button-label = থাম্বনেইল সমূহ +pdfjs-findbar-button = + .title = নথির মধ্যে খুঁজুন +pdfjs-findbar-button-label = খুঁজুন + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = পাতা { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = { $page } পাতার থাম্বনেইল + +## Find panel button title and messages + +pdfjs-find-input = + .title = খুঁজুন + .placeholder = নথির মধ্যে খুঁজুন… +pdfjs-find-previous-button = + .title = বাক্যাংশের পূর্ববর্তী উপস্থিতি অনুসন্ধান +pdfjs-find-previous-button-label = পূর্ববর্তী +pdfjs-find-next-button = + .title = বাক্যাংশের পরবর্তী উপস্থিতি অনুসন্ধান +pdfjs-find-next-button-label = পরবর্তী +pdfjs-find-highlight-checkbox = সব হাইলাইট করুন +pdfjs-find-match-case-checkbox-label = অক্ষরের ছাঁদ মেলানো +pdfjs-find-entire-word-checkbox-label = সম্পূর্ণ শব্দ +pdfjs-find-reached-top = পাতার শুরুতে পৌছে গেছে, নীচ থেকে আরম্ভ করা হয়েছে +pdfjs-find-reached-bottom = পাতার শেষে পৌছে গেছে, উপর থেকে আরম্ভ করা হয়েছে +pdfjs-find-not-found = বাক্যাংশ পাওয়া যায়নি + +## 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 + + +## Loading indicator messages + +pdfjs-loading-error = পিডিএফ লোড করার সময় ত্রুটি দেখা দিয়েছে। +pdfjs-invalid-file-error = অকার্যকর অথবা ক্ষতিগ্রস্ত পিডিএফ ফাইল। +pdfjs-missing-file-error = নিখোঁজ PDF ফাইল। +pdfjs-unexpected-response-error = অপ্রত্যাশীত সার্ভার প্রতিক্রিয়া। +pdfjs-rendering-error = পাতা উপস্থাপনার সময় ত্রুটি দেখা দিয়েছে। + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } টীকা] + +## Password + +pdfjs-password-label = পিডিএফ ফাইলটি ওপেন করতে পাসওয়ার্ড দিন। +pdfjs-password-invalid = ভুল পাসওয়ার্ড। অনুগ্রহ করে আবার চেষ্টা করুন। +pdfjs-password-ok-button = ঠিক আছে +pdfjs-password-cancel-button = বাতিল +pdfjs-web-fonts-disabled = ওয়েব ফন্ট নিষ্ক্রিয়: সংযুক্ত পিডিএফ ফন্ট ব্যবহার করা যাচ্ছে না। + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/bn/viewer.properties b/static/pdf.js/locale/bn/viewer.properties deleted file mode 100644 index d842f4dc..00000000 --- a/static/pdf.js/locale/bn/viewer.properties +++ /dev/null @@ -1,218 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=পূর্ববর্তী পাতা -previous_label=পূর্ববর্তী -next.title=পরবর্তী পাতা -next_label=পরবর্তী - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=পাতা -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages={{pagesCount}} এর -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pagesCount}} এর {{pageNumber}}) - -zoom_out.title=ছোট আকারে প্রদর্শন -zoom_out_label=ছোট আকারে প্রদর্শন -zoom_in.title=বড় আকারে প্রদর্শন -zoom_in_label=বড় আকারে প্রদর্শন -zoom.title=বড় আকারে প্রদর্শন -presentation_mode.title=উপস্থাপনা মোডে স্যুইচ করুন -presentation_mode_label=উপস্থাপনা মোড -open_file.title=ফাইল খুলুন -open_file_label=খুলুন -print.title=মুদ্রণ -print_label=মুদ্রণ - -# Secondary toolbar and context menu -tools.title=টুল -tools_label=টুল -first_page.title=প্রথম পাতায় যাও -first_page_label=প্রথম পাতায় যাও -last_page.title=শেষ পাতায় যাও -last_page_label=শেষ পাতায় যাও -page_rotate_cw.title=ঘড়ির কাঁটার দিকে ঘোরাও -page_rotate_cw_label=ঘড়ির কাঁটার দিকে ঘোরাও -page_rotate_ccw.title=ঘড়ির কাঁটার বিপরীতে ঘোরাও -page_rotate_ccw_label=ঘড়ির কাঁটার বিপরীতে ঘোরাও - -cursor_text_select_tool.title=লেখা নির্বাচক টুল সক্রিয় করুন -cursor_text_select_tool_label=লেখা নির্বাচক টুল -cursor_hand_tool.title=হ্যান্ড টুল সক্রিয় করুন -cursor_hand_tool_label=হ্যান্ড টুল - -scroll_vertical.title=উলম্ব স্ক্রলিং ব্যবহার করুন -scroll_vertical_label=উলম্ব স্ক্রলিং -scroll_horizontal.title=অনুভূমিক স্ক্রলিং ব্যবহার করুন -scroll_horizontal_label=অনুভূমিক স্ক্রলিং -scroll_wrapped.title=Wrapped স্ক্রোলিং ব্যবহার করুন -scroll_wrapped_label=Wrapped স্ক্রোলিং - -spread_none.title=পেজ স্প্রেডগুলোতে যোগদান করবেন না -spread_none_label=Spreads নেই -spread_odd_label=বিজোড় Spreads -spread_even_label=জোড় Spreads - -# Document properties dialog box -document_properties.title=নথি বৈশিষ্ট্য… -document_properties_label=নথি বৈশিষ্ট্য… -document_properties_file_name=ফাইলের নাম: -document_properties_file_size=ফাইলের আকার: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} কেবি ({{size_b}} বাইট) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} এমবি ({{size_b}} বাইট) -document_properties_title=শিরোনাম: -document_properties_author=লেখক: -document_properties_subject=বিষয়: -document_properties_keywords=কীওয়ার্ড: -document_properties_creation_date=তৈরির তারিখ: -document_properties_modification_date=পরিবর্তনের তারিখ: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=প্রস্তুতকারক: -document_properties_producer=পিডিএফ প্রস্তুতকারক: -document_properties_version=পিডিএফ সংষ্করণ: -document_properties_page_count=মোট পাতা: -document_properties_page_size=পাতার সাইজ: -document_properties_page_size_unit_inches=এর মধ্যে -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=উলম্ব -document_properties_page_size_orientation_landscape=অনুভূমিক -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=লেটার -document_properties_page_size_name_legal=লীগাল -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Fast Web View: -document_properties_linearized_yes=হ্যাঁ -document_properties_linearized_no=না -document_properties_close=বন্ধ - -print_progress_message=মুদ্রণের জন্য নথি প্রস্তুত করা হচ্ছে… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=বাতিল - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=সাইডবার টগল করুন -toggle_sidebar_label=সাইডবার টগল করুন -document_outline.title=নথির আউটলাইন দেখাও (সব আইটেম প্রসারিত/সঙ্কুচিত করতে ডবল ক্লিক করুন) -document_outline_label=নথির রূপরেখা -attachments.title=সংযুক্তি দেখাও -attachments_label=সংযুক্তি -thumbs.title=থাম্বনেইল সমূহ প্রদর্শন করুন -thumbs_label=থাম্বনেইল সমূহ -findbar.title=নথির মধ্যে খুঁজুন -findbar_label=খুঁজুন - -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=পাতা {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas={{page}} পাতার থাম্বনেইল - -# Find panel button title and messages -find_input.title=খুঁজুন -find_input.placeholder=নথির মধ্যে খুঁজুন… -find_previous.title=বাক্যাংশের পূর্ববর্তী উপস্থিতি অনুসন্ধান -find_previous_label=পূর্ববর্তী -find_next.title=বাক্যাংশের পরবর্তী উপস্থিতি অনুসন্ধান -find_next_label=পরবর্তী -find_highlight=সব হাইলাইট করুন -find_match_case_label=অক্ষরের ছাঁদ মেলানো -find_entire_word_label=সম্পূর্ণ শব্দ -find_reached_top=পাতার শুরুতে পৌছে গেছে, নীচ থেকে আরম্ভ করা হয়েছে -find_reached_bottom=পাতার শেষে পৌছে গেছে, উপর থেকে আরম্ভ করা হয়েছে -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{total}} এর {{current}} মিল -find_match_count[two]={{total}} এর {{current}} মিল -find_match_count[few]={{total}} এর {{current}} মিল -find_match_count[many]={{total}} এর {{current}} মিল -find_match_count[other]={{total}} এর {{current}} মিল -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]={{limit}} এর বেশি মিল -find_match_count_limit[one]={{limit}} এর বেশি মিল -find_match_count_limit[two]={{limit}} এর বেশি মিল -find_match_count_limit[few]={{limit}} এর বেশি মিল -find_match_count_limit[many]={{limit}} এর বেশি মিল -find_match_count_limit[other]={{limit}} এর বেশি মিল -find_not_found=বাক্যাংশ পাওয়া যায়নি - -# Predefined zoom values -page_scale_width=পাতার প্রস্থ -page_scale_fit=পাতা ফিট করুন -page_scale_auto=স্বয়ংক্রিয় জুম -page_scale_actual=প্রকৃত আকার -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=পিডিএফ লোড করার সময় ত্রুটি দেখা দিয়েছে। -invalid_file_error=অকার্যকর অথবা ক্ষতিগ্রস্ত পিডিএফ ফাইল। -missing_file_error=নিখোঁজ PDF ফাইল। -unexpected_response_error=অপ্রত্যাশীত সার্ভার প্রতিক্রিয়া। - -rendering_error=পাতা উপস্থাপনার সময় ত্রুটি দেখা দিয়েছে। - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} টীকা] -password_label=পিডিএফ ফাইলটি ওপেন করতে পাসওয়ার্ড দিন। -password_invalid=ভুল পাসওয়ার্ড। অনুগ্রহ করে আবার চেষ্টা করুন। -password_ok=ঠিক আছে -password_cancel=বাতিল - -printing_not_supported=সতর্কতা: এই ব্রাউজারে মুদ্রণ সম্পূর্ণভাবে সমর্থিত নয়। -printing_not_ready=সতর্কীকরণ: পিডিএফটি মুদ্রণের জন্য সম্পূর্ণ লোড হয়নি। -web_fonts_disabled=ওয়েব ফন্ট নিষ্ক্রিয়: সংযুক্ত পিডিএফ ফন্ট ব্যবহার করা যাচ্ছে না। - diff --git a/static/pdf.js/locale/bo/viewer.ftl b/static/pdf.js/locale/bo/viewer.ftl new file mode 100644 index 00000000..824eab4f --- /dev/null +++ b/static/pdf.js/locale/bo/viewer.ftl @@ -0,0 +1,247 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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 = of { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zoom Out +pdfjs-zoom-out-button-label = Zoom Out +pdfjs-zoom-in-button = + .title = Zoom In +pdfjs-zoom-in-button-label = Zoom In +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Switch to Presentation Mode +pdfjs-presentation-mode-button-label = Presentation Mode +pdfjs-open-file-button = + .title = Open File +pdfjs-open-file-button-label = Open +pdfjs-print-button = + .title = Print +pdfjs-print-button-label = Print + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Tools +pdfjs-tools-button-label = Tools +pdfjs-first-page-button = + .title = Go to First Page +pdfjs-first-page-button-label = Go to First Page +pdfjs-last-page-button = + .title = Go to Last Page +pdfjs-last-page-button-label = Go to Last Page +pdfjs-page-rotate-cw-button = + .title = Rotate Clockwise +pdfjs-page-rotate-cw-button-label = Rotate Clockwise +pdfjs-page-rotate-ccw-button = + .title = Rotate Counterclockwise +pdfjs-page-rotate-ccw-button-label = Rotate Counterclockwise +pdfjs-cursor-text-select-tool-button = + .title = Enable Text Selection Tool +pdfjs-cursor-text-select-tool-button-label = Text Selection Tool +pdfjs-cursor-hand-tool-button = + .title = Enable Hand Tool +pdfjs-cursor-hand-tool-button-label = Hand Tool +pdfjs-scroll-vertical-button = + .title = Use Vertical Scrolling +pdfjs-scroll-vertical-button-label = Vertical Scrolling +pdfjs-scroll-horizontal-button = + .title = Use Horizontal Scrolling +pdfjs-scroll-horizontal-button-label = Horizontal Scrolling +pdfjs-scroll-wrapped-button = + .title = Use Wrapped Scrolling +pdfjs-scroll-wrapped-button-label = Wrapped Scrolling +pdfjs-spread-none-button = + .title = Do not join page spreads +pdfjs-spread-none-button-label = No Spreads +pdfjs-spread-odd-button = + .title = Join page spreads starting with odd-numbered pages +pdfjs-spread-odd-button-label = Odd Spreads +pdfjs-spread-even-button = + .title = Join page spreads starting with even-numbered pages +pdfjs-spread-even-button-label = Even Spreads + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Document Properties… +pdfjs-document-properties-button-label = Document Properties… +pdfjs-document-properties-file-name = File name: +pdfjs-document-properties-file-size = File size: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Title: +pdfjs-document-properties-author = Author: +pdfjs-document-properties-subject = Subject: +pdfjs-document-properties-keywords = Keywords: +pdfjs-document-properties-creation-date = Creation Date: +pdfjs-document-properties-modification-date = Modification Date: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Creator: +pdfjs-document-properties-producer = PDF Producer: +pdfjs-document-properties-version = PDF Version: +pdfjs-document-properties-page-count = Page Count: +pdfjs-document-properties-page-size = Page Size: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +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 = Letter +pdfjs-document-properties-page-size-name-legal = 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 = Fast Web View: +pdfjs-document-properties-linearized-yes = Yes +pdfjs-document-properties-linearized-no = No +pdfjs-document-properties-close-button = Close + +## Print + +pdfjs-print-progress-message = Preparing document for printing… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Cancel +pdfjs-printing-not-supported = Warning: Printing is not fully supported by this browser. +pdfjs-printing-not-ready = Warning: The PDF is not fully loaded for printing. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Toggle Sidebar +pdfjs-toggle-sidebar-button-label = Toggle Sidebar +pdfjs-document-outline-button = + .title = Show Document Outline (double-click to expand/collapse all items) +pdfjs-document-outline-button-label = Document Outline +pdfjs-attachments-button = + .title = Show Attachments +pdfjs-attachments-button-label = Attachments +pdfjs-thumbs-button = + .title = Show Thumbnails +pdfjs-thumbs-button-label = Thumbnails +pdfjs-findbar-button = + .title = Find in Document +pdfjs-findbar-button-label = Find + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Page { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Thumbnail of Page { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Find + .placeholder = Find in document… +pdfjs-find-previous-button = + .title = Find the previous occurrence of the phrase +pdfjs-find-previous-button-label = Previous +pdfjs-find-next-button = + .title = Find the next occurrence of the phrase +pdfjs-find-next-button-label = Next +pdfjs-find-highlight-checkbox = Highlight all +pdfjs-find-match-case-checkbox-label = Match case +pdfjs-find-entire-word-checkbox-label = Whole words +pdfjs-find-reached-top = Reached top of document, continued from bottom +pdfjs-find-reached-bottom = Reached end of document, continued from top +pdfjs-find-not-found = Phrase not found + +## Predefined zoom values + +pdfjs-page-scale-width = Page Width +pdfjs-page-scale-fit = Page Fit +pdfjs-page-scale-auto = Automatic Zoom +pdfjs-page-scale-actual = Actual Size +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = An error occurred while loading the PDF. +pdfjs-invalid-file-error = Invalid or corrupted PDF file. +pdfjs-missing-file-error = Missing PDF file. +pdfjs-unexpected-response-error = Unexpected server response. +pdfjs-rendering-error = An error occurred while rendering the page. + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Annotation] + +## Password + +pdfjs-password-label = Enter the password to open this PDF file. +pdfjs-password-invalid = Invalid password. Please try again. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Cancel +pdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/bo/viewer.properties b/static/pdf.js/locale/bo/viewer.properties deleted file mode 100644 index dbfb2d13..00000000 --- a/static/pdf.js/locale/bo/viewer.properties +++ /dev/null @@ -1,217 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=དྲ་ངོས་སྔོན་མ -previous_label=སྔོན་མ -next.title=དྲ་ངོས་རྗེས་མ -next_label=རྗེས་མ - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=ཤོག་ངོས -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=of {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} of {{pagesCount}}) - -zoom_out.title=Zoom Out -zoom_out_label=Zoom Out -zoom_in.title=Zoom In -zoom_in_label=Zoom In -zoom.title=Zoom -presentation_mode.title=Switch to Presentation Mode -presentation_mode_label=Presentation Mode -open_file.title=Open File -open_file_label=Open -print.title=Print -print_label=Print - -# Secondary toolbar and context menu -tools.title=Tools -tools_label=Tools -first_page.title=Go to First Page -first_page_label=Go to First Page -last_page.title=Go to Last Page -last_page_label=Go to Last Page -page_rotate_cw.title=Rotate Clockwise -page_rotate_cw_label=Rotate Clockwise -page_rotate_ccw.title=Rotate Counterclockwise -page_rotate_ccw_label=Rotate Counterclockwise - -cursor_text_select_tool.title=Enable Text Selection Tool -cursor_text_select_tool_label=Text Selection Tool -cursor_hand_tool.title=Enable Hand Tool -cursor_hand_tool_label=Hand Tool - -scroll_vertical.title=Use Vertical Scrolling -scroll_vertical_label=Vertical Scrolling -scroll_horizontal.title=Use Horizontal Scrolling -scroll_horizontal_label=Horizontal Scrolling -scroll_wrapped.title=Use Wrapped Scrolling -scroll_wrapped_label=Wrapped Scrolling - -spread_none.title=Do not join page spreads -spread_none_label=No Spreads -spread_odd.title=Join page spreads starting with odd-numbered pages -spread_odd_label=Odd Spreads -spread_even.title=Join page spreads starting with even-numbered pages -spread_even_label=Even Spreads - -# Document properties dialog box -document_properties.title=Document Properties… -document_properties_label=Document Properties… -document_properties_file_name=File name: -document_properties_file_size=File size: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Title: -document_properties_author=Author: -document_properties_subject=Subject: -document_properties_keywords=Keywords: -document_properties_creation_date=Creation Date: -document_properties_modification_date=Modification Date: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Creator: -document_properties_producer=PDF Producer: -document_properties_version=PDF Version: -document_properties_page_count=Page Count: -document_properties_page_size=Page Size: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=portrait -document_properties_page_size_orientation_landscape=landscape -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Fast Web View: -document_properties_linearized_yes=Yes -document_properties_linearized_no=No -document_properties_close=Close - -print_progress_message=Preparing document for printing… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Cancel - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Toggle Sidebar -toggle_sidebar_label=Toggle Sidebar -document_outline.title=Show Document Outline (double-click to expand/collapse all items) -document_outline_label=Document Outline -attachments.title=Show Attachments -attachments_label=Attachments -thumbs.title=Show Thumbnails -thumbs_label=Thumbnails -findbar.title=Find in Document -findbar_label=Find - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Page {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Thumbnail of Page {{page}} - -# Find panel button title and messages -find_input.title=Find -find_input.placeholder=Find in document… -find_previous.title=Find the previous occurrence of the phrase -find_previous_label=Previous -find_next.title=Find the next occurrence of the phrase -find_next_label=Next -find_highlight=Highlight all -find_match_case_label=Match case -find_entire_word_label=Whole words -find_reached_top=Reached top of document, continued from bottom -find_reached_bottom=Reached end of document, continued from top -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} of {{total}} match -find_match_count[two]={{current}} of {{total}} matches -find_match_count[few]={{current}} of {{total}} matches -find_match_count[many]={{current}} of {{total}} matches -find_match_count[other]={{current}} of {{total}} matches -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=More than {{limit}} matches -find_match_count_limit[one]=More than {{limit}} match -find_match_count_limit[two]=More than {{limit}} matches -find_match_count_limit[few]=More than {{limit}} matches -find_match_count_limit[many]=More than {{limit}} matches -find_match_count_limit[other]=More than {{limit}} matches -find_not_found=Phrase not found - -# Predefined zoom values -page_scale_width=Page Width -page_scale_fit=Page Fit -page_scale_auto=Automatic Zoom -page_scale_actual=Actual Size -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=An error occurred while loading the PDF. -invalid_file_error=Invalid or corrupted PDF file. -missing_file_error=Missing PDF file. -unexpected_response_error=Unexpected server response. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. - -rendering_error=An error occurred while rendering the page. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Annotation] -password_label=Enter the password to open this PDF file. -password_invalid=Invalid password. Please try again. -password_ok=OK -password_cancel=Cancel - -printing_not_supported=Warning: Printing is not fully supported by this browser. -printing_not_ready=Warning: The PDF is not fully loaded for printing. -web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts. - diff --git a/static/pdf.js/locale/br/viewer.ftl b/static/pdf.js/locale/br/viewer.ftl new file mode 100644 index 00000000..9049f68f --- /dev/null +++ b/static/pdf.js/locale/br/viewer.ftl @@ -0,0 +1,313 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Pajenn a-raok +pdfjs-previous-button-label = A-raok +pdfjs-next-button = + .title = Pajenn war-lerc'h +pdfjs-next-button-label = War-lerc'h +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Pajenn +# 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 = eus { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } war { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zoum bihanaat +pdfjs-zoom-out-button-label = Zoum bihanaat +pdfjs-zoom-in-button = + .title = Zoum brasaat +pdfjs-zoom-in-button-label = Zoum brasaat +pdfjs-zoom-select = + .title = Zoum +pdfjs-presentation-mode-button = + .title = Trec'haoliñ etrezek ar mod kinnigadenn +pdfjs-presentation-mode-button-label = Mod kinnigadenn +pdfjs-open-file-button = + .title = Digeriñ ur restr +pdfjs-open-file-button-label = Digeriñ ur restr +pdfjs-print-button = + .title = Moullañ +pdfjs-print-button-label = Moullañ +pdfjs-save-button = + .title = Enrollañ +pdfjs-save-button-label = Enrollañ +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Pellgargañ +# 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 = Pellgargañ +pdfjs-bookmark-button-label = Pajenn a-vremañ +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Digeriñ en arload +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Digeriñ en arload + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Ostilhoù +pdfjs-tools-button-label = Ostilhoù +pdfjs-first-page-button = + .title = Mont d'ar bajenn gentañ +pdfjs-first-page-button-label = Mont d'ar bajenn gentañ +pdfjs-last-page-button = + .title = Mont d'ar bajenn diwezhañ +pdfjs-last-page-button-label = Mont d'ar bajenn diwezhañ +pdfjs-page-rotate-cw-button = + .title = C'hwelañ gant roud ar bizied +pdfjs-page-rotate-cw-button-label = C'hwelañ gant roud ar bizied +pdfjs-page-rotate-ccw-button = + .title = C'hwelañ gant roud gin ar bizied +pdfjs-page-rotate-ccw-button-label = C'hwelañ gant roud gin ar bizied +pdfjs-cursor-text-select-tool-button = + .title = Gweredekaat an ostilh diuzañ testenn +pdfjs-cursor-text-select-tool-button-label = Ostilh diuzañ testenn +pdfjs-cursor-hand-tool-button = + .title = Gweredekaat an ostilh dorn +pdfjs-cursor-hand-tool-button-label = Ostilh dorn +pdfjs-scroll-vertical-button = + .title = Arverañ an dibunañ a-blom +pdfjs-scroll-vertical-button-label = Dibunañ a-serzh +pdfjs-scroll-horizontal-button = + .title = Arverañ an dibunañ a-blaen +pdfjs-scroll-horizontal-button-label = Dibunañ a-blaen +pdfjs-scroll-wrapped-button = + .title = Arverañ an dibunañ paket +pdfjs-scroll-wrapped-button-label = Dibunañ paket +pdfjs-spread-none-button = + .title = Chom hep stagañ ar skignadurioù +pdfjs-spread-none-button-label = Skignadenn ebet +pdfjs-spread-odd-button = + .title = Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù ampar +pdfjs-spread-odd-button-label = Pajennoù ampar +pdfjs-spread-even-button = + .title = Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù par +pdfjs-spread-even-button-label = Pajennoù par + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Perzhioù an teul… +pdfjs-document-properties-button-label = Perzhioù an teul… +pdfjs-document-properties-file-name = Anv restr: +pdfjs-document-properties-file-size = Ment ar restr: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } Ke ({ $size_b } eizhbit) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } Me ({ $size_b } eizhbit) +pdfjs-document-properties-title = Titl: +pdfjs-document-properties-author = Aozer: +pdfjs-document-properties-subject = Danvez: +pdfjs-document-properties-keywords = Gerioù-alc'hwez: +pdfjs-document-properties-creation-date = Deiziad krouiñ: +pdfjs-document-properties-modification-date = Deiziad kemmañ: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Krouer: +pdfjs-document-properties-producer = Kenderc'her PDF: +pdfjs-document-properties-version = Handelv PDF: +pdfjs-document-properties-page-count = Niver a bajennoù: +pdfjs-document-properties-page-size = Ment ar bajenn: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = poltred +pdfjs-document-properties-page-size-orientation-landscape = gweledva +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 = Lizher +pdfjs-document-properties-page-size-name-legal = Lezennel + +## 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 = Gwel Web Herrek: +pdfjs-document-properties-linearized-yes = Ya +pdfjs-document-properties-linearized-no = Ket +pdfjs-document-properties-close-button = Serriñ + +## Print + +pdfjs-print-progress-message = O prientiñ an teul evit moullañ... +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Nullañ +pdfjs-printing-not-supported = Kemenn: N'eo ket skoret penn-da-benn ar moullañ gant ar merdeer-mañ. +pdfjs-printing-not-ready = Kemenn: N'hall ket bezañ moullet ar restr PDF rak n'eo ket karget penn-da-benn. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Diskouez/kuzhat ar varrenn gostez +pdfjs-toggle-sidebar-notification-button = + .title = Trec'haoliñ ar varrenn-gostez (ur steuñv pe stagadennoù a zo en teul) +pdfjs-toggle-sidebar-button-label = Diskouez/kuzhat ar varrenn gostez +pdfjs-document-outline-button = + .title = Diskouez steuñv an teul (daouglikit evit brasaat/bihanaat an holl elfennoù) +pdfjs-document-outline-button-label = Sinedoù an teuliad +pdfjs-attachments-button = + .title = Diskouez ar c'henstagadurioù +pdfjs-attachments-button-label = Kenstagadurioù +pdfjs-layers-button = + .title = Diskouez ar gwiskadoù (daou-glikañ evit adderaouekaat an holl gwiskadoù d'o stad dre ziouer) +pdfjs-layers-button-label = Gwiskadoù +pdfjs-thumbs-button = + .title = Diskouez ar melvennoù +pdfjs-thumbs-button-label = Melvennoù +pdfjs-findbar-button = + .title = Klask e-barzh an teuliad +pdfjs-findbar-button-label = Klask +pdfjs-additional-layers = Gwiskadoù ouzhpenn + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Pajenn { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Melvenn ar bajenn { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Klask + .placeholder = Klask e-barzh an teuliad +pdfjs-find-previous-button = + .title = Kavout an tamm frazenn kent o klotañ ganti +pdfjs-find-previous-button-label = Kent +pdfjs-find-next-button = + .title = Kavout an tamm frazenn war-lerc'h o klotañ ganti +pdfjs-find-next-button-label = War-lerc'h +pdfjs-find-highlight-checkbox = Usskediñ pep tra +pdfjs-find-match-case-checkbox-label = Teurel evezh ouzh ar pennlizherennoù +pdfjs-find-entire-word-checkbox-label = Gerioù a-bezh +pdfjs-find-reached-top = Tizhet eo bet derou ar bajenn, kenderc'hel diouzh an diaz +pdfjs-find-reached-bottom = Tizhet eo bet dibenn ar bajenn, kenderc'hel diouzh ar c'hrec'h +pdfjs-find-not-found = N'haller ket kavout ar frazenn + +## Predefined zoom values + +pdfjs-page-scale-width = Led ar bajenn +pdfjs-page-scale-fit = Pajenn a-bezh +pdfjs-page-scale-auto = Zoum emgefreek +pdfjs-page-scale-actual = Ment wir +# 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 = Pajenn { $page } + +## Loading indicator messages + +pdfjs-loading-error = Degouezhet ez eus bet ur fazi e-pad kargañ ar PDF. +pdfjs-invalid-file-error = Restr PDF didalvoudek pe kontronet. +pdfjs-missing-file-error = Restr PDF o vankout. +pdfjs-unexpected-response-error = Respont dic'hortoz a-berzh an dafariad +pdfjs-rendering-error = Degouezhet ez eus bet ur fazi e-pad skrammañ ar bajennad. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Notennañ] + +## Password + +pdfjs-password-label = Enankit ar ger-tremen evit digeriñ ar restr PDF-mañ. +pdfjs-password-invalid = Ger-tremen didalvoudek. Klaskit en-dro mar plij. +pdfjs-password-ok-button = Mat eo +pdfjs-password-cancel-button = Nullañ +pdfjs-web-fonts-disabled = Diweredekaet eo an nodrezhoù web: n'haller ket arverañ an nodrezhoù PDF enframmet. + +## Editing + +pdfjs-editor-free-text-button = + .title = Testenn +pdfjs-editor-free-text-button-label = Testenn +pdfjs-editor-ink-button = + .title = Tresañ +pdfjs-editor-ink-button-label = Tresañ +pdfjs-editor-stamp-button = + .title = Ouzhpennañ pe aozañ skeudennoù +pdfjs-editor-stamp-button-label = Ouzhpennañ pe aozañ skeudennoù + +## Remove button for the various kind of editor. + + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Liv +pdfjs-editor-free-text-size-input = Ment +pdfjs-editor-ink-color-input = Liv +pdfjs-editor-ink-thickness-input = Tevder +pdfjs-editor-ink-opacity-input = Boullder +pdfjs-editor-stamp-add-image-button = + .title = Ouzhpennañ ur skeudenn +pdfjs-editor-stamp-add-image-button-label = Ouzhpennañ ur skeudenn +pdfjs-free-text = + .aria-label = Aozer testennoù +pdfjs-ink = + .aria-label = Aozer tresoù +pdfjs-ink-canvas = + .aria-label = Skeudenn bet krouet gant an implijer·ez + +## Alt-text dialog + +pdfjs-editor-alt-text-add-description-label = Ouzhpennañ un deskrivadur +pdfjs-editor-alt-text-cancel-button = Nullañ +pdfjs-editor-alt-text-save-button = Enrollañ + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + + +## Color picker + diff --git a/static/pdf.js/locale/br/viewer.properties b/static/pdf.js/locale/br/viewer.properties deleted file mode 100644 index 5c5da0fa..00000000 --- a/static/pdf.js/locale/br/viewer.properties +++ /dev/null @@ -1,224 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Pajenn a-raok -previous_label=A-raok -next.title=Pajenn war-lerc'h -next_label=War-lerc'h - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Pajenn -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=eus {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} war {{pagesCount}}) - -zoom_out.title=Zoum bihanaat -zoom_out_label=Zoum bihanaat -zoom_in.title=Zoum brasaat -zoom_in_label=Zoum brasaat -zoom.title=Zoum -presentation_mode.title=Trec'haoliñ etrezek ar mod kinnigadenn -presentation_mode_label=Mod kinnigadenn -open_file.title=Digeriñ ur restr -open_file_label=Digeriñ ur restr -print.title=Moullañ -print_label=Moullañ - -# Secondary toolbar and context menu -tools.title=Ostilhoù -tools_label=Ostilhoù -first_page.title=Mont d'ar bajenn gentañ -first_page_label=Mont d'ar bajenn gentañ -last_page.title=Mont d'ar bajenn diwezhañ -last_page_label=Mont d'ar bajenn diwezhañ -page_rotate_cw.title=C'hwelañ gant roud ar bizied -page_rotate_cw_label=C'hwelañ gant roud ar bizied -page_rotate_ccw.title=C'hwelañ gant roud gin ar bizied -page_rotate_ccw_label=C'hwelañ gant roud gin ar bizied - -cursor_text_select_tool.title=Gweredekaat an ostilh diuzañ testenn -cursor_text_select_tool_label=Ostilh diuzañ testenn -cursor_hand_tool.title=Gweredekaat an ostilh dorn -cursor_hand_tool_label=Ostilh dorn - -scroll_vertical.title=Arverañ an dibunañ a-blom -scroll_vertical_label=Dibunañ a-serzh -scroll_horizontal.title=Arverañ an dibunañ a-blaen -scroll_horizontal_label=Dibunañ a-blaen -scroll_wrapped.title=Arverañ an dibunañ paket -scroll_wrapped_label=Dibunañ paket - -spread_none.title=Chom hep stagañ ar skignadurioù -spread_none_label=Skignadenn ebet -spread_odd.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù ampar -spread_odd_label=Pajennoù ampar -spread_even.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù par -spread_even_label=Pajennoù par - -# Document properties dialog box -document_properties.title=Perzhioù an teul… -document_properties_label=Perzhioù an teul… -document_properties_file_name=Anv restr: -document_properties_file_size=Ment ar restr: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} Ke ({{size_b}} eizhbit) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} Me ({{size_b}} eizhbit) -document_properties_title=Titl: -document_properties_author=Aozer: -document_properties_subject=Danvez: -document_properties_keywords=Gerioù-alc'hwez: -document_properties_creation_date=Deiziad krouiñ: -document_properties_modification_date=Deiziad kemmañ: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Krouer: -document_properties_producer=Kenderc'her PDF: -document_properties_version=Handelv PDF: -document_properties_page_count=Niver a bajennoù: -document_properties_page_size=Ment ar bajenn: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=poltred -document_properties_page_size_orientation_landscape=gweledva -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Lizher -document_properties_page_size_name_legal=Lezennel -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Gwel Web Herrek: -document_properties_linearized_yes=Ya -document_properties_linearized_no=Ket -document_properties_close=Serriñ - -print_progress_message=O prientiñ an teul evit moullañ... -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Nullañ - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Diskouez/kuzhat ar varrenn gostez -toggle_sidebar_notification2.title=Trec'haoliñ ar varrenn-gostez (ur steuñv pe stagadennoù a zo en teul) -toggle_sidebar_label=Diskouez/kuzhat ar varrenn gostez -document_outline.title=Diskouez steuñv an teul (daouglikit evit brasaat/bihanaat an holl elfennoù) -document_outline_label=Sinedoù an teuliad -attachments.title=Diskouez ar c'henstagadurioù -attachments_label=Kenstagadurioù -layers.title=Diskouez ar gwiskadoù (daou-glikañ evit adderaouekaat an holl gwiskadoù d'o stad dre ziouer) -layers_label=Gwiskadoù -thumbs.title=Diskouez ar melvennoù -thumbs_label=Melvennoù -findbar.title=Klask e-barzh an teuliad -findbar_label=Klask - -additional_layers=Gwiskadoù ouzhpenn -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Pajenn {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Pajenn {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Melvenn ar bajenn {{page}} - -# Find panel button title and messages -find_input.title=Klask -find_input.placeholder=Klask e-barzh an teuliad -find_previous.title=Kavout an tamm frazenn kent o klotañ ganti -find_previous_label=Kent -find_next.title=Kavout an tamm frazenn war-lerc'h o klotañ ganti -find_next_label=War-lerc'h -find_highlight=Usskediñ pep tra -find_match_case_label=Teurel evezh ouzh ar pennlizherennoù -find_entire_word_label=Gerioù a-bezh -find_reached_top=Tizhet eo bet derou ar bajenn, kenderc'hel diouzh an diaz -find_reached_bottom=Tizhet eo bet dibenn ar bajenn, kenderc'hel diouzh ar c'hrec'h -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]=Klotadenn {{current}} war {{total}} -find_match_count[two]=Klotadenn {{current}} war {{total}} -find_match_count[few]=Klotadenn {{current}} war {{total}} -find_match_count[many]=Klotadenn {{current}} war {{total}} -find_match_count[other]=Klotadenn {{current}} war {{total}} -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Muioc'h eget {{limit}} a glotadennoù -find_match_count_limit[one]=Muioc'h eget {{limit}} a glotadennoù -find_match_count_limit[two]=Muioc'h eget {{limit}} a glotadennoù -find_match_count_limit[few]=Muioc'h eget {{limit}} a glotadennoù -find_match_count_limit[many]=Muioc'h eget {{limit}} a glotadennoù -find_match_count_limit[other]=Muioc'h eget {{limit}} a glotadennoù -find_not_found=N'haller ket kavout ar frazenn - -# Predefined zoom values -page_scale_width=Led ar bajenn -page_scale_fit=Pajenn a-bezh -page_scale_auto=Zoum emgefreek -page_scale_actual=Ment wir -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=Degouezhet ez eus bet ur fazi e-pad kargañ ar PDF. -invalid_file_error=Restr PDF didalvoudek pe kontronet. -missing_file_error=Restr PDF o vankout. -unexpected_response_error=Respont dic'hortoz a-berzh an dafariad - -rendering_error=Degouezhet ez eus bet ur fazi e-pad skrammañ ar bajennad. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Notennañ] -password_label=Enankit ar ger-tremen evit digeriñ ar restr PDF-mañ. -password_invalid=Ger-tremen didalvoudek. Klaskit en-dro mar plij. -password_ok=Mat eo -password_cancel=Nullañ - -printing_not_supported=Kemenn: N'eo ket skoret penn-da-benn ar moullañ gant ar merdeer-mañ. -printing_not_ready=Kemenn: N'hall ket bezañ moullet ar restr PDF rak n'eo ket karget penn-da-benn. -web_fonts_disabled=Diweredekaet eo an nodrezhoù web: n'haller ket arverañ an nodrezhoù PDF enframmet. - diff --git a/static/pdf.js/locale/brx/viewer.ftl b/static/pdf.js/locale/brx/viewer.ftl new file mode 100644 index 00000000..53ff72c5 --- /dev/null +++ b/static/pdf.js/locale/brx/viewer.ftl @@ -0,0 +1,218 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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 = ({ $pagesCount } नि { $pageNumber }) +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-presentation-mode-button = + .title = दिन्थिफुंनाय म'डआव थां +pdfjs-presentation-mode-button-label = दिन्थिफुंनाय म'ड +pdfjs-open-file-button = + .title = फाइलखौ खेव +pdfjs-open-file-button-label = खेव +pdfjs-print-button = + .title = साफाय +pdfjs-print-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 = घरि गिदिंनाय उल्था फार्से फिदिं + +## Document properties dialog + +pdfjs-document-properties-button = + .title = फोरमान बिलाइनि आखुथाय... +pdfjs-document-properties-button-label = फोरमान बिलाइनि आखुथाय... +pdfjs-document-properties-file-name = फाइलनि मुं: +pdfjs-document-properties-file-size = फाइलनि महर: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } बाइट) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } बाइट) +pdfjs-document-properties-title = बिमुं: +pdfjs-document-properties-author = लिरगिरि: +pdfjs-document-properties-subject = आयदा: +pdfjs-document-properties-keywords = गाहाय सोदोब: +pdfjs-document-properties-creation-date = सोरजिनाय अक्ट': +pdfjs-document-properties-modification-date = सुद्रायनाय अक्ट': +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = सोरजिग्रा: +pdfjs-document-properties-producer = PDF दिहुनग्रा: +pdfjs-document-properties-version = PDF बिसान: +pdfjs-document-properties-page-count = बिलाइनि हिसाब: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = प'र्ट्रेट +pdfjs-document-properties-page-size-orientation-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 = लायजाम + +## 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 }) + +## + +pdfjs-document-properties-linearized-yes = नंगौ +pdfjs-document-properties-linearized-no = नङा +pdfjs-document-properties-close-button = बन्द खालाम + +## Print + +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = नेवसि +pdfjs-printing-not-supported = सांग्रांथि: साफायनाया बे ब्राउजारजों आबुङै हेफाजाब होजाया। +pdfjs-printing-not-ready = सांग्रांथि: PDF खौ साफायनायनि थाखाय फुरायै ल'ड खालामाखै। + +## 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-thumbs-button = + .title = थामनेइलखौ दिन्थि +pdfjs-thumbs-button-label = थामनेइल +pdfjs-findbar-button = + .title = फोरमान बिलाइआव नागिरना दिहुन +pdfjs-findbar-button-label = नायगिरना दिहुन + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = बिलाइ { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = बिलाइ { $page } नि थामनेइल + +## Find panel button title and messages + +pdfjs-find-input = + .title = नायगिरना दिहुन + .placeholder = फोरमान बिलाइआव नागिरना दिहुन... +pdfjs-find-previous-button = + .title = बाथ्रा खोन्दोबनि सिगांनि नुजाथिनायखौ नागिर +pdfjs-find-previous-button-label = आगोलनि +pdfjs-find-next-button = + .title = बाथ्रा खोन्दोबनि उननि नुजाथिनायखौ नागिर +pdfjs-find-next-button-label = उननि +pdfjs-find-highlight-checkbox = गासैखौबो हाइलाइट खालाम +pdfjs-find-match-case-checkbox-label = गोरोबनाय केस +pdfjs-find-reached-top = थालो निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय +pdfjs-find-reached-bottom = बिजौ निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय +pdfjs-find-not-found = बाथ्रा खोन्दोब मोनाखै + +## 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 + + +## Loading indicator messages + +pdfjs-loading-error = PDF ल'ड खालामनाय समाव मोनसे गोरोन्थि जाबाय। +pdfjs-invalid-file-error = बाहायजायै एबा गाज्रि जानाय PDF फाइल +pdfjs-missing-file-error = गोमानाय PDF फाइल +pdfjs-unexpected-response-error = मिजिंथियै सार्भार फिननाय। +pdfjs-rendering-error = बिलाइखौ राव सोलायनाय समाव मोनसे गोरोन्थि जादों। + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } सोदोब बेखेवनाय] + +## Password + +pdfjs-password-label = बे PDF फाइलखौ खेवनो पासवार्ड हाबहो। +pdfjs-password-invalid = बाहायजायै पासवार्ड। अननानै फिन नाजा। +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = नेवसि +pdfjs-web-fonts-disabled = वेब फन्टखौ लोरबां खालामबाय: अरजाबहोनाय PDF फन्टखौ बाहायनो हायाखै। + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/brx/viewer.properties b/static/pdf.js/locale/brx/viewer.properties deleted file mode 100644 index 1c2fc07f..00000000 --- a/static/pdf.js/locale/brx/viewer.properties +++ /dev/null @@ -1,184 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=आगोलनि बिलाइ -previous_label=आगोलनि -next.title=उननि बिलाइ -next_label=उननि - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=बिलाइ -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages={{pagesCount}} नि -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pagesCount}} नि {{pageNumber}}) - -zoom_out.title=फिसायै जुम खालाम -zoom_out_label=फिसायै जुम खालाम -zoom_in.title=गेदेरै जुम खालाम -zoom_in_label=गेदेरै जुम खालाम -zoom.title=जुम खालाम -presentation_mode.title=दिन्थिफुंनाय म'डआव थां -presentation_mode_label=दिन्थिफुंनाय म'ड -open_file.title=फाइलखौ खेव -open_file_label=खेव -print.title=साफाय -print_label=साफाय - -# Secondary toolbar and context menu -tools.title=टुल -tools_label=टुल -first_page.title=गिबि बिलाइआव थां -first_page_label=गिबि बिलाइआव थां -last_page.title=जोबथा बिलाइआव थां -last_page_label=जोबथा बिलाइआव थां -page_rotate_cw.title=घरि गिदिंनाय फार्से फिदिं -page_rotate_cw_label=घरि गिदिंनाय फार्से फिदिं -page_rotate_ccw.title=घरि गिदिंनाय उल्था फार्से फिदिं -page_rotate_ccw_label=घरि गिदिंनाय उल्था फार्से फिदिं - - - - -# Document properties dialog box -document_properties.title=फोरमान बिलाइनि आखुथाय... -document_properties_label=फोरमान बिलाइनि आखुथाय... -document_properties_file_name=फाइलनि मुं: -document_properties_file_size=फाइलनि महर: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} बाइट) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} बाइट) -document_properties_title=बिमुं: -document_properties_author=लिरगिरि: -document_properties_subject=आयदा: -document_properties_keywords=गाहाय सोदोब: -document_properties_creation_date=सोरजिनाय अक्ट': -document_properties_modification_date=सुद्रायनाय अक्ट': -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=सोरजिग्रा: -document_properties_producer=PDF दिहुनग्रा: -document_properties_version=PDF बिसान: -document_properties_page_count=बिलाइनि हिसाब: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=प'र्ट्रेट -document_properties_page_size_orientation_landscape=लेण्डस्केप -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=लायजाम -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized_yes=नंगौ -document_properties_linearized_no=नङा -document_properties_close=बन्द खालाम - -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=नेवसि - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=टग्गल साइडबार -toggle_sidebar_label=टग्गल साइडबार -document_outline_label=फोरमान बिलाइ सिमा हांखो -attachments.title=नांजाब होनायखौ दिन्थि -attachments_label=नांजाब होनाय -thumbs.title=थामनेइलखौ दिन्थि -thumbs_label=थामनेइल -findbar.title=फोरमान बिलाइआव नागिरना दिहुन -findbar_label=नायगिरना दिहुन - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=बिलाइ {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=बिलाइ {{page}} नि थामनेइल - -# Find panel button title and messages -find_input.title=नायगिरना दिहुन -find_input.placeholder=फोरमान बिलाइआव नागिरना दिहुन... -find_previous.title=बाथ्रा खोन्दोबनि सिगांनि नुजाथिनायखौ नागिर -find_previous_label=आगोलनि -find_next.title=बाथ्रा खोन्दोबनि उननि नुजाथिनायखौ नागिर -find_next_label=उननि -find_highlight=गासैखौबो हाइलाइट खालाम -find_match_case_label=गोरोबनाय केस -find_reached_top=थालो निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय -find_reached_bottom=बिजौ निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_not_found=बाथ्रा खोन्दोब मोनाखै - -# Predefined zoom values -page_scale_width=बिलाइनि गुवार -page_scale_fit=बिलाइ गोरोबनाय -page_scale_auto=गावनोगाव जुम -page_scale_actual=थार महर -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=PDF ल'ड खालामनाय समाव मोनसे गोरोन्थि जाबाय। -invalid_file_error=बाहायजायै एबा गाज्रि जानाय PDF फाइल -missing_file_error=गोमानाय PDF फाइल -unexpected_response_error=मिजिंथियै सार्भार फिननाय। - -rendering_error=बिलाइखौ राव सोलायनाय समाव मोनसे गोरोन्थि जादों। - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} सोदोब बेखेवनाय] -password_label=बे PDF फाइलखौ खेवनो पासवार्ड हाबहो। -password_invalid=बाहायजायै पासवार्ड। अननानै फिन नाजा। -password_ok=OK -password_cancel=नेवसि - -printing_not_supported=सांग्रांथि: साफायनाया बे ब्राउजारजों आबुङै हेफाजाब होजाया। -printing_not_ready=सांग्रांथि: PDF खौ साफायनायनि थाखाय फुरायै ल'ड खालामाखै। -web_fonts_disabled=वेब फन्टखौ लोरबां खालामबाय: अरजाबहोनाय PDF फन्टखौ बाहायनो हायाखै। - diff --git a/static/pdf.js/locale/bs/viewer.ftl b/static/pdf.js/locale/bs/viewer.ftl new file mode 100644 index 00000000..39440424 --- /dev/null +++ b/static/pdf.js/locale/bs/viewer.ftl @@ -0,0 +1,223 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Prethodna strana +pdfjs-previous-button-label = Prethodna +pdfjs-next-button = + .title = Sljedeća strna +pdfjs-next-button-label = Sljedeća +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Strana +# 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 = od { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } od { $pagesCount }) +pdfjs-zoom-out-button = + .title = Umanji +pdfjs-zoom-out-button-label = Umanji +pdfjs-zoom-in-button = + .title = Uvećaj +pdfjs-zoom-in-button-label = Uvećaj +pdfjs-zoom-select = + .title = Uvećanje +pdfjs-presentation-mode-button = + .title = Prebaci se u prezentacijski režim +pdfjs-presentation-mode-button-label = Prezentacijski režim +pdfjs-open-file-button = + .title = Otvori fajl +pdfjs-open-file-button-label = Otvori +pdfjs-print-button = + .title = Štampaj +pdfjs-print-button-label = Štampaj + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Alati +pdfjs-tools-button-label = Alati +pdfjs-first-page-button = + .title = Idi na prvu stranu +pdfjs-first-page-button-label = Idi na prvu stranu +pdfjs-last-page-button = + .title = Idi na zadnju stranu +pdfjs-last-page-button-label = Idi na zadnju stranu +pdfjs-page-rotate-cw-button = + .title = Rotiraj u smjeru kazaljke na satu +pdfjs-page-rotate-cw-button-label = Rotiraj u smjeru kazaljke na satu +pdfjs-page-rotate-ccw-button = + .title = Rotiraj suprotno smjeru kazaljke na satu +pdfjs-page-rotate-ccw-button-label = Rotiraj suprotno smjeru kazaljke na satu +pdfjs-cursor-text-select-tool-button = + .title = Omogući alat za označavanje teksta +pdfjs-cursor-text-select-tool-button-label = Alat za označavanje teksta +pdfjs-cursor-hand-tool-button = + .title = Omogući ručni alat +pdfjs-cursor-hand-tool-button-label = Ručni alat + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Svojstva dokumenta... +pdfjs-document-properties-button-label = Svojstva dokumenta... +pdfjs-document-properties-file-name = Naziv fajla: +pdfjs-document-properties-file-size = Veličina fajla: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajta) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bajta) +pdfjs-document-properties-title = Naslov: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Predmet: +pdfjs-document-properties-keywords = Ključne riječi: +pdfjs-document-properties-creation-date = Datum kreiranja: +pdfjs-document-properties-modification-date = Datum promjene: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Kreator: +pdfjs-document-properties-producer = PDF stvaratelj: +pdfjs-document-properties-version = PDF verzija: +pdfjs-document-properties-page-count = Broj stranica: +pdfjs-document-properties-page-size = Veličina stranice: +pdfjs-document-properties-page-size-unit-inches = u +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = uspravno +pdfjs-document-properties-page-size-orientation-landscape = vodoravno +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 = Pismo +pdfjs-document-properties-page-size-name-legal = Pravni + +## 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 }) + +## + +pdfjs-document-properties-close-button = Zatvori + +## Print + +pdfjs-print-progress-message = Pripremam dokument za štampu… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Otkaži +pdfjs-printing-not-supported = Upozorenje: Štampanje nije u potpunosti podržano u ovom browseru. +pdfjs-printing-not-ready = Upozorenje: PDF nije u potpunosti učitan za štampanje. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Uključi/isključi bočnu traku +pdfjs-toggle-sidebar-button-label = Uključi/isključi bočnu traku +pdfjs-document-outline-button = + .title = Prikaži outline dokumenta (dvoklik za skupljanje/širenje svih stavki) +pdfjs-document-outline-button-label = Konture dokumenta +pdfjs-attachments-button = + .title = Prikaži priloge +pdfjs-attachments-button-label = Prilozi +pdfjs-thumbs-button = + .title = Prikaži thumbnailove +pdfjs-thumbs-button-label = Thumbnailovi +pdfjs-findbar-button = + .title = Pronađi u dokumentu +pdfjs-findbar-button-label = Pronađi + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Strana { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Thumbnail strane { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Pronađi + .placeholder = Pronađi u dokumentu… +pdfjs-find-previous-button = + .title = Pronađi prethodno pojavljivanje fraze +pdfjs-find-previous-button-label = Prethodno +pdfjs-find-next-button = + .title = Pronađi sljedeće pojavljivanje fraze +pdfjs-find-next-button-label = Sljedeće +pdfjs-find-highlight-checkbox = Označi sve +pdfjs-find-match-case-checkbox-label = Osjetljivost na karaktere +pdfjs-find-reached-top = Dostigao sam vrh dokumenta, nastavljam sa dna +pdfjs-find-reached-bottom = Dostigao sam kraj dokumenta, nastavljam sa vrha +pdfjs-find-not-found = Fraza nije pronađena + +## Predefined zoom values + +pdfjs-page-scale-width = Širina strane +pdfjs-page-scale-fit = Uklopi stranu +pdfjs-page-scale-auto = Automatsko uvećanje +pdfjs-page-scale-actual = Stvarna veličina +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = Došlo je do greške prilikom učitavanja PDF-a. +pdfjs-invalid-file-error = Neispravan ili oštećen PDF fajl. +pdfjs-missing-file-error = Nedostaje PDF fajl. +pdfjs-unexpected-response-error = Neočekivani odgovor servera. +pdfjs-rendering-error = Došlo je do greške prilikom renderiranja strane. + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } pribilješka] + +## Password + +pdfjs-password-label = Upišite lozinku da biste otvorili ovaj PDF fajl. +pdfjs-password-invalid = Pogrešna lozinka. Pokušajte ponovo. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Otkaži +pdfjs-web-fonts-disabled = Web fontovi su onemogućeni: nemoguće koristiti ubačene PDF fontove. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/bs/viewer.properties b/static/pdf.js/locale/bs/viewer.properties deleted file mode 100644 index 6285b4d5..00000000 --- a/static/pdf.js/locale/bs/viewer.properties +++ /dev/null @@ -1,173 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Prethodna strana -previous_label=Prethodna -next.title=Sljedeća strna -next_label=Sljedeća - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Strana -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=od {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} od {{pagesCount}}) - -zoom_out.title=Umanji -zoom_out_label=Umanji -zoom_in.title=Uvećaj -zoom_in_label=Uvećaj -zoom.title=Uvećanje -presentation_mode.title=Prebaci se u prezentacijski režim -presentation_mode_label=Prezentacijski režim -open_file.title=Otvori fajl -open_file_label=Otvori -print.title=Štampaj -print_label=Štampaj - -# Secondary toolbar and context menu -tools.title=Alati -tools_label=Alati -first_page.title=Idi na prvu stranu -first_page_label=Idi na prvu stranu -last_page.title=Idi na zadnju stranu -last_page_label=Idi na zadnju stranu -page_rotate_cw.title=Rotiraj u smjeru kazaljke na satu -page_rotate_cw_label=Rotiraj u smjeru kazaljke na satu -page_rotate_ccw.title=Rotiraj suprotno smjeru kazaljke na satu -page_rotate_ccw_label=Rotiraj suprotno smjeru kazaljke na satu - -cursor_text_select_tool.title=Omogući alat za označavanje teksta -cursor_text_select_tool_label=Alat za označavanje teksta -cursor_hand_tool.title=Omogući ručni alat -cursor_hand_tool_label=Ručni alat - -# Document properties dialog box -document_properties.title=Svojstva dokumenta... -document_properties_label=Svojstva dokumenta... -document_properties_file_name=Naziv fajla: -document_properties_file_size=Veličina fajla: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bajta) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bajta) -document_properties_title=Naslov: -document_properties_author=Autor: -document_properties_subject=Predmet: -document_properties_keywords=Ključne riječi: -document_properties_creation_date=Datum kreiranja: -document_properties_modification_date=Datum promjene: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Kreator: -document_properties_producer=PDF stvaratelj: -document_properties_version=PDF verzija: -document_properties_page_count=Broj stranica: -document_properties_page_size=Veličina stranice: -document_properties_page_size_unit_inches=u -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=uspravno -document_properties_page_size_orientation_landscape=vodoravno -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Pismo -document_properties_page_size_name_legal=Pravni -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -document_properties_close=Zatvori - -print_progress_message=Pripremam dokument za štampu… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Otkaži - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Uključi/isključi bočnu traku -toggle_sidebar_label=Uključi/isključi bočnu traku -document_outline.title=Prikaži outline dokumenta (dvoklik za skupljanje/širenje svih stavki) -document_outline_label=Konture dokumenta -attachments.title=Prikaži priloge -attachments_label=Prilozi -thumbs.title=Prikaži thumbnailove -thumbs_label=Thumbnailovi -findbar.title=Pronađi u dokumentu -findbar_label=Pronađi - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Strana {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Thumbnail strane {{page}} - -# Find panel button title and messages -find_input.title=Pronađi -find_input.placeholder=Pronađi u dokumentu… -find_previous.title=Pronađi prethodno pojavljivanje fraze -find_previous_label=Prethodno -find_next.title=Pronađi sljedeće pojavljivanje fraze -find_next_label=Sljedeće -find_highlight=Označi sve -find_match_case_label=Osjetljivost na karaktere -find_reached_top=Dostigao sam vrh dokumenta, nastavljam sa dna -find_reached_bottom=Dostigao sam kraj dokumenta, nastavljam sa vrha -find_not_found=Fraza nije pronađena - -# Predefined zoom values -page_scale_width=Širina strane -page_scale_fit=Uklopi stranu -page_scale_auto=Automatsko uvećanje -page_scale_actual=Stvarna veličina -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=Došlo je do greške prilikom učitavanja PDF-a. -invalid_file_error=Neispravan ili oštećen PDF fajl. -missing_file_error=Nedostaje PDF fajl. -unexpected_response_error=Neočekivani odgovor servera. - -rendering_error=Došlo je do greške prilikom renderiranja strane. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} pribilješka] -password_label=Upišite lozinku da biste otvorili ovaj PDF fajl. -password_invalid=Pogrešna lozinka. Pokušajte ponovo. -password_ok=OK -password_cancel=Otkaži - -printing_not_supported=Upozorenje: Štampanje nije u potpunosti podržano u ovom browseru. -printing_not_ready=Upozorenje: PDF nije u potpunosti učitan za štampanje. -web_fonts_disabled=Web fontovi su onemogućeni: nemoguće koristiti ubačene PDF fontove. - diff --git a/static/pdf.js/locale/ca/viewer.ftl b/static/pdf.js/locale/ca/viewer.ftl new file mode 100644 index 00000000..575dc5fb --- /dev/null +++ b/static/pdf.js/locale/ca/viewer.ftl @@ -0,0 +1,299 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Pàgina anterior +pdfjs-previous-button-label = Anterior +pdfjs-next-button = + .title = Pàgina següent +pdfjs-next-button-label = Següent +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Pàgina +# 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 = de { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount }) +pdfjs-zoom-out-button = + .title = Redueix +pdfjs-zoom-out-button-label = Redueix +pdfjs-zoom-in-button = + .title = Amplia +pdfjs-zoom-in-button-label = Amplia +pdfjs-zoom-select = + .title = Escala +pdfjs-presentation-mode-button = + .title = Canvia al mode de presentació +pdfjs-presentation-mode-button-label = Mode de presentació +pdfjs-open-file-button = + .title = Obre el fitxer +pdfjs-open-file-button-label = Obre +pdfjs-print-button = + .title = Imprimeix +pdfjs-print-button-label = Imprimeix +pdfjs-save-button = + .title = Desa +pdfjs-save-button-label = Desa +pdfjs-bookmark-button = + .title = Pàgina actual (mostra l'URL de la pàgina actual) +pdfjs-bookmark-button-label = Pàgina actual +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Obre en una aplicació +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Obre en una aplicació + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Eines +pdfjs-tools-button-label = Eines +pdfjs-first-page-button = + .title = Vés a la primera pàgina +pdfjs-first-page-button-label = Vés a la primera pàgina +pdfjs-last-page-button = + .title = Vés a l'última pàgina +pdfjs-last-page-button-label = Vés a l'última pàgina +pdfjs-page-rotate-cw-button = + .title = Gira cap a la dreta +pdfjs-page-rotate-cw-button-label = Gira cap a la dreta +pdfjs-page-rotate-ccw-button = + .title = Gira cap a l'esquerra +pdfjs-page-rotate-ccw-button-label = Gira cap a l'esquerra +pdfjs-cursor-text-select-tool-button = + .title = Habilita l'eina de selecció de text +pdfjs-cursor-text-select-tool-button-label = Eina de selecció de text +pdfjs-cursor-hand-tool-button = + .title = Habilita l'eina de mà +pdfjs-cursor-hand-tool-button-label = Eina de mà +pdfjs-scroll-page-button = + .title = Usa el desplaçament de pàgina +pdfjs-scroll-page-button-label = Desplaçament de pàgina +pdfjs-scroll-vertical-button = + .title = Utilitza el desplaçament vertical +pdfjs-scroll-vertical-button-label = Desplaçament vertical +pdfjs-scroll-horizontal-button = + .title = Utilitza el desplaçament horitzontal +pdfjs-scroll-horizontal-button-label = Desplaçament horitzontal +pdfjs-scroll-wrapped-button = + .title = Activa el desplaçament continu +pdfjs-scroll-wrapped-button-label = Desplaçament continu +pdfjs-spread-none-button = + .title = No agrupis les pàgines de dues en dues +pdfjs-spread-none-button-label = Una sola pàgina +pdfjs-spread-odd-button = + .title = Mostra dues pàgines començant per les pàgines de numeració senar +pdfjs-spread-odd-button-label = Doble pàgina (senar) +pdfjs-spread-even-button = + .title = Mostra dues pàgines començant per les pàgines de numeració parell +pdfjs-spread-even-button-label = Doble pàgina (parell) + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Propietats del document… +pdfjs-document-properties-button-label = Propietats del document… +pdfjs-document-properties-file-name = Nom del fitxer: +pdfjs-document-properties-file-size = Mida del fitxer: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Títol: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Assumpte: +pdfjs-document-properties-keywords = Paraules clau: +pdfjs-document-properties-creation-date = Data de creació: +pdfjs-document-properties-modification-date = Data de modificació: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Creador: +pdfjs-document-properties-producer = Generador de PDF: +pdfjs-document-properties-version = Versió de PDF: +pdfjs-document-properties-page-count = Nombre de pàgines: +pdfjs-document-properties-page-size = Mida de la pàgina: +pdfjs-document-properties-page-size-unit-inches = polzades +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = vertical +pdfjs-document-properties-page-size-orientation-landscape = apaïsat +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 = Carta +pdfjs-document-properties-page-size-name-legal = 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 = Vista web ràpida: +pdfjs-document-properties-linearized-yes = Sí +pdfjs-document-properties-linearized-no = No +pdfjs-document-properties-close-button = Tanca + +## Print + +pdfjs-print-progress-message = S'està preparant la impressió del document… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Cancel·la +pdfjs-printing-not-supported = Avís: la impressió no és plenament funcional en aquest navegador. +pdfjs-printing-not-ready = Atenció: el PDF no s'ha acabat de carregar per imprimir-lo. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Mostra/amaga la barra lateral +pdfjs-toggle-sidebar-notification-button = + .title = Mostra/amaga la barra lateral (el document conté un esquema, adjuncions o capes) +pdfjs-toggle-sidebar-button-label = Mostra/amaga la barra lateral +pdfjs-document-outline-button = + .title = Mostra l'esquema del document (doble clic per ampliar/reduir tots els elements) +pdfjs-document-outline-button-label = Esquema del document +pdfjs-attachments-button = + .title = Mostra les adjuncions +pdfjs-attachments-button-label = Adjuncions +pdfjs-layers-button = + .title = Mostra les capes (doble clic per restablir totes les capes al seu estat per defecte) +pdfjs-layers-button-label = Capes +pdfjs-thumbs-button = + .title = Mostra les miniatures +pdfjs-thumbs-button-label = Miniatures +pdfjs-current-outline-item-button = + .title = Cerca l'element d'esquema actual +pdfjs-current-outline-item-button-label = Element d'esquema actual +pdfjs-findbar-button = + .title = Cerca al document +pdfjs-findbar-button-label = Cerca +pdfjs-additional-layers = Capes addicionals + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Pàgina { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura de la pàgina { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Cerca + .placeholder = Cerca al document… +pdfjs-find-previous-button = + .title = Cerca l'anterior coincidència de l'expressió +pdfjs-find-previous-button-label = Anterior +pdfjs-find-next-button = + .title = Cerca la següent coincidència de l'expressió +pdfjs-find-next-button-label = Següent +pdfjs-find-highlight-checkbox = Ressalta-ho tot +pdfjs-find-match-case-checkbox-label = Distingeix entre majúscules i minúscules +pdfjs-find-match-diacritics-checkbox-label = Respecta els diacrítics +pdfjs-find-entire-word-checkbox-label = Paraules senceres +pdfjs-find-reached-top = S'ha arribat al principi del document, es continua pel final +pdfjs-find-reached-bottom = S'ha arribat al final del document, es continua pel principi +pdfjs-find-not-found = No s'ha trobat l'expressió + +## Predefined zoom values + +pdfjs-page-scale-width = Amplada de la pàgina +pdfjs-page-scale-fit = Ajusta la pàgina +pdfjs-page-scale-auto = Zoom automàtic +pdfjs-page-scale-actual = Mida real +# 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 = Pàgina { $page } + +## Loading indicator messages + +pdfjs-loading-error = S'ha produït un error en carregar el PDF. +pdfjs-invalid-file-error = El fitxer PDF no és vàlid o està malmès. +pdfjs-missing-file-error = Falta el fitxer PDF. +pdfjs-unexpected-response-error = Resposta inesperada del servidor. +pdfjs-rendering-error = S'ha produït un error mentre es renderitzava la pàgina. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Anotació { $type }] + +## Password + +pdfjs-password-label = Introduïu la contrasenya per obrir aquest fitxer PDF. +pdfjs-password-invalid = La contrasenya no és vàlida. Torneu-ho a provar. +pdfjs-password-ok-button = D'acord +pdfjs-password-cancel-button = Cancel·la +pdfjs-web-fonts-disabled = Els tipus de lletra web estan desactivats: no es poden utilitzar els tipus de lletra incrustats al PDF. + +## Editing + +pdfjs-editor-free-text-button = + .title = Text +pdfjs-editor-free-text-button-label = Text +pdfjs-editor-ink-button = + .title = Dibuixa +pdfjs-editor-ink-button-label = Dibuixa +# Editor Parameters +pdfjs-editor-free-text-color-input = Color +pdfjs-editor-free-text-size-input = Mida +pdfjs-editor-ink-color-input = Color +pdfjs-editor-ink-thickness-input = Gruix +pdfjs-editor-ink-opacity-input = Opacitat +pdfjs-free-text = + .aria-label = Editor de text +pdfjs-free-text-default-content = Escriviu… +pdfjs-ink = + .aria-label = Editor de dibuix +pdfjs-ink-canvas = + .aria-label = Imatge creada per l'usuari + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/ca/viewer.properties b/static/pdf.js/locale/ca/viewer.properties deleted file mode 100644 index a51aa44a..00000000 --- a/static/pdf.js/locale/ca/viewer.properties +++ /dev/null @@ -1,256 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Pàgina anterior -previous_label=Anterior -next.title=Pàgina següent -next_label=Següent - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Pàgina -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=de {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} de {{pagesCount}}) - -zoom_out.title=Redueix -zoom_out_label=Redueix -zoom_in.title=Amplia -zoom_in_label=Amplia -zoom.title=Escala -presentation_mode.title=Canvia al mode de presentació -presentation_mode_label=Mode de presentació -open_file.title=Obre el fitxer -open_file_label=Obre -print.title=Imprimeix -print_label=Imprimeix -save.title=Desa -save_label=Desa -bookmark1.title=Pàgina actual (mostra l'URL de la pàgina actual) -bookmark1_label=Pàgina actual -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Obre en una aplicació -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Obre en una aplicació - -# Secondary toolbar and context menu -tools.title=Eines -tools_label=Eines -first_page.title=Vés a la primera pàgina -first_page_label=Vés a la primera pàgina -last_page.title=Vés a l'última pàgina -last_page_label=Vés a l'última pàgina -page_rotate_cw.title=Gira cap a la dreta -page_rotate_cw_label=Gira cap a la dreta -page_rotate_ccw.title=Gira cap a l'esquerra -page_rotate_ccw_label=Gira cap a l'esquerra - -cursor_text_select_tool.title=Habilita l'eina de selecció de text -cursor_text_select_tool_label=Eina de selecció de text -cursor_hand_tool.title=Habilita l'eina de mà -cursor_hand_tool_label=Eina de mà - -scroll_page.title=Usa el desplaçament de pàgina -scroll_page_label=Desplaçament de pàgina -scroll_vertical.title=Utilitza el desplaçament vertical -scroll_vertical_label=Desplaçament vertical -scroll_horizontal.title=Utilitza el desplaçament horitzontal -scroll_horizontal_label=Desplaçament horitzontal -scroll_wrapped.title=Activa el desplaçament continu -scroll_wrapped_label=Desplaçament continu - -spread_none.title=No agrupis les pàgines de dues en dues -spread_none_label=Una sola pàgina -spread_odd.title=Mostra dues pàgines començant per les pàgines de numeració senar -spread_odd_label=Doble pàgina (senar) -spread_even.title=Mostra dues pàgines començant per les pàgines de numeració parell -spread_even_label=Doble pàgina (parell) - -# Document properties dialog box -document_properties.title=Propietats del document… -document_properties_label=Propietats del document… -document_properties_file_name=Nom del fitxer: -document_properties_file_size=Mida del fitxer: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Títol: -document_properties_author=Autor: -document_properties_subject=Assumpte: -document_properties_keywords=Paraules clau: -document_properties_creation_date=Data de creació: -document_properties_modification_date=Data de modificació: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Creador: -document_properties_producer=Generador de PDF: -document_properties_version=Versió de PDF: -document_properties_page_count=Nombre de pàgines: -document_properties_page_size=Mida de la pàgina: -document_properties_page_size_unit_inches=polzades -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=vertical -document_properties_page_size_orientation_landscape=apaïsat -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Carta -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Vista web ràpida: -document_properties_linearized_yes=Sí -document_properties_linearized_no=No -document_properties_close=Tanca - -print_progress_message=S'està preparant la impressió del document… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Cancel·la - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Mostra/amaga la barra lateral -toggle_sidebar_notification2.title=Mostra/amaga la barra lateral (el document conté un esquema, adjuncions o capes) -toggle_sidebar_label=Mostra/amaga la barra lateral -document_outline.title=Mostra l'esquema del document (doble clic per ampliar/reduir tots els elements) -document_outline_label=Esquema del document -attachments.title=Mostra les adjuncions -attachments_label=Adjuncions -layers.title=Mostra les capes (doble clic per restablir totes les capes al seu estat per defecte) -layers_label=Capes -thumbs.title=Mostra les miniatures -thumbs_label=Miniatures -current_outline_item.title=Cerca l'element d'esquema actual -current_outline_item_label=Element d'esquema actual -findbar.title=Cerca al document -findbar_label=Cerca - -additional_layers=Capes addicionals -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Pàgina {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Pàgina {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura de la pàgina {{page}} - -# Find panel button title and messages -find_input.title=Cerca -find_input.placeholder=Cerca al document… -find_previous.title=Cerca l'anterior coincidència de l'expressió -find_previous_label=Anterior -find_next.title=Cerca la següent coincidència de l'expressió -find_next_label=Següent -find_highlight=Ressalta-ho tot -find_match_case_label=Distingeix entre majúscules i minúscules -find_match_diacritics_label=Respecta els diacrítics -find_entire_word_label=Paraules senceres -find_reached_top=S'ha arribat al principi del document, es continua pel final -find_reached_bottom=S'ha arribat al final del document, es continua pel principi -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} de {{total}} coincidència -find_match_count[two]={{current}} de {{total}} coincidències -find_match_count[few]={{current}} de {{total}} coincidències -find_match_count[many]={{current}} de {{total}} coincidències -find_match_count[other]={{current}} de {{total}} coincidències -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Més de {{limit}} coincidències -find_match_count_limit[one]=Més d'{{limit}} coincidència -find_match_count_limit[two]=Més de {{limit}} coincidències -find_match_count_limit[few]=Més de {{limit}} coincidències -find_match_count_limit[many]=Més de {{limit}} coincidències -find_match_count_limit[other]=Més de {{limit}} coincidències -find_not_found=No s'ha trobat l'expressió - -# Predefined zoom values -page_scale_width=Amplada de la pàgina -page_scale_fit=Ajusta la pàgina -page_scale_auto=Zoom automàtic -page_scale_actual=Mida real -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=S'ha produït un error en carregar el PDF. -invalid_file_error=El fitxer PDF no és vàlid o està malmès. -missing_file_error=Falta el fitxer PDF. -unexpected_response_error=Resposta inesperada del servidor. -rendering_error=S'ha produït un error mentre es renderitzava la pàgina. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Anotació {{type}}] -password_label=Introduïu la contrasenya per obrir aquest fitxer PDF. -password_invalid=La contrasenya no és vàlida. Torneu-ho a provar. -password_ok=D'acord -password_cancel=Cancel·la - -printing_not_supported=Avís: la impressió no és plenament funcional en aquest navegador. -printing_not_ready=Atenció: el PDF no s'ha acabat de carregar per imprimir-lo. -web_fonts_disabled=Els tipus de lletra web estan desactivats: no es poden utilitzar els tipus de lletra incrustats al PDF. - -# Editor -editor_free_text2.title=Text -editor_free_text2_label=Text -editor_ink2.title=Dibuixa -editor_ink2_label=Dibuixa - -free_text2_default_content=Escriviu… - -# Editor Parameters -editor_free_text_color=Color -editor_free_text_size=Mida -editor_ink_color=Color -editor_ink_thickness=Gruix -editor_ink_opacity=Opacitat - -# Editor aria -editor_free_text2_aria_label=Editor de text -editor_ink2_aria_label=Editor de dibuix -editor_ink_canvas_aria_label=Imatge creada per l'usuari diff --git a/static/pdf.js/locale/cak/viewer.ftl b/static/pdf.js/locale/cak/viewer.ftl new file mode 100644 index 00000000..f40c1e92 --- /dev/null +++ b/static/pdf.js/locale/cak/viewer.ftl @@ -0,0 +1,291 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Jun kan ruxaq +pdfjs-previous-button-label = Jun kan +pdfjs-next-button = + .title = Jun chik ruxaq +pdfjs-next-button-label = Jun chik +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Ruxaq +# 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 = richin { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } richin { $pagesCount }) +pdfjs-zoom-out-button = + .title = Tich'utinirisäx +pdfjs-zoom-out-button-label = Tich'utinirisäx +pdfjs-zoom-in-button = + .title = Tinimirisäx +pdfjs-zoom-in-button-label = Tinimirisäx +pdfjs-zoom-select = + .title = Sum +pdfjs-presentation-mode-button = + .title = Tijal ri rub'anikil niwachin +pdfjs-presentation-mode-button-label = Pa rub'eyal niwachin +pdfjs-open-file-button = + .title = Tijaq Yakb'äl +pdfjs-open-file-button-label = Tijaq +pdfjs-print-button = + .title = Titz'ajb'äx +pdfjs-print-button-label = Titz'ajb'äx +pdfjs-save-button = + .title = Tiyak +pdfjs-save-button-label = Tiyak +pdfjs-bookmark-button-label = Ruxaq k'o wakami + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Samajib'äl +pdfjs-tools-button-label = Samajib'äl +pdfjs-first-page-button = + .title = Tib'e pa nab'ey ruxaq +pdfjs-first-page-button-label = Tib'e pa nab'ey ruxaq +pdfjs-last-page-button = + .title = Tib'e pa ruk'isib'äl ruxaq +pdfjs-last-page-button-label = Tib'e pa ruk'isib'äl ruxaq +pdfjs-page-rotate-cw-button = + .title = Tisutïx pan ajkiq'a' +pdfjs-page-rotate-cw-button-label = Tisutïx pan ajkiq'a' +pdfjs-page-rotate-ccw-button = + .title = Tisutïx pan ajxokon +pdfjs-page-rotate-ccw-button-label = Tisutïx pan ajxokon +pdfjs-cursor-text-select-tool-button = + .title = Titzij ri rusamajib'al Rucha'ik Rucholajem Tzij +pdfjs-cursor-text-select-tool-button-label = Rusamajib'al Rucha'ik Rucholajem Tzij +pdfjs-cursor-hand-tool-button = + .title = Titzij ri q'ab'aj samajib'äl +pdfjs-cursor-hand-tool-button-label = Q'ab'aj Samajib'äl +pdfjs-scroll-page-button = + .title = Tokisäx Ruxaq Q'axanem +pdfjs-scroll-page-button-label = Ruxaq Q'axanem +pdfjs-scroll-vertical-button = + .title = Tokisäx Pa'äl Q'axanem +pdfjs-scroll-vertical-button-label = Pa'äl Q'axanem +pdfjs-scroll-horizontal-button = + .title = Tokisäx Kotz'öl Q'axanem +pdfjs-scroll-horizontal-button-label = Kotz'öl Q'axanem +pdfjs-scroll-wrapped-button = + .title = Tokisäx Tzub'aj Q'axanem +pdfjs-scroll-wrapped-button-label = Tzub'aj Q'axanem +pdfjs-spread-none-button = + .title = Man ketun taq ruxaq pa rub'eyal wuj +pdfjs-spread-none-button-label = Majun Rub'eyal +pdfjs-spread-odd-button = + .title = Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun man k'ulaj ta rajilab'al +pdfjs-spread-odd-button-label = Man K'ulaj Ta Rub'eyal +pdfjs-spread-even-button = + .title = Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun k'ulaj rajilab'al +pdfjs-spread-even-button-label = K'ulaj Rub'eyal + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Taq richinil wuj… +pdfjs-document-properties-button-label = Taq richinil wuj… +pdfjs-document-properties-file-name = Rub'i' yakb'äl: +pdfjs-document-properties-file-size = Runimilem yakb'äl: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = B'i'aj: +pdfjs-document-properties-author = B'anel: +pdfjs-document-properties-subject = Taqikil: +pdfjs-document-properties-keywords = Kixe'el taq tzij: +pdfjs-document-properties-creation-date = Ruq'ijul xtz'uk: +pdfjs-document-properties-modification-date = Ruq'ijul xjalwachïx: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Q'inonel: +pdfjs-document-properties-producer = PDF b'anöy: +pdfjs-document-properties-version = PDF ruwäch: +pdfjs-document-properties-page-count = Jarupe' ruxaq: +pdfjs-document-properties-page-size = Runimilem ri Ruxaq: +pdfjs-document-properties-page-size-unit-inches = pa +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = rupalem +pdfjs-document-properties-page-size-orientation-landscape = rukotz'olem +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 = Loman wuj +pdfjs-document-properties-page-size-name-legal = Taqanel tzijol + +## 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 = Anin Rutz'etik Ajk'amaya'l: +pdfjs-document-properties-linearized-yes = Ja' +pdfjs-document-properties-linearized-no = Mani +pdfjs-document-properties-close-button = Titz'apïx + +## Print + +pdfjs-print-progress-message = Ruchojmirisaxik wuj richin nitz'ajb'äx… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Tiq'at +pdfjs-printing-not-supported = Rutzijol k'ayewal: Ri rutz'ajb'axik man koch'el ta ronojel pa re okik'amaya'l re'. +pdfjs-printing-not-ready = Rutzijol k'ayewal: Ri PDF man xusamajij ta ronojel richin nitz'ajb'äx. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Tijal ri ajxikin kajtz'ik +pdfjs-toggle-sidebar-notification-button = + .title = Tik'ex ri ajxikin yuqkajtz'ik (ri wuj eruk'wan taq ruchi'/taqo/kuchuj) +pdfjs-toggle-sidebar-button-label = Tijal ri ajxikin kajtz'ik +pdfjs-document-outline-button = + .title = Tik'ut pe ruch'akulal wuj (kamul-pitz'oj richin nirik'/nich'utinirisäx ronojel ruch'akulal) +pdfjs-document-outline-button-label = Ruch'akulal wuj +pdfjs-attachments-button = + .title = Kek'ut pe ri taq taqoj +pdfjs-attachments-button-label = Taq taqoj +pdfjs-layers-button = + .title = Kek'ut taq Kuchuj (ka'i'-pitz' richin yetzolïx ronojel ri taq kuchuj e k'o wi) +pdfjs-layers-button-label = Taq kuchuj +pdfjs-thumbs-button = + .title = Kek'ut pe taq ch'utiq +pdfjs-thumbs-button-label = Koköj +pdfjs-current-outline-item-button = + .title = Kekanöx Taq Ch'akulal Kik'wan Chib'äl +pdfjs-current-outline-item-button-label = Taq Ch'akulal Kik'wan Chib'äl +pdfjs-findbar-button = + .title = Tikanöx chupam ri wuj +pdfjs-findbar-button-label = Tikanöx +pdfjs-additional-layers = Tz'aqat ta Kuchuj + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Ruxaq { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Ruch'utinirisaxik ruxaq { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Tikanöx + .placeholder = Tikanöx pa wuj… +pdfjs-find-previous-button = + .title = Tib'an b'enam pa ri jun kan q'aptzij xilitäj +pdfjs-find-previous-button-label = Jun kan +pdfjs-find-next-button = + .title = Tib'e pa ri jun chik pajtzij xilitäj +pdfjs-find-next-button-label = Jun chik +pdfjs-find-highlight-checkbox = Tiya' retal ronojel +pdfjs-find-match-case-checkbox-label = Tuk'äm ri' kik'in taq nimatz'ib' chuqa' taq ch'utitz'ib' +pdfjs-find-match-diacritics-checkbox-label = Tiya' Kikojol Tz'aqat taq Tz'ib' +pdfjs-find-entire-word-checkbox-label = Tz'aqät taq tzij +pdfjs-find-reached-top = Xb'eq'i' ri rutikirib'al wuj, xtikanöx k'a pa ruk'isib'äl +pdfjs-find-reached-bottom = Xb'eq'i' ri ruk'isib'äl wuj, xtikanöx pa rutikirib'al +pdfjs-find-not-found = Man xilitäj ta ri pajtzij + +## Predefined zoom values + +pdfjs-page-scale-width = Ruwa ruxaq +pdfjs-page-scale-fit = Tinuk' ruxaq +pdfjs-page-scale-auto = Yonil chi nimilem +pdfjs-page-scale-actual = Runimilem Wakami +# 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 = Ruxaq { $page } + +## Loading indicator messages + +pdfjs-loading-error = Xk'ulwachitäj jun sach'oj toq xnuk'ux ri PDF . +pdfjs-invalid-file-error = Man oke ta o yujtajinäq ri PDF yakb'äl. +pdfjs-missing-file-error = Man xilitäj ta ri PDF yakb'äl. +pdfjs-unexpected-response-error = Man oyob'en ta tz'olin rutzij ruk'u'x samaj. +pdfjs-rendering-error = Xk'ulwachitäj jun sachoj toq ninuk'wachij ri ruxaq. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Tz'ib'anïk] + +## Password + +pdfjs-password-label = Tatz'ib'aj ri ewan tzij richin najäq re yakb'äl re' pa PDF. +pdfjs-password-invalid = Man okel ta ri ewan tzij: Tatojtob'ej chik. +pdfjs-password-ok-button = Ütz +pdfjs-password-cancel-button = Tiq'at +pdfjs-web-fonts-disabled = E chupül ri taq ajk'amaya'l tz'ib': man tikirel ta nokisäx ri taq tz'ib' PDF pa ch'ikenïk + +## Editing + +pdfjs-editor-free-text-button = + .title = Rucholajem tz'ib' +pdfjs-editor-free-text-button-label = Rucholajem tz'ib' +pdfjs-editor-ink-button = + .title = Tiwachib'ëx +pdfjs-editor-ink-button-label = Tiwachib'ëx +# Editor Parameters +pdfjs-editor-free-text-color-input = B'onil +pdfjs-editor-free-text-size-input = Nimilem +pdfjs-editor-ink-color-input = B'onil +pdfjs-editor-ink-thickness-input = Rupimil +pdfjs-editor-ink-opacity-input = Q'equmal +pdfjs-free-text = + .aria-label = Nuk'unel tz'ib'atzij +pdfjs-free-text-default-content = Titikitisäx rutz'ib'axik… +pdfjs-ink = + .aria-label = Nuk'unel wachib'äl +pdfjs-ink-canvas = + .aria-label = Wachib'äl nuk'un ruma okisaxel + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/cak/viewer.properties b/static/pdf.js/locale/cak/viewer.properties deleted file mode 100644 index e504e07b..00000000 --- a/static/pdf.js/locale/cak/viewer.properties +++ /dev/null @@ -1,253 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Jun kan ruxaq -previous_label=Jun kan -next.title=Jun chik ruxaq -next_label=Jun chik - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Ruxaq -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=richin {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} richin {{pagesCount}}) - -zoom_out.title=Tich'utinirisäx -zoom_out_label=Tich'utinirisäx -zoom_in.title=Tinimirisäx -zoom_in_label=Tinimirisäx -zoom.title=Sum -presentation_mode.title=Tijal ri rub'anikil niwachin -presentation_mode_label=Pa rub'eyal niwachin -open_file.title=Tijaq Yakb'äl -open_file_label=Tijaq -print.title=Titz'ajb'äx -print_label=Titz'ajb'äx - -save.title=Tiyak -save_label=Tiyak -bookmark1_label=Ruxaq k'o wakami - -# Secondary toolbar and context menu -tools.title=Samajib'äl -tools_label=Samajib'äl -first_page.title=Tib'e pa nab'ey ruxaq -first_page_label=Tib'e pa nab'ey ruxaq -last_page.title=Tib'e pa ruk'isib'äl ruxaq -last_page_label=Tib'e pa ruk'isib'äl ruxaq -page_rotate_cw.title=Tisutïx pan ajkiq'a' -page_rotate_cw_label=Tisutïx pan ajkiq'a' -page_rotate_ccw.title=Tisutïx pan ajxokon -page_rotate_ccw_label=Tisutïx pan ajxokon - -cursor_text_select_tool.title=Titzij ri rusamajib'al Rucha'ik Rucholajem Tzij -cursor_text_select_tool_label=Rusamajib'al Rucha'ik Rucholajem Tzij -cursor_hand_tool.title=Titzij ri q'ab'aj samajib'äl -cursor_hand_tool_label=Q'ab'aj Samajib'äl - -scroll_page.title=Tokisäx Ruxaq Q'axanem -scroll_page_label=Ruxaq Q'axanem -scroll_vertical.title=Tokisäx Pa'äl Q'axanem -scroll_vertical_label=Pa'äl Q'axanem -scroll_horizontal.title=Tokisäx Kotz'öl Q'axanem -scroll_horizontal_label=Kotz'öl Q'axanem -scroll_wrapped.title=Tokisäx Tzub'aj Q'axanem -scroll_wrapped_label=Tzub'aj Q'axanem - -spread_none.title=Man ketun taq ruxaq pa rub'eyal wuj -spread_none_label=Majun Rub'eyal -spread_odd.title=Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun man k'ulaj ta rajilab'al -spread_odd_label=Man K'ulaj Ta Rub'eyal -spread_even.title=Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun k'ulaj rajilab'al -spread_even_label=K'ulaj Rub'eyal - -# Document properties dialog box -document_properties.title=Taq richinil wuj… -document_properties_label=Taq richinil wuj… -document_properties_file_name=Rub'i' yakb'äl: -document_properties_file_size=Runimilem yakb'äl: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=B'i'aj: -document_properties_author=B'anel: -document_properties_subject=Taqikil: -document_properties_keywords=Kixe'el taq tzij: -document_properties_creation_date=Ruq'ijul xtz'uk: -document_properties_modification_date=Ruq'ijul xjalwachïx: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Q'inonel: -document_properties_producer=PDF b'anöy: -document_properties_version=PDF ruwäch: -document_properties_page_count=Jarupe' ruxaq: -document_properties_page_size=Runimilem ri Ruxaq: -document_properties_page_size_unit_inches=pa -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=rupalem -document_properties_page_size_orientation_landscape=rukotz'olem -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Loman wuj -document_properties_page_size_name_legal=Taqanel tzijol -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Anin Rutz'etik Ajk'amaya'l: -document_properties_linearized_yes=Ja' -document_properties_linearized_no=Mani -document_properties_close=Titz'apïx - -print_progress_message=Ruchojmirisaxik wuj richin nitz'ajb'äx… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Tiq'at - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Tijal ri ajxikin kajtz'ik -toggle_sidebar_notification2.title=Tik'ex ri ajxikin yuqkajtz'ik (ri wuj eruk'wan taq ruchi'/taqo/kuchuj) -toggle_sidebar_label=Tijal ri ajxikin kajtz'ik -document_outline.title=Tik'ut pe ruch'akulal wuj (kamul-pitz'oj richin nirik'/nich'utinirisäx ronojel ruch'akulal) -document_outline_label=Ruch'akulal wuj -attachments.title=Kek'ut pe ri taq taqoj -attachments_label=Taq taqoj -layers.title=Kek'ut taq Kuchuj (ka'i'-pitz' richin yetzolïx ronojel ri taq kuchuj e k'o wi) -layers_label=Taq kuchuj -thumbs.title=Kek'ut pe taq ch'utiq -thumbs_label=Koköj -current_outline_item.title=Kekanöx Taq Ch'akulal Kik'wan Chib'äl -current_outline_item_label=Taq Ch'akulal Kik'wan Chib'äl -findbar.title=Tikanöx chupam ri wuj -findbar_label=Tikanöx - -additional_layers=Tz'aqat ta Kuchuj -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Ruxaq {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Ruxaq {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Ruch'utinirisaxik ruxaq {{page}} - -# Find panel button title and messages -find_input.title=Tikanöx -find_input.placeholder=Tikanöx pa wuj… -find_previous.title=Tib'an b'enam pa ri jun kan q'aptzij xilitäj -find_previous_label=Jun kan -find_next.title=Tib'e pa ri jun chik pajtzij xilitäj -find_next_label=Jun chik -find_highlight=Tiya' retal ronojel -find_match_case_label=Tuk'äm ri' kik'in taq nimatz'ib' chuqa' taq ch'utitz'ib' -find_match_diacritics_label=Tiya' Kikojol Tz'aqat taq Tz'ib' -find_entire_word_label=Tz'aqät taq tzij -find_reached_top=Xb'eq'i' ri rutikirib'al wuj, xtikanöx k'a pa ruk'isib'äl -find_reached_bottom=Xb'eq'i' ri ruk'isib'äl wuj, xtikanöx pa rutikirib'al -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} richin {{total}} nuk'äm ri' -find_match_count[two]={{current}} richin {{total}} nikik'äm ki' -find_match_count[few]={{current}} richin {{total}} nikik'äm ki' -find_match_count[many]={{current}} richin {{total}} nikik'äm ki' -find_match_count[other]={{current}} richin {{total}} nikik'äm ki' -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=K'ïy chi re {{limit}} nikik'äm ki' -find_match_count_limit[one]=K'ïy chi re {{limit}} nuk'äm ri' -find_match_count_limit[two]=K'ïy chi re {{limit}} nikik'äm ki' -find_match_count_limit[few]=K'ïy chi re {{limit}} nikik'äm ki' -find_match_count_limit[many]=K'ïy chi re {{limit}} nikik'äm ki' -find_match_count_limit[other]=K'ïy chi re {{limit}} nikik'äm ki' -find_not_found=Man xilitäj ta ri pajtzij - -# Predefined zoom values -page_scale_width=Ruwa ruxaq -page_scale_fit=Tinuk' ruxaq -page_scale_auto=Yonil chi nimilem -page_scale_actual=Runimilem Wakami -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=\u0020Xk'ulwachitäj jun sach'oj toq xnuk'ux ri PDF . -invalid_file_error=Man oke ta o yujtajinäq ri PDF yakb'äl. -missing_file_error=Man xilitäj ta ri PDF yakb'äl. -unexpected_response_error=Man oyob'en ta tz'olin rutzij ruk'u'x samaj. - -rendering_error=Xk'ulwachitäj jun sachoj toq ninuk'wachij ri ruxaq. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Tz'ib'anïk] -password_label=Tatz'ib'aj ri ewan tzij richin najäq re yakb'äl re' pa PDF. -password_invalid=Man okel ta ri ewan tzij: Tatojtob'ej chik. -password_ok=Ütz -password_cancel=Tiq'at - -printing_not_supported=Rutzijol k'ayewal: Ri rutz'ajb'axik man koch'el ta ronojel pa re okik'amaya'l re'. -printing_not_ready=Rutzijol k'ayewal: Ri PDF man xusamajij ta ronojel richin nitz'ajb'äx. -web_fonts_disabled=E chupül ri taq ajk'amaya'l tz'ib': man tikirel ta nokisäx ri taq tz'ib' PDF pa ch'ikenïk - -# Editor -editor_free_text2.title=Rucholajem tz'ib' -editor_free_text2_label=Rucholajem tz'ib' -editor_ink2.title=Tiwachib'ëx -editor_ink2_label=Tiwachib'ëx - -free_text2_default_content=Titikitisäx rutz'ib'axik… - -# Editor Parameters -editor_free_text_color=B'onil -editor_free_text_size=Nimilem -editor_ink_color=B'onil -editor_ink_thickness=Rupimil -editor_ink_opacity=Q'equmal - -# Editor aria -editor_free_text2_aria_label=Nuk'unel tz'ib'atzij -editor_ink2_aria_label=Nuk'unel wachib'äl -editor_ink_canvas_aria_label=Wachib'äl nuk'un ruma okisaxel diff --git a/static/pdf.js/locale/ckb/viewer.ftl b/static/pdf.js/locale/ckb/viewer.ftl new file mode 100644 index 00000000..ae87335b --- /dev/null +++ b/static/pdf.js/locale/ckb/viewer.ftl @@ -0,0 +1,242 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = گۆڕین بۆ دۆخی پێشکەشکردن +pdfjs-presentation-mode-button-label = دۆخی پێشکەشکردن +pdfjs-open-file-button = + .title = پەڕگە بکەرەوە +pdfjs-open-file-button-label = کردنەوە +pdfjs-print-button = + .title = چاپکردن +pdfjs-print-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-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 = قەبارەی پەڕگە: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } کب ({ $size_b } بایت) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } مب ({ $size_b } بایت) +pdfjs-document-properties-title = سەردێڕ: +pdfjs-document-properties-author = نووسەر +pdfjs-document-properties-subject = بابەت: +pdfjs-document-properties-keywords = کلیلەوشە: +pdfjs-document-properties-creation-date = بەرواری درووستکردن: +pdfjs-document-properties-modification-date = بەرواری دەستکاریکردن: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = پۆرترەیت(درێژ) +pdfjs-document-properties-page-size-orientation-landscape = پانیی +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = نامە +pdfjs-document-properties-page-size-name-legal = یاسایی + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = پیشاندانی وێبی خێرا: +pdfjs-document-properties-linearized-yes = بەڵێ +pdfjs-document-properties-linearized-no = نەخێر +pdfjs-document-properties-close-button = داخستن + +## Print + +pdfjs-print-progress-message = بەڵگەنامە ئامادەدەکرێت بۆ چاپکردن... +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = پاشگەزبوونەوە +pdfjs-printing-not-supported = ئاگاداربە: چاپکردن بە تەواوی پشتگیر ناکرێت لەم وێبگەڕە. +pdfjs-printing-not-ready = ئاگاداربە: PDF بە تەواوی بارنەبووە بۆ چاپکردن. + +## 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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = وێنۆچکەی پەڕەی { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = دۆزینەوە + .placeholder = لە بەڵگەنامە بگەرێ... +pdfjs-find-previous-button = + .title = هەبوونی پێشوو بدۆزرەوە لە ڕستەکەدا +pdfjs-find-previous-button-label = پێشوو +pdfjs-find-next-button = + .title = هەبوونی داهاتوو بدۆزەرەوە لە ڕستەکەدا +pdfjs-find-next-button-label = دوواتر +pdfjs-find-highlight-checkbox = هەمووی نیشانە بکە +pdfjs-find-match-case-checkbox-label = دۆخی لەیەکچوون +pdfjs-find-entire-word-checkbox-label = هەموو وشەکان +pdfjs-find-reached-top = گەشتیتە سەرەوەی بەڵگەنامە، لە خوارەوە دەستت پێکرد +pdfjs-find-reached-bottom = گەشتیتە کۆتایی بەڵگەنامە. لەسەرەوە دەستت پێکرد +pdfjs-find-not-found = نووسین نەدۆزرایەوە + +## 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 + + +## Loading indicator messages + +pdfjs-loading-error = هەڵەیەک ڕوویدا لە کاتی بارکردنی PDF. +pdfjs-invalid-file-error = پەڕگەی pdf تێکچووە یان نەگونجاوە. +pdfjs-missing-file-error = پەڕگەی pdf بوونی نیە. +pdfjs-unexpected-response-error = وەڵامی ڕاژەخوازی نەخوازراو. +pdfjs-rendering-error = هەڵەیەک ڕوویدا لە کاتی پوختەکردنی (ڕێندەر) پەڕە. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } سەرنج] + +## Password + +pdfjs-password-label = وشەی تێپەڕ بنووسە بۆ کردنەوەی پەڕگەی pdf. +pdfjs-password-invalid = وشەی تێپەڕ هەڵەیە. تکایە دووبارە هەوڵ بدەرەوە. +pdfjs-password-ok-button = باشە +pdfjs-password-cancel-button = پاشگەزبوونەوە +pdfjs-web-fonts-disabled = جۆرەپیتی وێب ناچالاکە: نەتوانی جۆرەپیتی تێخراوی ناو pdfـەکە بەکاربێت. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/ckb/viewer.properties b/static/pdf.js/locale/ckb/viewer.properties deleted file mode 100644 index af4a3321..00000000 --- a/static/pdf.js/locale/ckb/viewer.properties +++ /dev/null @@ -1,213 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=پەڕەی پێشوو -previous_label=پێشوو -next.title=پەڕەی دوواتر -next_label=دوواتر - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=پەرە -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=لە {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} لە {{pagesCount}}) - -zoom_out.title=ڕۆچوونی -zoom_out_label=ڕۆچوونی -zoom_in.title=هێنانەپێش -zoom_in_label=هێنانەپێش -zoom.title=زووم -presentation_mode.title=گۆڕین بۆ دۆخی پێشکەشکردن -presentation_mode_label=دۆخی پێشکەشکردن -open_file.title=پەڕگە بکەرەوە -open_file_label=کردنەوە -print.title=چاپکردن -print_label=چاپکردن - -# Secondary toolbar and context menu -tools.title=ئامرازەکان -tools_label=ئامرازەکان -first_page.title=برۆ بۆ یەکەم پەڕە -first_page_label=بڕۆ بۆ یەکەم پەڕە -last_page.title=بڕۆ بۆ کۆتا پەڕە -last_page_label=بڕۆ بۆ کۆتا پەڕە -page_rotate_cw.title=ئاڕاستەی میلی کاتژمێر -page_rotate_cw_label=ئاڕاستەی میلی کاتژمێر -page_rotate_ccw.title=پێچەوانەی میلی کاتژمێر -page_rotate_ccw_label=پێچەوانەی میلی کاتژمێر - -cursor_text_select_tool.title=توڵامرازی نیشانکەری دەق چالاک بکە -cursor_text_select_tool_label=توڵامرازی نیشانکەری دەق -cursor_hand_tool.title=توڵامرازی دەستی چالاک بکە -cursor_hand_tool_label=توڵامرازی دەستی - -scroll_vertical.title=ناردنی ئەستوونی بەکاربێنە -scroll_vertical_label=ناردنی ئەستوونی -scroll_horizontal.title=ناردنی ئاسۆیی بەکاربێنە -scroll_horizontal_label=ناردنی ئاسۆیی -scroll_wrapped.title=ناردنی لوولکراو بەکاربێنە -scroll_wrapped_label=ناردنی لوولکراو - - -# Document properties dialog box -document_properties.title=تایبەتمەندییەکانی بەڵگەنامە... -document_properties_label=تایبەتمەندییەکانی بەڵگەنامە... -document_properties_file_name=ناوی پەڕگە: -document_properties_file_size=قەبارەی پەڕگە: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} کب ({{size_b}} بایت) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} مب ({{size_b}} بایت) -document_properties_title=سەردێڕ: -document_properties_author=نووسەر -document_properties_subject=بابەت: -document_properties_keywords=کلیلەوشە: -document_properties_creation_date=بەرواری درووستکردن: -document_properties_modification_date=بەرواری دەستکاریکردن: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=درووستکەر: -document_properties_producer=بەرهەمهێنەری PDF: -document_properties_version=وەشانی PDF: -document_properties_page_count=ژمارەی پەرەکان: -document_properties_page_size=قەبارەی پەڕە: -document_properties_page_size_unit_inches=ئینچ -document_properties_page_size_unit_millimeters=ملم -document_properties_page_size_orientation_portrait=پۆرترەیت(درێژ) -document_properties_page_size_orientation_landscape=پانیی -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=نامە -document_properties_page_size_name_legal=یاسایی -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=پیشاندانی وێبی خێرا: -document_properties_linearized_yes=بەڵێ -document_properties_linearized_no=نەخێر -document_properties_close=داخستن - -print_progress_message=بەڵگەنامە ئامادەدەکرێت بۆ چاپکردن... -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=پاشگەزبوونەوە - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=لاتەنیشت پیشاندان/شاردنەوە -toggle_sidebar_label=لاتەنیشت پیشاندان/شاردنەوە -document_outline_label=سنووری چوارچێوە -attachments.title=پاشکۆکان پیشان بدە -attachments_label=پاشکۆکان -layers_label=چینەکان -thumbs.title=وێنۆچکە پیشان بدە -thumbs_label=وێنۆچکە -findbar.title=لە بەڵگەنامە بگەرێ -findbar_label=دۆزینەوە - -additional_layers=چینی زیاتر -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=پەڕەی {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=وێنۆچکەی پەڕەی {{page}} - -# Find panel button title and messages -find_input.title=دۆزینەوە -find_input.placeholder=لە بەڵگەنامە بگەرێ... -find_previous.title=هەبوونی پێشوو بدۆزرەوە لە ڕستەکەدا -find_previous_label=پێشوو -find_next.title=هەبوونی داهاتوو بدۆزەرەوە لە ڕستەکەدا -find_next_label=دوواتر -find_highlight=هەمووی نیشانە بکە -find_match_case_label=دۆخی لەیەکچوون -find_entire_word_label=هەموو وشەکان -find_reached_top=گەشتیتە سەرەوەی بەڵگەنامە، لە خوارەوە دەستت پێکرد -find_reached_bottom=گەشتیتە کۆتایی بەڵگەنامە. لەسەرەوە دەستت پێکرد -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} لە کۆی {{total}} لەیەکچوو -find_match_count[two]={{current}} لە کۆی {{total}} لەیەکچوو -find_match_count[few]={{current}} لە کۆی {{total}} لەیەکچوو -find_match_count[many]={{current}} لە کۆی {{total}} لەیەکچوو -find_match_count[other]={{current}} لە کۆی {{total}} لەیەکچوو -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=زیاتر لە {{limit}} لەیەکچوو -find_match_count_limit[one]=زیاتر لە {{limit}} لەیەکچوو -find_match_count_limit[two]=زیاتر لە {{limit}} لەیەکچوو -find_match_count_limit[few]=زیاتر لە {{limit}} لەیەکچوو -find_match_count_limit[many]=زیاتر لە {{limit}} لەیەکچوو -find_match_count_limit[other]=زیاتر لە {{limit}} لەیەکچوو -find_not_found=نووسین نەدۆزرایەوە - -# Predefined zoom values -page_scale_width=پانی پەڕە -page_scale_fit=پڕبوونی پەڕە -page_scale_auto=زوومی خۆکار -page_scale_actual=قەبارەی ڕاستی -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=هەڵەیەک ڕوویدا لە کاتی بارکردنی PDF. -invalid_file_error=پەڕگەی pdf تێکچووە یان نەگونجاوە. -missing_file_error=پەڕگەی pdf بوونی نیە. -unexpected_response_error=وەڵامی ڕاژەخوازی نەخوازراو. - -rendering_error=هەڵەیەک ڕوویدا لە کاتی پوختەکردنی (ڕێندەر) پەڕە. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} سەرنج] -password_label=وشەی تێپەڕ بنووسە بۆ کردنەوەی پەڕگەی pdf. -password_invalid=وشەی تێپەڕ هەڵەیە. تکایە دووبارە هەوڵ بدەرەوە. -password_ok=باشە -password_cancel=پاشگەزبوونەوە - -printing_not_supported=ئاگاداربە: چاپکردن بە تەواوی پشتگیر ناکرێت لەم وێبگەڕە. -printing_not_ready=ئاگاداربە: PDF بە تەواوی بارنەبووە بۆ چاپکردن. -web_fonts_disabled=جۆرەپیتی وێب ناچالاکە: نەتوانی جۆرەپیتی تێخراوی ناو pdfـەکە بەکاربێت. - diff --git a/static/pdf.js/locale/cs/viewer.ftl b/static/pdf.js/locale/cs/viewer.ftl new file mode 100644 index 00000000..b05761b0 --- /dev/null +++ b/static/pdf.js/locale/cs/viewer.ftl @@ -0,0 +1,406 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Přejde na předchozí stránku +pdfjs-previous-button-label = Předchozí +pdfjs-next-button = + .title = Přejde na následující stránku +pdfjs-next-button-label = Další +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Stránka +# 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 = z { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } z { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zmenší velikost +pdfjs-zoom-out-button-label = Zmenšit +pdfjs-zoom-in-button = + .title = Zvětší velikost +pdfjs-zoom-in-button-label = Zvětšit +pdfjs-zoom-select = + .title = Nastaví velikost +pdfjs-presentation-mode-button = + .title = Přepne do režimu prezentace +pdfjs-presentation-mode-button-label = Režim prezentace +pdfjs-open-file-button = + .title = Otevře soubor +pdfjs-open-file-button-label = Otevřít +pdfjs-print-button = + .title = Vytiskne dokument +pdfjs-print-button-label = Vytisknout +pdfjs-save-button = + .title = Uložit +pdfjs-save-button-label = Uložit +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Stáhnout +# 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 = Stáhnout +pdfjs-bookmark-button = + .title = Aktuální stránka (zobrazit URL od aktuální stránky) +pdfjs-bookmark-button-label = Aktuální stránka +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Otevřít v aplikaci +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Otevřít v aplikaci + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Nástroje +pdfjs-tools-button-label = Nástroje +pdfjs-first-page-button = + .title = Přejde na první stránku +pdfjs-first-page-button-label = Přejít na první stránku +pdfjs-last-page-button = + .title = Přejde na poslední stránku +pdfjs-last-page-button-label = Přejít na poslední stránku +pdfjs-page-rotate-cw-button = + .title = Otočí po směru hodin +pdfjs-page-rotate-cw-button-label = Otočit po směru hodin +pdfjs-page-rotate-ccw-button = + .title = Otočí proti směru hodin +pdfjs-page-rotate-ccw-button-label = Otočit proti směru hodin +pdfjs-cursor-text-select-tool-button = + .title = Povolí výběr textu +pdfjs-cursor-text-select-tool-button-label = Výběr textu +pdfjs-cursor-hand-tool-button = + .title = Povolí nástroj ručička +pdfjs-cursor-hand-tool-button-label = Nástroj ručička +pdfjs-scroll-page-button = + .title = Posouvat po stránkách +pdfjs-scroll-page-button-label = Posouvání po stránkách +pdfjs-scroll-vertical-button = + .title = Použít svislé posouvání +pdfjs-scroll-vertical-button-label = Svislé posouvání +pdfjs-scroll-horizontal-button = + .title = Použít vodorovné posouvání +pdfjs-scroll-horizontal-button-label = Vodorovné posouvání +pdfjs-scroll-wrapped-button = + .title = Použít postupné posouvání +pdfjs-scroll-wrapped-button-label = Postupné posouvání +pdfjs-spread-none-button = + .title = Nesdružovat stránky +pdfjs-spread-none-button-label = Žádné sdružení +pdfjs-spread-odd-button = + .title = Sdruží stránky s umístěním lichých vlevo +pdfjs-spread-odd-button-label = Sdružení stránek (liché vlevo) +pdfjs-spread-even-button = + .title = Sdruží stránky s umístěním sudých vlevo +pdfjs-spread-even-button-label = Sdružení stránek (sudé vlevo) + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Vlastnosti dokumentu… +pdfjs-document-properties-button-label = Vlastnosti dokumentu… +pdfjs-document-properties-file-name = Název souboru: +pdfjs-document-properties-file-size = Velikost souboru: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajtů) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bajtů) +pdfjs-document-properties-title = Název stránky: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Předmět: +pdfjs-document-properties-keywords = Klíčová slova: +pdfjs-document-properties-creation-date = Datum vytvoření: +pdfjs-document-properties-modification-date = Datum úpravy: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Vytvořil: +pdfjs-document-properties-producer = Tvůrce PDF: +pdfjs-document-properties-version = Verze PDF: +pdfjs-document-properties-page-count = Počet stránek: +pdfjs-document-properties-page-size = Velikost stránky: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = na výšku +pdfjs-document-properties-page-size-orientation-landscape = na šířku +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 = Dopis +pdfjs-document-properties-page-size-name-legal = Právní dokument + +## 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 = Rychlé zobrazování z webu: +pdfjs-document-properties-linearized-yes = Ano +pdfjs-document-properties-linearized-no = Ne +pdfjs-document-properties-close-button = Zavřít + +## Print + +pdfjs-print-progress-message = Příprava dokumentu pro tisk… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress } % +pdfjs-print-progress-close-button = Zrušit +pdfjs-printing-not-supported = Upozornění: Tisk není v tomto prohlížeči plně podporován. +pdfjs-printing-not-ready = Upozornění: Dokument PDF není kompletně načten. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Postranní lišta +pdfjs-toggle-sidebar-notification-button = + .title = Přepnout postranní lištu (dokument obsahuje osnovu/přílohy/vrstvy) +pdfjs-toggle-sidebar-button-label = Postranní lišta +pdfjs-document-outline-button = + .title = Zobrazí osnovu dokumentu (poklepání přepne zobrazení všech položek) +pdfjs-document-outline-button-label = Osnova dokumentu +pdfjs-attachments-button = + .title = Zobrazí přílohy +pdfjs-attachments-button-label = Přílohy +pdfjs-layers-button = + .title = Zobrazit vrstvy (poklepáním obnovíte všechny vrstvy do výchozího stavu) +pdfjs-layers-button-label = Vrstvy +pdfjs-thumbs-button = + .title = Zobrazí náhledy +pdfjs-thumbs-button-label = Náhledy +pdfjs-current-outline-item-button = + .title = Najít aktuální položku v osnově +pdfjs-current-outline-item-button-label = Aktuální položka v osnově +pdfjs-findbar-button = + .title = Najde v dokumentu +pdfjs-findbar-button-label = Najít +pdfjs-additional-layers = Další vrstvy + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Strana { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Náhled strany { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Najít + .placeholder = Najít v dokumentu… +pdfjs-find-previous-button = + .title = Najde předchozí výskyt hledaného textu +pdfjs-find-previous-button-label = Předchozí +pdfjs-find-next-button = + .title = Najde další výskyt hledaného textu +pdfjs-find-next-button-label = Další +pdfjs-find-highlight-checkbox = Zvýraznit +pdfjs-find-match-case-checkbox-label = Rozlišovat velikost +pdfjs-find-match-diacritics-checkbox-label = Rozlišovat diakritiku +pdfjs-find-entire-word-checkbox-label = Celá slova +pdfjs-find-reached-top = Dosažen začátek dokumentu, pokračuje se od konce +pdfjs-find-reached-bottom = Dosažen konec dokumentu, pokračuje se od začátku +# 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 }. z { $total } výskytu + [few] { $current }. z { $total } výskytů + [many] { $current }. z { $total } výskytů + *[other] { $current }. z { $total } výskytů + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Více než { $limit } výskyt + [few] Více než { $limit } výskyty + [many] Více než { $limit } výskytů + *[other] Více než { $limit } výskytů + } +pdfjs-find-not-found = Hledaný text nenalezen + +## Predefined zoom values + +pdfjs-page-scale-width = Podle šířky +pdfjs-page-scale-fit = Podle výšky +pdfjs-page-scale-auto = Automatická velikost +pdfjs-page-scale-actual = Skutečná velikost +# 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 = Strana { $page } + +## Loading indicator messages + +pdfjs-loading-error = Při nahrávání PDF nastala chyba. +pdfjs-invalid-file-error = Neplatný nebo chybný soubor PDF. +pdfjs-missing-file-error = Chybí soubor PDF. +pdfjs-unexpected-response-error = Neočekávaná odpověď serveru. +pdfjs-rendering-error = Při vykreslování stránky nastala chyba. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Anotace typu { $type }] + +## Password + +pdfjs-password-label = Pro otevření PDF souboru vložte heslo. +pdfjs-password-invalid = Neplatné heslo. Zkuste to znovu. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Zrušit +pdfjs-web-fonts-disabled = Webová písma jsou zakázána, proto není možné použít vložená písma PDF. + +## Editing + +pdfjs-editor-free-text-button = + .title = Text +pdfjs-editor-free-text-button-label = Text +pdfjs-editor-ink-button = + .title = Kreslení +pdfjs-editor-ink-button-label = Kreslení +pdfjs-editor-stamp-button = + .title = Přidání či úprava obrázků +pdfjs-editor-stamp-button-label = Přidání či úprava obrázků +pdfjs-editor-highlight-button = + .title = Zvýraznění +pdfjs-editor-highlight-button-label = Zvýraznění +pdfjs-highlight-floating-button = + .title = Zvýraznit +pdfjs-highlight-floating-button1 = + .title = Zvýraznit + .aria-label = Zvýraznit +pdfjs-highlight-floating-button-label = Zvýraznit + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Odebrat kresbu +pdfjs-editor-remove-freetext-button = + .title = Odebrat text +pdfjs-editor-remove-stamp-button = + .title = Odebrat obrázek +pdfjs-editor-remove-highlight-button = + .title = Odebrat zvýraznění + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Barva +pdfjs-editor-free-text-size-input = Velikost +pdfjs-editor-ink-color-input = Barva +pdfjs-editor-ink-thickness-input = Tloušťka +pdfjs-editor-ink-opacity-input = Průhlednost +pdfjs-editor-stamp-add-image-button = + .title = Přidat obrázek +pdfjs-editor-stamp-add-image-button-label = Přidat obrázek +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Tloušťka +pdfjs-editor-free-highlight-thickness-title = + .title = Změna tloušťky při zvýrazňování jiných položek než textu +pdfjs-free-text = + .aria-label = Textový editor +pdfjs-free-text-default-content = Začněte psát… +pdfjs-ink = + .aria-label = Editor kreslení +pdfjs-ink-canvas = + .aria-label = Uživatelem vytvořený obrázek + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Náhradní popis +pdfjs-editor-alt-text-edit-button-label = Upravit náhradní popis +pdfjs-editor-alt-text-dialog-label = Vyberte možnost +pdfjs-editor-alt-text-dialog-description = Náhradní popis pomáhá, když lidé obrázek nevidí nebo když se nenačítá. +pdfjs-editor-alt-text-add-description-label = Přidat popis +pdfjs-editor-alt-text-add-description-description = Snažte se o 1-2 věty, které popisují předmět, prostředí nebo činnosti. +pdfjs-editor-alt-text-mark-decorative-label = Označit jako dekorativní +pdfjs-editor-alt-text-mark-decorative-description = Používá se pro okrasné obrázky, jako jsou rámečky nebo vodoznaky. +pdfjs-editor-alt-text-cancel-button = Zrušit +pdfjs-editor-alt-text-save-button = Uložit +pdfjs-editor-alt-text-decorative-tooltip = Označen jako dekorativní +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Například: “Mladý muž si sedá ke stolu, aby se najedl.” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Levý horní roh — změna velikosti +pdfjs-editor-resizer-label-top-middle = Horní střed — změna velikosti +pdfjs-editor-resizer-label-top-right = Pravý horní roh — změna velikosti +pdfjs-editor-resizer-label-middle-right = Vpravo uprostřed — změna velikosti +pdfjs-editor-resizer-label-bottom-right = Pravý dolní roh — změna velikosti +pdfjs-editor-resizer-label-bottom-middle = Střed dole — změna velikosti +pdfjs-editor-resizer-label-bottom-left = Levý dolní roh — změna velikosti +pdfjs-editor-resizer-label-middle-left = Vlevo uprostřed — změna velikosti + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Barva zvýraznění +pdfjs-editor-colorpicker-button = + .title = Změna barvy +pdfjs-editor-colorpicker-dropdown = + .aria-label = Výběr barev +pdfjs-editor-colorpicker-yellow = + .title = Žlutá +pdfjs-editor-colorpicker-green = + .title = Zelená +pdfjs-editor-colorpicker-blue = + .title = Modrá +pdfjs-editor-colorpicker-pink = + .title = Růžová +pdfjs-editor-colorpicker-red = + .title = Červená + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Zobrazit vše +pdfjs-editor-highlight-show-all-button = + .title = Zobrazit vše diff --git a/static/pdf.js/locale/cs/viewer.properties b/static/pdf.js/locale/cs/viewer.properties deleted file mode 100644 index 49f88d7d..00000000 --- a/static/pdf.js/locale/cs/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Přejde na předchozí stránku -previous_label=Předchozí -next.title=Přejde na následující stránku -next_label=Další - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Stránka -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=z {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} z {{pagesCount}}) - -zoom_out.title=Zmenší velikost -zoom_out_label=Zmenšit -zoom_in.title=Zvětší velikost -zoom_in_label=Zvětšit -zoom.title=Nastaví velikost -presentation_mode.title=Přepne do režimu prezentace -presentation_mode_label=Režim prezentace -open_file.title=Otevře soubor -open_file_label=Otevřít -print.title=Vytiskne dokument -print_label=Vytisknout -save.title=Uložit -save_label=Uložit -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Stáhnout -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Stáhnout -bookmark1.title=Aktuální stránka (zobrazit URL od aktuální stránky) -bookmark1_label=Aktuální stránka -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Otevřít v aplikaci -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Otevřít v aplikaci - -# Secondary toolbar and context menu -tools.title=Nástroje -tools_label=Nástroje -first_page.title=Přejde na první stránku -first_page_label=Přejít na první stránku -last_page.title=Přejde na poslední stránku -last_page_label=Přejít na poslední stránku -page_rotate_cw.title=Otočí po směru hodin -page_rotate_cw_label=Otočit po směru hodin -page_rotate_ccw.title=Otočí proti směru hodin -page_rotate_ccw_label=Otočit proti směru hodin - -cursor_text_select_tool.title=Povolí výběr textu -cursor_text_select_tool_label=Výběr textu -cursor_hand_tool.title=Povolí nástroj ručička -cursor_hand_tool_label=Nástroj ručička - -scroll_page.title=Posouvat po stránkách -scroll_page_label=Posouvání po stránkách -scroll_vertical.title=Použít svislé posouvání -scroll_vertical_label=Svislé posouvání -scroll_horizontal.title=Použít vodorovné posouvání -scroll_horizontal_label=Vodorovné posouvání -scroll_wrapped.title=Použít postupné posouvání -scroll_wrapped_label=Postupné posouvání - -spread_none.title=Nesdružovat stránky -spread_none_label=Žádné sdružení -spread_odd.title=Sdruží stránky s umístěním lichých vlevo -spread_odd_label=Sdružení stránek (liché vlevo) -spread_even.title=Sdruží stránky s umístěním sudých vlevo -spread_even_label=Sdružení stránek (sudé vlevo) - -# Document properties dialog box -document_properties.title=Vlastnosti dokumentu… -document_properties_label=Vlastnosti dokumentu… -document_properties_file_name=Název souboru: -document_properties_file_size=Velikost souboru: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bajtů) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bajtů) -document_properties_title=Název stránky: -document_properties_author=Autor: -document_properties_subject=Předmět: -document_properties_keywords=Klíčová slova: -document_properties_creation_date=Datum vytvoření: -document_properties_modification_date=Datum úpravy: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Vytvořil: -document_properties_producer=Tvůrce PDF: -document_properties_version=Verze PDF: -document_properties_page_count=Počet stránek: -document_properties_page_size=Velikost stránky: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=na výšku -document_properties_page_size_orientation_landscape=na šířku -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Dopis -document_properties_page_size_name_legal=Právní dokument -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Rychlé zobrazování z webu: -document_properties_linearized_yes=Ano -document_properties_linearized_no=Ne -document_properties_close=Zavřít - -print_progress_message=Příprava dokumentu pro tisk… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}} % -print_progress_close=Zrušit - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Postranní lišta -toggle_sidebar_notification2.title=Přepnout postranní lištu (dokument obsahuje osnovu/přílohy/vrstvy) -toggle_sidebar_label=Postranní lišta -document_outline.title=Zobrazí osnovu dokumentu (poklepání přepne zobrazení všech položek) -document_outline_label=Osnova dokumentu -attachments.title=Zobrazí přílohy -attachments_label=Přílohy -layers.title=Zobrazit vrstvy (poklepáním obnovíte všechny vrstvy do výchozího stavu) -layers_label=Vrstvy -thumbs.title=Zobrazí náhledy -thumbs_label=Náhledy -current_outline_item.title=Najít aktuální položku v osnově -current_outline_item_label=Aktuální položka v osnově -findbar.title=Najde v dokumentu -findbar_label=Najít - -additional_layers=Další vrstvy -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Strana {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Strana {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Náhled strany {{page}} - -# Find panel button title and messages -find_input.title=Najít -find_input.placeholder=Najít v dokumentu… -find_previous.title=Najde předchozí výskyt hledaného textu -find_previous_label=Předchozí -find_next.title=Najde další výskyt hledaného textu -find_next_label=Další -find_highlight=Zvýraznit -find_match_case_label=Rozlišovat velikost -find_match_diacritics_label=Rozlišovat diakritiku -find_entire_word_label=Celá slova -find_reached_top=Dosažen začátek dokumentu, pokračuje se od konce -find_reached_bottom=Dosažen konec dokumentu, pokračuje se od začátku -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}}. z {{total}} výskytu -find_match_count[two]={{current}}. z {{total}} výskytů -find_match_count[few]={{current}}. z {{total}} výskytů -find_match_count[many]={{current}}. z {{total}} výskytů -find_match_count[other]={{current}}. z {{total}} výskytů -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Více než {{limit}} výskytů -find_match_count_limit[one]=Více než {{limit}} výskyt -find_match_count_limit[two]=Více než {{limit}} výskyty -find_match_count_limit[few]=Více než {{limit}} výskyty -find_match_count_limit[many]=Více než {{limit}} výskytů -find_match_count_limit[other]=Více než {{limit}} výskytů -find_not_found=Hledaný text nenalezen - -# Predefined zoom values -page_scale_width=Podle šířky -page_scale_fit=Podle výšky -page_scale_auto=Automatická velikost -page_scale_actual=Skutečná velikost -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}} % - -# Loading indicator messages -loading_error=Při nahrávání PDF nastala chyba. -invalid_file_error=Neplatný nebo chybný soubor PDF. -missing_file_error=Chybí soubor PDF. -unexpected_response_error=Neočekávaná odpověď serveru. -rendering_error=Při vykreslování stránky nastala chyba. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Anotace typu {{type}}] -password_label=Pro otevření PDF souboru vložte heslo. -password_invalid=Neplatné heslo. Zkuste to znovu. -password_ok=OK -password_cancel=Zrušit - -printing_not_supported=Upozornění: Tisk není v tomto prohlížeči plně podporován. -printing_not_ready=Upozornění: Dokument PDF není kompletně načten. -web_fonts_disabled=Webová písma jsou zakázána, proto není možné použít vložená písma PDF. - -# Editor -editor_free_text2.title=Text -editor_free_text2_label=Text -editor_ink2.title=Kreslení -editor_ink2_label=Kreslení - -editor_stamp1.title=Přidání či úprava obrázků -editor_stamp1_label=Přidání či úprava obrázků - -free_text2_default_content=Začněte psát… - -# Editor Parameters -editor_free_text_color=Barva -editor_free_text_size=Velikost -editor_ink_color=Barva -editor_ink_thickness=Tloušťka -editor_ink_opacity=Průhlednost - -editor_stamp_add_image_label=Přidat obrázek -editor_stamp_add_image.title=Přidat obrázek - -# Editor aria -editor_free_text2_aria_label=Textový editor -editor_ink2_aria_label=Editor kreslení -editor_ink_canvas_aria_label=Uživatelem vytvořený obrázek - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Náhradní popis -editor_alt_text_edit_button_label=Upravit náhradní popis -editor_alt_text_dialog_label=Vyberte možnost -editor_alt_text_dialog_description=Náhradní popis pomáhá, když lidé obrázek nevidí nebo když se nenačítá. -editor_alt_text_add_description_label=Přidat popis -editor_alt_text_add_description_description=Snažte se o 1-2 věty, které popisují předmět, prostředí nebo činnosti. -editor_alt_text_mark_decorative_label=Označit jako dekorativní -editor_alt_text_mark_decorative_description=Používá se pro okrasné obrázky, jako jsou rámečky nebo vodoznaky. -editor_alt_text_cancel_button=Zrušit -editor_alt_text_save_button=Uložit -editor_alt_text_decorative_tooltip=Označen jako dekorativní -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=Například: “Mladý muž si sedá ke stolu, aby se najedl.” diff --git a/static/pdf.js/locale/cy/viewer.ftl b/static/pdf.js/locale/cy/viewer.ftl new file mode 100644 index 00000000..061237ab --- /dev/null +++ b/static/pdf.js/locale/cy/viewer.ftl @@ -0,0 +1,410 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Tudalen Flaenorol +pdfjs-previous-button-label = Blaenorol +pdfjs-next-button = + .title = Tudalen Nesaf +pdfjs-next-button-label = Nesaf +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Tudalen +# 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 = o { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } o { $pagesCount }) +pdfjs-zoom-out-button = + .title = Lleihau +pdfjs-zoom-out-button-label = Lleihau +pdfjs-zoom-in-button = + .title = Cynyddu +pdfjs-zoom-in-button-label = Cynyddu +pdfjs-zoom-select = + .title = Chwyddo +pdfjs-presentation-mode-button = + .title = Newid i'r Modd Cyflwyno +pdfjs-presentation-mode-button-label = Modd Cyflwyno +pdfjs-open-file-button = + .title = Agor Ffeil +pdfjs-open-file-button-label = Agor +pdfjs-print-button = + .title = Argraffu +pdfjs-print-button-label = Argraffu +pdfjs-save-button = + .title = Cadw +pdfjs-save-button-label = Cadw +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Llwytho i lawr +# 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 = Llwytho i lawr +pdfjs-bookmark-button = + .title = Tudalen Gyfredol (Gweld URL o'r Dudalen Gyfredol) +pdfjs-bookmark-button-label = Tudalen Gyfredol +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Agor yn yr ap +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Agor yn yr ap + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Offer +pdfjs-tools-button-label = Offer +pdfjs-first-page-button = + .title = Mynd i'r Dudalen Gyntaf +pdfjs-first-page-button-label = Mynd i'r Dudalen Gyntaf +pdfjs-last-page-button = + .title = Mynd i'r Dudalen Olaf +pdfjs-last-page-button-label = Mynd i'r Dudalen Olaf +pdfjs-page-rotate-cw-button = + .title = Cylchdroi Clocwedd +pdfjs-page-rotate-cw-button-label = Cylchdroi Clocwedd +pdfjs-page-rotate-ccw-button = + .title = Cylchdroi Gwrthglocwedd +pdfjs-page-rotate-ccw-button-label = Cylchdroi Gwrthglocwedd +pdfjs-cursor-text-select-tool-button = + .title = Galluogi Dewis Offeryn Testun +pdfjs-cursor-text-select-tool-button-label = Offeryn Dewis Testun +pdfjs-cursor-hand-tool-button = + .title = Galluogi Offeryn Llaw +pdfjs-cursor-hand-tool-button-label = Offeryn Llaw +pdfjs-scroll-page-button = + .title = Defnyddio Sgrolio Tudalen +pdfjs-scroll-page-button-label = Sgrolio Tudalen +pdfjs-scroll-vertical-button = + .title = Defnyddio Sgrolio Fertigol +pdfjs-scroll-vertical-button-label = Sgrolio Fertigol +pdfjs-scroll-horizontal-button = + .title = Defnyddio Sgrolio Llorweddol +pdfjs-scroll-horizontal-button-label = Sgrolio Llorweddol +pdfjs-scroll-wrapped-button = + .title = Defnyddio Sgrolio Amlapio +pdfjs-scroll-wrapped-button-label = Sgrolio Amlapio +pdfjs-spread-none-button = + .title = Peidio uno trawsdaleniadau +pdfjs-spread-none-button-label = Dim Trawsdaleniadau +pdfjs-spread-odd-button = + .title = Uno trawsdaleniadau gan gychwyn gyda thudalennau odrif +pdfjs-spread-odd-button-label = Trawsdaleniadau Odrif +pdfjs-spread-even-button = + .title = Uno trawsdaleniadau gan gychwyn gyda thudalennau eilrif +pdfjs-spread-even-button-label = Trawsdaleniadau Eilrif + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Priodweddau Dogfen… +pdfjs-document-properties-button-label = Priodweddau Dogfen… +pdfjs-document-properties-file-name = Enw ffeil: +pdfjs-document-properties-file-size = Maint ffeil: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } beit) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } beit) +pdfjs-document-properties-title = Teitl: +pdfjs-document-properties-author = Awdur: +pdfjs-document-properties-subject = Pwnc: +pdfjs-document-properties-keywords = Allweddair: +pdfjs-document-properties-creation-date = Dyddiad Creu: +pdfjs-document-properties-modification-date = Dyddiad Addasu: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Crewr: +pdfjs-document-properties-producer = Cynhyrchydd PDF: +pdfjs-document-properties-version = Fersiwn PDF: +pdfjs-document-properties-page-count = Cyfrif Tudalen: +pdfjs-document-properties-page-size = Maint Tudalen: +pdfjs-document-properties-page-size-unit-inches = o fewn +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = portread +pdfjs-document-properties-page-size-orientation-landscape = tirlun +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 = Llythyr +pdfjs-document-properties-page-size-name-legal = Cyfreithiol + +## 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 = Golwg Gwe Cyflym: +pdfjs-document-properties-linearized-yes = Iawn +pdfjs-document-properties-linearized-no = Na +pdfjs-document-properties-close-button = Cau + +## Print + +pdfjs-print-progress-message = Paratoi dogfen ar gyfer ei hargraffu… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Diddymu +pdfjs-printing-not-supported = Rhybudd: Nid yw argraffu yn cael ei gynnal yn llawn gan y porwr. +pdfjs-printing-not-ready = Rhybudd: Nid yw'r PDF wedi ei lwytho'n llawn ar gyfer argraffu. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Toglo'r Bar Ochr +pdfjs-toggle-sidebar-notification-button = + .title = Toglo'r Bar Ochr (mae'r ddogfen yn cynnwys amlinelliadau/atodiadau/haenau) +pdfjs-toggle-sidebar-button-label = Toglo'r Bar Ochr +pdfjs-document-outline-button = + .title = Dangos Amlinell Dogfen (clic dwbl i ymestyn/cau pob eitem) +pdfjs-document-outline-button-label = Amlinelliad Dogfen +pdfjs-attachments-button = + .title = Dangos Atodiadau +pdfjs-attachments-button-label = Atodiadau +pdfjs-layers-button = + .title = Dangos Haenau (cliciwch ddwywaith i ailosod yr holl haenau i'r cyflwr rhagosodedig) +pdfjs-layers-button-label = Haenau +pdfjs-thumbs-button = + .title = Dangos Lluniau Bach +pdfjs-thumbs-button-label = Lluniau Bach +pdfjs-current-outline-item-button = + .title = Canfod yr Eitem Amlinellol Gyfredol +pdfjs-current-outline-item-button-label = Yr Eitem Amlinellol Gyfredol +pdfjs-findbar-button = + .title = Canfod yn y Ddogfen +pdfjs-findbar-button-label = Canfod +pdfjs-additional-layers = Haenau Ychwanegol + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Tudalen { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Llun Bach Tudalen { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Canfod + .placeholder = Canfod yn y ddogfen… +pdfjs-find-previous-button = + .title = Canfod enghraifft flaenorol o'r ymadrodd +pdfjs-find-previous-button-label = Blaenorol +pdfjs-find-next-button = + .title = Canfod enghraifft nesaf yr ymadrodd +pdfjs-find-next-button-label = Nesaf +pdfjs-find-highlight-checkbox = Amlygu Popeth +pdfjs-find-match-case-checkbox-label = Cydweddu Maint +pdfjs-find-match-diacritics-checkbox-label = Diacritigau Cyfatebol +pdfjs-find-entire-word-checkbox-label = Geiriau Cyfan +pdfjs-find-reached-top = Wedi cyrraedd brig y dudalen, parhau o'r gwaelod +pdfjs-find-reached-bottom = Wedi cyrraedd diwedd y dudalen, parhau o'r brig +# 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 -> + [zero] { $current } o { $total } cydweddiadau + [one] { $current } o { $total } cydweddiad + [two] { $current } o { $total } gydweddiad + [few] { $current } o { $total } cydweddiad + [many] { $current } o { $total } chydweddiad + *[other] { $current } o { $total } cydweddiad + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [zero] Mwy nag { $limit } cydweddiadau + [one] Mwy nag { $limit } cydweddiad + [two] Mwy nag { $limit } gydweddiad + [few] Mwy nag { $limit } cydweddiad + [many] Mwy nag { $limit } chydweddiad + *[other] Mwy nag { $limit } cydweddiad + } +pdfjs-find-not-found = Heb ganfod ymadrodd + +## Predefined zoom values + +pdfjs-page-scale-width = Lled Tudalen +pdfjs-page-scale-fit = Ffit Tudalen +pdfjs-page-scale-auto = Chwyddo Awtomatig +pdfjs-page-scale-actual = Maint Gwirioneddol +# 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 = Tudalen { $page } + +## Loading indicator messages + +pdfjs-loading-error = Digwyddodd gwall wrth lwytho'r PDF. +pdfjs-invalid-file-error = Ffeil PDF annilys neu llwgr. +pdfjs-missing-file-error = Ffeil PDF coll. +pdfjs-unexpected-response-error = Ymateb annisgwyl gan y gweinydd. +pdfjs-rendering-error = Digwyddodd gwall wrth adeiladu'r dudalen. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Anodiad { $type } ] + +## Password + +pdfjs-password-label = Rhowch gyfrinair i agor y PDF. +pdfjs-password-invalid = Cyfrinair annilys. Ceisiwch eto. +pdfjs-password-ok-button = Iawn +pdfjs-password-cancel-button = Diddymu +pdfjs-web-fonts-disabled = Ffontiau gwe wedi eu hanalluogi: methu defnyddio ffontiau PDF mewnblanedig. + +## Editing + +pdfjs-editor-free-text-button = + .title = Testun +pdfjs-editor-free-text-button-label = Testun +pdfjs-editor-ink-button = + .title = Lluniadu +pdfjs-editor-ink-button-label = Lluniadu +pdfjs-editor-stamp-button = + .title = Ychwanegu neu olygu delweddau +pdfjs-editor-stamp-button-label = Ychwanegu neu olygu delweddau +pdfjs-editor-highlight-button = + .title = Amlygu +pdfjs-editor-highlight-button-label = Amlygu +pdfjs-highlight-floating-button = + .title = Amlygu +pdfjs-highlight-floating-button1 = + .title = Amlygu + .aria-label = Amlygu +pdfjs-highlight-floating-button-label = Amlygu + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Dileu lluniad +pdfjs-editor-remove-freetext-button = + .title = Dileu testun +pdfjs-editor-remove-stamp-button = + .title = Dileu delwedd +pdfjs-editor-remove-highlight-button = + .title = Tynnu amlygiad + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Lliw +pdfjs-editor-free-text-size-input = Maint +pdfjs-editor-ink-color-input = Lliw +pdfjs-editor-ink-thickness-input = Trwch +pdfjs-editor-ink-opacity-input = Didreiddedd +pdfjs-editor-stamp-add-image-button = + .title = Ychwanegu delwedd +pdfjs-editor-stamp-add-image-button-label = Ychwanegu delwedd +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Trwch +pdfjs-editor-free-highlight-thickness-title = + .title = Newid trwch wrth amlygu eitemau heblaw testun +pdfjs-free-text = + .aria-label = Golygydd Testun +pdfjs-free-text-default-content = Cychwyn teipio… +pdfjs-ink = + .aria-label = Golygydd Lluniadu +pdfjs-ink-canvas = + .aria-label = Delwedd wedi'i chreu gan ddefnyddwyr + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Testun amgen (alt) +pdfjs-editor-alt-text-edit-button-label = Golygu testun amgen +pdfjs-editor-alt-text-dialog-label = Dewisiadau +pdfjs-editor-alt-text-dialog-description = Mae testun amgen (testun alt) yn helpu pan na all pobl weld y ddelwedd neu pan nad yw'n llwytho. +pdfjs-editor-alt-text-add-description-label = Ychwanegu disgrifiad +pdfjs-editor-alt-text-add-description-description = Anelwch at 1-2 frawddeg sy'n disgrifio'r pwnc, y cefndir neu'r gweithredoedd. +pdfjs-editor-alt-text-mark-decorative-label = Marcio fel addurniadol +pdfjs-editor-alt-text-mark-decorative-description = Mae'n cael ei ddefnyddio ar gyfer delweddau addurniadol, fel borderi neu farciau dŵr. +pdfjs-editor-alt-text-cancel-button = Diddymu +pdfjs-editor-alt-text-save-button = Cadw +pdfjs-editor-alt-text-decorative-tooltip = Marcio fel addurniadol +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Er enghraifft, “Mae dyn ifanc yn eistedd wrth fwrdd i fwyta pryd bwyd” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Y gornel chwith uchaf — newid maint +pdfjs-editor-resizer-label-top-middle = Canol uchaf - newid maint +pdfjs-editor-resizer-label-top-right = Y gornel dde uchaf - newid maint +pdfjs-editor-resizer-label-middle-right = De canol - newid maint +pdfjs-editor-resizer-label-bottom-right = Y gornel dde isaf — newid maint +pdfjs-editor-resizer-label-bottom-middle = Canol gwaelod — newid maint +pdfjs-editor-resizer-label-bottom-left = Y gornel chwith isaf — newid maint +pdfjs-editor-resizer-label-middle-left = Chwith canol — newid maint + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Lliw amlygu +pdfjs-editor-colorpicker-button = + .title = Newid lliw +pdfjs-editor-colorpicker-dropdown = + .aria-label = Dewisiadau lliw +pdfjs-editor-colorpicker-yellow = + .title = Melyn +pdfjs-editor-colorpicker-green = + .title = Gwyrdd +pdfjs-editor-colorpicker-blue = + .title = Glas +pdfjs-editor-colorpicker-pink = + .title = Pinc +pdfjs-editor-colorpicker-red = + .title = Coch + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Dangos y cyfan +pdfjs-editor-highlight-show-all-button = + .title = Dangos y cyfan diff --git a/static/pdf.js/locale/cy/viewer.properties b/static/pdf.js/locale/cy/viewer.properties deleted file mode 100644 index 005f742d..00000000 --- a/static/pdf.js/locale/cy/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Tudalen Flaenorol -previous_label=Blaenorol -next.title=Tudalen Nesaf -next_label=Nesaf - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Tudalen -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=o {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} o {{pagesCount}}) - -zoom_out.title=Chwyddo Allan -zoom_out_label=Chwyddo Allan -zoom_in.title=Chwyddo Mewn -zoom_in_label=Chwyddo Mewn -zoom.title=Chwyddo -presentation_mode.title=Newid i'r Modd Cyflwyno -presentation_mode_label=Modd Cyflwyno -open_file.title=Agor Ffeil -open_file_label=Agor -print.title=Argraffu -print_label=Argraffu -save.title=Cadw -save_label=Cadw -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Llwytho i Lawr -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Llwytho i Lawr -bookmark1.title=Tudalen Gyfredol (Gweld URL o'r Dudalen Gyfredol) -bookmark1_label=Tudalen Gyfredol -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Agor yn yr ap -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Agor yn yr ap - -# Secondary toolbar and context menu -tools.title=Offer -tools_label=Offer -first_page.title=Mynd i'r Dudalen Gyntaf -first_page_label=Mynd i'r Dudalen Gyntaf -last_page.title=Mynd i'r Dudalen Olaf -last_page_label=Mynd i'r Dudalen Olaf -page_rotate_cw.title=Cylchdroi Clocwedd -page_rotate_cw_label=Cylchdroi Clocwedd -page_rotate_ccw.title=Cylchdroi Gwrthglocwedd -page_rotate_ccw_label=Cylchdroi Gwrthglocwedd - -cursor_text_select_tool.title=Galluogi Dewis Offeryn Testun -cursor_text_select_tool_label=Offeryn Dewis Testun -cursor_hand_tool.title=Galluogi Offeryn Llaw -cursor_hand_tool_label=Offeryn Llaw - -scroll_page.title=Defnyddio Sgrolio Tudalen -scroll_page_label=Sgrolio Tudalen -scroll_vertical.title=Defnyddio Sgrolio Fertigol -scroll_vertical_label=Sgrolio Fertigol -scroll_horizontal.title=Defnyddio Sgrolio Llorweddol -scroll_horizontal_label=Sgrolio Llorweddol -scroll_wrapped.title=Defnyddio Sgrolio Amlapio -scroll_wrapped_label=Sgrolio Amlapio - -spread_none.title=Peidio uno trawsdaleniadau -spread_none_label=Dim Trawsdaleniadau -spread_odd.title=Uno trawsdaleniadau gan gychwyn gyda thudalennau odrif -spread_odd_label=Trawsdaleniadau Odrif -spread_even.title=Uno trawsdaleniadau gan gychwyn gyda thudalennau eilrif -spread_even_label=Trawsdaleniadau Eilrif - -# Document properties dialog box -document_properties.title=Priodweddau Dogfen… -document_properties_label=Priodweddau Dogfen… -document_properties_file_name=Enw ffeil: -document_properties_file_size=Maint ffeil: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} beit) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} beit) -document_properties_title=Teitl: -document_properties_author=Awdur: -document_properties_subject=Pwnc: -document_properties_keywords=Allweddair: -document_properties_creation_date=Dyddiad Creu: -document_properties_modification_date=Dyddiad Addasu: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Crewr: -document_properties_producer=Cynhyrchydd PDF: -document_properties_version=Fersiwn PDF: -document_properties_page_count=Cyfrif Tudalen: -document_properties_page_size=Maint Tudalen: -document_properties_page_size_unit_inches=o fewn -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=portread -document_properties_page_size_orientation_landscape=tirlun -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Llythyr -document_properties_page_size_name_legal=Cyfreithiol -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Golwg Gwe Cyflym: -document_properties_linearized_yes=Iawn -document_properties_linearized_no=Na -document_properties_close=Cau - -print_progress_message=Paratoi dogfen ar gyfer ei hargraffu… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Diddymu - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Toglo'r Bar Ochr -toggle_sidebar_notification2.title=Toglo'r Bar Ochr (mae'r ddogfen yn cynnwys amlinelliadau/atodiadau/haenau) -toggle_sidebar_label=Toglo'r Bar Ochr -document_outline.title=Dangos Amlinell Dogfen (clic dwbl i ymestyn/cau pob eitem) -document_outline_label=Amlinelliad Dogfen -attachments.title=Dangos Atodiadau -attachments_label=Atodiadau -layers.title=Dangos Haenau (cliciwch ddwywaith i ailosod yr holl haenau i'r cyflwr rhagosodedig) -layers_label=Haenau -thumbs.title=Dangos Lluniau Bach -thumbs_label=Lluniau Bach -current_outline_item.title=Canfod yr Eitem Amlinellol Gyfredol -current_outline_item_label=Yr Eitem Amlinellol Gyfredol -findbar.title=Canfod yn y Ddogfen -findbar_label=Canfod - -additional_layers=Haenau Ychwanegol -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Tudalen {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Tudalen {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Llun Bach Tudalen {{page}} - -# Find panel button title and messages -find_input.title=Canfod -find_input.placeholder=Canfod yn y ddogfen… -find_previous.title=Canfod enghraifft flaenorol o'r ymadrodd -find_previous_label=Blaenorol -find_next.title=Canfod enghraifft nesaf yr ymadrodd -find_next_label=Nesaf -find_highlight=Amlygu Popeth -find_match_case_label=Cydweddu Maint -find_match_diacritics_label=Diacritigau Cyfatebol -find_entire_word_label=Geiriau Cyfan -find_reached_top=Wedi cyrraedd brig y dudalen, parhau o'r gwaelod -find_reached_bottom=Wedi cyrraedd diwedd y dudalen, parhau o'r brig -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} o {{total}} cydweddiad -find_match_count[two]={{current}} o {{total}} cydweddiad -find_match_count[few]={{current}} o {{total}} cydweddiad -find_match_count[many]={{current}} o {{total}} cydweddiad -find_match_count[other]={{current}} o {{total}} cydweddiad -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Mwy na {{limit}} cydweddiad -find_match_count_limit[one]=Mwy na {{limit}} cydweddiad -find_match_count_limit[two]=Mwy na {{limit}} cydweddiad -find_match_count_limit[few]=Mwy na {{limit}} cydweddiad -find_match_count_limit[many]=Mwy na {{limit}} cydweddiad -find_match_count_limit[other]=Mwy na {{limit}} cydweddiad -find_not_found=Heb ganfod ymadrodd - -# Predefined zoom values -page_scale_width=Lled Tudalen -page_scale_fit=Ffit Tudalen -page_scale_auto=Chwyddo Awtomatig -page_scale_actual=Maint Gwirioneddol -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Digwyddodd gwall wrth lwytho'r PDF. -invalid_file_error=Ffeil PDF annilys neu llwgr. -missing_file_error=Ffeil PDF coll. -unexpected_response_error=Ymateb annisgwyl gan y gweinydd. -rendering_error=Digwyddodd gwall wrth adeiladu'r dudalen. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Anodiad {{type}} ] -password_label=Rhowch gyfrinair i agor y PDF. -password_invalid=Cyfrinair annilys. Ceisiwch eto. -password_ok=Iawn -password_cancel=Diddymu - -printing_not_supported=Rhybudd: Nid yw argraffu yn cael ei gynnal yn llawn gan y porwr. -printing_not_ready=Rhybudd: Nid yw'r PDF wedi ei lwytho'n llawn ar gyfer argraffu. -web_fonts_disabled=Ffontiau gwe wedi eu hanalluogi: methu defnyddio ffontiau PDF mewnblanedig. - -# Editor -editor_free_text2.title=Testun -editor_free_text2_label=Testun -editor_ink2.title=Lluniadu -editor_ink2_label=Lluniadu - -editor_stamp.title=Ychwanegu delwedd -editor_stamp_label=Ychwanegu delwedd - -editor_stamp1.title=Ychwanegu neu olygu delweddau -editor_stamp1_label=Ychwanegu neu olygu delweddau - -free_text2_default_content=Cychwyn teipio… - -# Editor Parameters -editor_free_text_color=Lliw -editor_free_text_size=Maint -editor_ink_color=Lliw -editor_ink_thickness=Trwch -editor_ink_opacity=Didreiddedd - -editor_stamp_add_image_label=Ychwanegu delwedd -editor_stamp_add_image.title=Ychwanegu delwedd - -# Editor aria -editor_free_text2_aria_label=Golygydd Testun -editor_ink2_aria_label=Golygydd Lluniadu -editor_ink_canvas_aria_label=Delwedd wedi'i chreu gan ddefnyddwyr diff --git a/static/pdf.js/locale/da/viewer.ftl b/static/pdf.js/locale/da/viewer.ftl new file mode 100644 index 00000000..968b22ff --- /dev/null +++ b/static/pdf.js/locale/da/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Forrige side +pdfjs-previous-button-label = Forrige +pdfjs-next-button = + .title = Næste side +pdfjs-next-button-label = Næste +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Side +# 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 = af { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } af { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zoom ud +pdfjs-zoom-out-button-label = Zoom ud +pdfjs-zoom-in-button = + .title = Zoom ind +pdfjs-zoom-in-button-label = Zoom ind +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Skift til fuldskærmsvisning +pdfjs-presentation-mode-button-label = Fuldskærmsvisning +pdfjs-open-file-button = + .title = Åbn fil +pdfjs-open-file-button-label = Åbn +pdfjs-print-button = + .title = Udskriv +pdfjs-print-button-label = Udskriv +pdfjs-save-button = + .title = Gem +pdfjs-save-button-label = Gem +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Hent +# 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 = Hent +pdfjs-bookmark-button = + .title = Aktuel side (vis URL fra den aktuelle side) +pdfjs-bookmark-button-label = Aktuel side +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Åbn i app +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Åbn i app + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Funktioner +pdfjs-tools-button-label = Funktioner +pdfjs-first-page-button = + .title = Gå til første side +pdfjs-first-page-button-label = Gå til første side +pdfjs-last-page-button = + .title = Gå til sidste side +pdfjs-last-page-button-label = Gå til sidste side +pdfjs-page-rotate-cw-button = + .title = Roter med uret +pdfjs-page-rotate-cw-button-label = Roter med uret +pdfjs-page-rotate-ccw-button = + .title = Roter mod uret +pdfjs-page-rotate-ccw-button-label = Roter mod uret +pdfjs-cursor-text-select-tool-button = + .title = Aktiver markeringsværktøj +pdfjs-cursor-text-select-tool-button-label = Markeringsværktøj +pdfjs-cursor-hand-tool-button = + .title = Aktiver håndværktøj +pdfjs-cursor-hand-tool-button-label = Håndværktøj +pdfjs-scroll-page-button = + .title = Brug sidescrolling +pdfjs-scroll-page-button-label = Sidescrolling +pdfjs-scroll-vertical-button = + .title = Brug vertikal scrolling +pdfjs-scroll-vertical-button-label = Vertikal scrolling +pdfjs-scroll-horizontal-button = + .title = Brug horisontal scrolling +pdfjs-scroll-horizontal-button-label = Horisontal scrolling +pdfjs-scroll-wrapped-button = + .title = Brug ombrudt scrolling +pdfjs-scroll-wrapped-button-label = Ombrudt scrolling +pdfjs-spread-none-button = + .title = Vis enkeltsider +pdfjs-spread-none-button-label = Enkeltsider +pdfjs-spread-odd-button = + .title = Vis opslag med ulige sidenumre til venstre +pdfjs-spread-odd-button-label = Opslag med forside +pdfjs-spread-even-button = + .title = Vis opslag med lige sidenumre til venstre +pdfjs-spread-even-button-label = Opslag uden forside + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Dokumentegenskaber… +pdfjs-document-properties-button-label = Dokumentegenskaber… +pdfjs-document-properties-file-name = Filnavn: +pdfjs-document-properties-file-size = Filstørrelse: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Titel: +pdfjs-document-properties-author = Forfatter: +pdfjs-document-properties-subject = Emne: +pdfjs-document-properties-keywords = Nøgleord: +pdfjs-document-properties-creation-date = Oprettet: +pdfjs-document-properties-modification-date = Redigeret: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Program: +pdfjs-document-properties-producer = PDF-producent: +pdfjs-document-properties-version = PDF-version: +pdfjs-document-properties-page-count = Antal sider: +pdfjs-document-properties-page-size = Sidestørrelse: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = stående +pdfjs-document-properties-page-size-orientation-landscape = liggende +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Hurtig web-visning: +pdfjs-document-properties-linearized-yes = Ja +pdfjs-document-properties-linearized-no = Nej +pdfjs-document-properties-close-button = Luk + +## Print + +pdfjs-print-progress-message = Forbereder dokument til udskrivning… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Annuller +pdfjs-printing-not-supported = Advarsel: Udskrivning er ikke fuldt understøttet af browseren. +pdfjs-printing-not-ready = Advarsel: PDF-filen er ikke fuldt indlæst til udskrivning. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Slå sidepanel til eller fra +pdfjs-toggle-sidebar-notification-button = + .title = Slå sidepanel til eller fra (dokumentet indeholder disposition/vedhæftede filer/lag) +pdfjs-toggle-sidebar-button-label = Slå sidepanel til eller fra +pdfjs-document-outline-button = + .title = Vis dokumentets disposition (dobbeltklik for at vise/skjule alle elementer) +pdfjs-document-outline-button-label = Dokument-disposition +pdfjs-attachments-button = + .title = Vis vedhæftede filer +pdfjs-attachments-button-label = Vedhæftede filer +pdfjs-layers-button = + .title = Vis lag (dobbeltklik for at nulstille alle lag til standard-tilstanden) +pdfjs-layers-button-label = Lag +pdfjs-thumbs-button = + .title = Vis miniaturer +pdfjs-thumbs-button-label = Miniaturer +pdfjs-current-outline-item-button = + .title = Find det aktuelle dispositions-element +pdfjs-current-outline-item-button-label = Aktuelt dispositions-element +pdfjs-findbar-button = + .title = Find i dokument +pdfjs-findbar-button-label = Find +pdfjs-additional-layers = Yderligere lag + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Side { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniature af side { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Find + .placeholder = Find i dokument… +pdfjs-find-previous-button = + .title = Find den forrige forekomst +pdfjs-find-previous-button-label = Forrige +pdfjs-find-next-button = + .title = Find den næste forekomst +pdfjs-find-next-button-label = Næste +pdfjs-find-highlight-checkbox = Fremhæv alle +pdfjs-find-match-case-checkbox-label = Forskel på store og små bogstaver +pdfjs-find-match-diacritics-checkbox-label = Diakritiske tegn +pdfjs-find-entire-word-checkbox-label = Hele ord +pdfjs-find-reached-top = Toppen af siden blev nået, fortsatte fra bunden +pdfjs-find-reached-bottom = Bunden af siden blev nået, fortsatte fra toppen +# 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 } af { $total } forekomst + *[other] { $current } af { $total } forekomster + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Mere end { $limit } forekomst + *[other] Mere end { $limit } forekomster + } +pdfjs-find-not-found = Der blev ikke fundet noget + +## Predefined zoom values + +pdfjs-page-scale-width = Sidebredde +pdfjs-page-scale-fit = Tilpas til side +pdfjs-page-scale-auto = Automatisk zoom +pdfjs-page-scale-actual = Faktisk størrelse +# 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 = Side { $page } + +## Loading indicator messages + +pdfjs-loading-error = Der opstod en fejl ved indlæsning af PDF-filen. +pdfjs-invalid-file-error = PDF-filen er ugyldig eller ødelagt. +pdfjs-missing-file-error = Manglende PDF-fil. +pdfjs-unexpected-response-error = Uventet svar fra serveren. +pdfjs-rendering-error = Der opstod en fejl ved generering af siden. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type }kommentar] + +## Password + +pdfjs-password-label = Angiv adgangskode til at åbne denne PDF-fil. +pdfjs-password-invalid = Ugyldig adgangskode. Prøv igen. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Fortryd +pdfjs-web-fonts-disabled = Webskrifttyper er deaktiverede. De indlejrede skrifttyper i PDF-filen kan ikke anvendes. + +## Editing + +pdfjs-editor-free-text-button = + .title = Tekst +pdfjs-editor-free-text-button-label = Tekst +pdfjs-editor-ink-button = + .title = Tegn +pdfjs-editor-ink-button-label = Tegn +pdfjs-editor-stamp-button = + .title = Tilføj eller rediger billeder +pdfjs-editor-stamp-button-label = Tilføj eller rediger billeder +pdfjs-editor-highlight-button = + .title = Fremhæv +pdfjs-editor-highlight-button-label = Fremhæv +pdfjs-highlight-floating-button = + .title = Fremhæv +pdfjs-highlight-floating-button1 = + .title = Fremhæv + .aria-label = Fremhæv +pdfjs-highlight-floating-button-label = Fremhæv + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Fjern tegning +pdfjs-editor-remove-freetext-button = + .title = Fjern tekst +pdfjs-editor-remove-stamp-button = + .title = Fjern billede +pdfjs-editor-remove-highlight-button = + .title = Fjern fremhævning + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Farve +pdfjs-editor-free-text-size-input = Størrelse +pdfjs-editor-ink-color-input = Farve +pdfjs-editor-ink-thickness-input = Tykkelse +pdfjs-editor-ink-opacity-input = Uigennemsigtighed +pdfjs-editor-stamp-add-image-button = + .title = Tilføj billede +pdfjs-editor-stamp-add-image-button-label = Tilføj billede +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Tykkelse +pdfjs-editor-free-highlight-thickness-title = + .title = Ændr tykkelse, når andre elementer end tekst fremhæves +pdfjs-free-text = + .aria-label = Teksteditor +pdfjs-free-text-default-content = Begynd at skrive… +pdfjs-ink = + .aria-label = Tegnings-editor +pdfjs-ink-canvas = + .aria-label = Brugeroprettet billede + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alternativ tekst +pdfjs-editor-alt-text-edit-button-label = Rediger alternativ tekst +pdfjs-editor-alt-text-dialog-label = Vælg en indstilling +pdfjs-editor-alt-text-dialog-description = Alternativ tekst hjælper folk, som ikke kan se billedet eller når det ikke indlæses. +pdfjs-editor-alt-text-add-description-label = Tilføj en beskrivelse +pdfjs-editor-alt-text-add-description-description = Sigt efter en eller to sætninger, der beskriver emnet, omgivelserne eller handlinger. +pdfjs-editor-alt-text-mark-decorative-label = Marker som dekorativ +pdfjs-editor-alt-text-mark-decorative-description = Dette bruges for dekorative billeder som rammer eller vandmærker. +pdfjs-editor-alt-text-cancel-button = Annuller +pdfjs-editor-alt-text-save-button = Gem +pdfjs-editor-alt-text-decorative-tooltip = Markeret som dekorativ +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = For eksempel: "En ung mand sætter sig ved et bord for at spise et måltid mad" + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Øverste venstre hjørne — tilpas størrelse +pdfjs-editor-resizer-label-top-middle = Øverste i midten — tilpas størrelse +pdfjs-editor-resizer-label-top-right = Øverste højre hjørne — tilpas størrelse +pdfjs-editor-resizer-label-middle-right = Midten til højre — tilpas størrelse +pdfjs-editor-resizer-label-bottom-right = Nederste højre hjørne - tilpas størrelse +pdfjs-editor-resizer-label-bottom-middle = Nederst i midten - tilpas størrelse +pdfjs-editor-resizer-label-bottom-left = Nederste venstre hjørne - tilpas størrelse +pdfjs-editor-resizer-label-middle-left = Midten til venstre — tilpas størrelse + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Fremhævningsfarve +pdfjs-editor-colorpicker-button = + .title = Skift farve +pdfjs-editor-colorpicker-dropdown = + .aria-label = Farvevalg +pdfjs-editor-colorpicker-yellow = + .title = Gul +pdfjs-editor-colorpicker-green = + .title = Grøn +pdfjs-editor-colorpicker-blue = + .title = Blå +pdfjs-editor-colorpicker-pink = + .title = Lyserød +pdfjs-editor-colorpicker-red = + .title = Rød + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Vis alle +pdfjs-editor-highlight-show-all-button = + .title = Vis alle diff --git a/static/pdf.js/locale/da/viewer.properties b/static/pdf.js/locale/da/viewer.properties deleted file mode 100644 index 305238be..00000000 --- a/static/pdf.js/locale/da/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Forrige side -previous_label=Forrige -next.title=Næste side -next_label=Næste - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Side -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=af {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} af {{pagesCount}}) - -zoom_out.title=Zoom ud -zoom_out_label=Zoom ud -zoom_in.title=Zoom ind -zoom_in_label=Zoom ind -zoom.title=Zoom -presentation_mode.title=Skift til fuldskærmsvisning -presentation_mode_label=Fuldskærmsvisning -open_file.title=Åbn fil -open_file_label=Åbn -print.title=Udskriv -print_label=Udskriv -save.title=Gem -save_label=Gem -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Hent -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Hent -bookmark1.title=Aktuel side (vis URL fra den aktuelle side) -bookmark1_label=Aktuel side -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Åbn i app -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Åbn i app - -# Secondary toolbar and context menu -tools.title=Funktioner -tools_label=Funktioner -first_page.title=Gå til første side -first_page_label=Gå til første side -last_page.title=Gå til sidste side -last_page_label=Gå til sidste side -page_rotate_cw.title=Roter med uret -page_rotate_cw_label=Roter med uret -page_rotate_ccw.title=Roter mod uret -page_rotate_ccw_label=Roter mod uret - -cursor_text_select_tool.title=Aktiver markeringsværktøj -cursor_text_select_tool_label=Markeringsværktøj -cursor_hand_tool.title=Aktiver håndværktøj -cursor_hand_tool_label=Håndværktøj - -scroll_page.title=Brug sidescrolling -scroll_page_label=Sidescrolling -scroll_vertical.title=Brug vertikal scrolling -scroll_vertical_label=Vertikal scrolling -scroll_horizontal.title=Brug horisontal scrolling -scroll_horizontal_label=Horisontal scrolling -scroll_wrapped.title=Brug ombrudt scrolling -scroll_wrapped_label=Ombrudt scrolling - -spread_none.title=Vis enkeltsider -spread_none_label=Enkeltsider -spread_odd.title=Vis opslag med ulige sidenumre til venstre -spread_odd_label=Opslag med forside -spread_even.title=Vis opslag med lige sidenumre til venstre -spread_even_label=Opslag uden forside - -# Document properties dialog box -document_properties.title=Dokumentegenskaber… -document_properties_label=Dokumentegenskaber… -document_properties_file_name=Filnavn: -document_properties_file_size=Filstørrelse: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Titel: -document_properties_author=Forfatter: -document_properties_subject=Emne: -document_properties_keywords=Nøgleord: -document_properties_creation_date=Oprettet: -document_properties_modification_date=Redigeret: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Program: -document_properties_producer=PDF-producent: -document_properties_version=PDF-version: -document_properties_page_count=Antal sider: -document_properties_page_size=Sidestørrelse: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=stående -document_properties_page_size_orientation_landscape=liggende -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Hurtig web-visning: -document_properties_linearized_yes=Ja -document_properties_linearized_no=Nej -document_properties_close=Luk - -print_progress_message=Forbereder dokument til udskrivning… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Annuller - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Slå sidepanel til eller fra -toggle_sidebar_notification2.title=Slå sidepanel til eller fra (dokumentet indeholder disposition/vedhæftede filer/lag) -toggle_sidebar_label=Slå sidepanel til eller fra -document_outline.title=Vis dokumentets disposition (dobbeltklik for at vise/skjule alle elementer) -document_outline_label=Dokument-disposition -attachments.title=Vis vedhæftede filer -attachments_label=Vedhæftede filer -layers.title=Vis lag (dobbeltklik for at nulstille alle lag til standard-tilstanden) -layers_label=Lag -thumbs.title=Vis miniaturer -thumbs_label=Miniaturer -current_outline_item.title=Find det aktuelle dispositions-element -current_outline_item_label=Aktuelt dispositions-element -findbar.title=Find i dokument -findbar_label=Find - -additional_layers=Yderligere lag -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Side {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Side {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniature af side {{page}} - -# Find panel button title and messages -find_input.title=Find -find_input.placeholder=Find i dokument… -find_previous.title=Find den forrige forekomst -find_previous_label=Forrige -find_next.title=Find den næste forekomst -find_next_label=Næste -find_highlight=Fremhæv alle -find_match_case_label=Forskel på store og små bogstaver -find_match_diacritics_label=Diakritiske tegn -find_entire_word_label=Hele ord -find_reached_top=Toppen af siden blev nået, fortsatte fra bunden -find_reached_bottom=Bunden af siden blev nået, fortsatte fra toppen -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} af {{total}} forekomst -find_match_count[two]={{current}} af {{total}} forekomster -find_match_count[few]={{current}} af {{total}} forekomster -find_match_count[many]={{current}} af {{total}} forekomster -find_match_count[other]={{current}} af {{total}} forekomster -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Mere end {{limit}} forekomster -find_match_count_limit[one]=Mere end {{limit}} forekomst -find_match_count_limit[two]=Mere end {{limit}} forekomster -find_match_count_limit[few]=Mere end {{limit}} forekomster -find_match_count_limit[many]=Mere end {{limit}} forekomster -find_match_count_limit[other]=Mere end {{limit}} forekomster -find_not_found=Der blev ikke fundet noget - -# Predefined zoom values -page_scale_width=Sidebredde -page_scale_fit=Tilpas til side -page_scale_auto=Automatisk zoom -page_scale_actual=Faktisk størrelse -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Der opstod en fejl ved indlæsning af PDF-filen. -invalid_file_error=PDF-filen er ugyldig eller ødelagt. -missing_file_error=Manglende PDF-fil. -unexpected_response_error=Uventet svar fra serveren. -rendering_error=Der opstod en fejl ved generering af siden. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}}kommentar] -password_label=Angiv adgangskode til at åbne denne PDF-fil. -password_invalid=Ugyldig adgangskode. Prøv igen. -password_ok=OK -password_cancel=Fortryd - -printing_not_supported=Advarsel: Udskrivning er ikke fuldt understøttet af browseren. -printing_not_ready=Advarsel: PDF-filen er ikke fuldt indlæst til udskrivning. -web_fonts_disabled=Webskrifttyper er deaktiverede. De indlejrede skrifttyper i PDF-filen kan ikke anvendes. - -# Editor -editor_free_text2.title=Tekst -editor_free_text2_label=Tekst -editor_ink2.title=Tegn -editor_ink2_label=Tegn - -editor_stamp.title=Tilføj et billede -editor_stamp_label=Tilføj et billede - -editor_stamp1.title=Tilføj eller rediger billeder -editor_stamp1_label=Tilføj eller rediger billeder - -free_text2_default_content=Begynd at skrive… - -# Editor Parameters -editor_free_text_color=Farve -editor_free_text_size=Størrelse -editor_ink_color=Farve -editor_ink_thickness=Tykkelse -editor_ink_opacity=Uigennemsigtighed - -editor_stamp_add_image_label=Tilføj billede -editor_stamp_add_image.title=Tilføj billede - -# Editor aria -editor_free_text2_aria_label=Teksteditor -editor_ink2_aria_label=Tegnings-editor -editor_ink_canvas_aria_label=Brugeroprettet billede diff --git a/static/pdf.js/locale/de/viewer.ftl b/static/pdf.js/locale/de/viewer.ftl new file mode 100644 index 00000000..da073aa1 --- /dev/null +++ b/static/pdf.js/locale/de/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Eine Seite zurück +pdfjs-previous-button-label = Zurück +pdfjs-next-button = + .title = Eine Seite vor +pdfjs-next-button-label = Vor +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Seite +# 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 = von { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } von { $pagesCount }) +pdfjs-zoom-out-button = + .title = Verkleinern +pdfjs-zoom-out-button-label = Verkleinern +pdfjs-zoom-in-button = + .title = Vergrößern +pdfjs-zoom-in-button-label = Vergrößern +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = In Präsentationsmodus wechseln +pdfjs-presentation-mode-button-label = Präsentationsmodus +pdfjs-open-file-button = + .title = Datei öffnen +pdfjs-open-file-button-label = Öffnen +pdfjs-print-button = + .title = Drucken +pdfjs-print-button-label = Drucken +pdfjs-save-button = + .title = Speichern +pdfjs-save-button-label = Speichern +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Herunterladen +# 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 = Herunterladen +pdfjs-bookmark-button = + .title = Aktuelle Seite (URL von aktueller Seite anzeigen) +pdfjs-bookmark-button-label = Aktuelle Seite +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Mit App öffnen +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Mit App öffnen + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Werkzeuge +pdfjs-tools-button-label = Werkzeuge +pdfjs-first-page-button = + .title = Erste Seite anzeigen +pdfjs-first-page-button-label = Erste Seite anzeigen +pdfjs-last-page-button = + .title = Letzte Seite anzeigen +pdfjs-last-page-button-label = Letzte Seite anzeigen +pdfjs-page-rotate-cw-button = + .title = Im Uhrzeigersinn drehen +pdfjs-page-rotate-cw-button-label = Im Uhrzeigersinn drehen +pdfjs-page-rotate-ccw-button = + .title = Gegen Uhrzeigersinn drehen +pdfjs-page-rotate-ccw-button-label = Gegen Uhrzeigersinn drehen +pdfjs-cursor-text-select-tool-button = + .title = Textauswahl-Werkzeug aktivieren +pdfjs-cursor-text-select-tool-button-label = Textauswahl-Werkzeug +pdfjs-cursor-hand-tool-button = + .title = Hand-Werkzeug aktivieren +pdfjs-cursor-hand-tool-button-label = Hand-Werkzeug +pdfjs-scroll-page-button = + .title = Seiten einzeln anordnen +pdfjs-scroll-page-button-label = Einzelseitenanordnung +pdfjs-scroll-vertical-button = + .title = Seiten übereinander anordnen +pdfjs-scroll-vertical-button-label = Vertikale Seitenanordnung +pdfjs-scroll-horizontal-button = + .title = Seiten nebeneinander anordnen +pdfjs-scroll-horizontal-button-label = Horizontale Seitenanordnung +pdfjs-scroll-wrapped-button = + .title = Seiten neben- und übereinander anordnen, abhängig vom Platz +pdfjs-scroll-wrapped-button-label = Kombinierte Seitenanordnung +pdfjs-spread-none-button = + .title = Seiten nicht nebeneinander anzeigen +pdfjs-spread-none-button-label = Einzelne Seiten +pdfjs-spread-odd-button = + .title = Jeweils eine ungerade und eine gerade Seite nebeneinander anzeigen +pdfjs-spread-odd-button-label = Ungerade + gerade Seite +pdfjs-spread-even-button = + .title = Jeweils eine gerade und eine ungerade Seite nebeneinander anzeigen +pdfjs-spread-even-button-label = Gerade + ungerade Seite + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Dokumenteigenschaften +pdfjs-document-properties-button-label = Dokumenteigenschaften… +pdfjs-document-properties-file-name = Dateiname: +pdfjs-document-properties-file-size = Dateigröße: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } Bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } Bytes) +pdfjs-document-properties-title = Titel: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Thema: +pdfjs-document-properties-keywords = Stichwörter: +pdfjs-document-properties-creation-date = Erstelldatum: +pdfjs-document-properties-modification-date = Bearbeitungsdatum: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date } { $time } +pdfjs-document-properties-creator = Anwendung: +pdfjs-document-properties-producer = PDF erstellt mit: +pdfjs-document-properties-version = PDF-Version: +pdfjs-document-properties-page-count = Seitenzahl: +pdfjs-document-properties-page-size = Seitengröße: +pdfjs-document-properties-page-size-unit-inches = Zoll +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = Hochformat +pdfjs-document-properties-page-size-orientation-landscape = Querformat +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Schnelle Webanzeige: +pdfjs-document-properties-linearized-yes = Ja +pdfjs-document-properties-linearized-no = Nein +pdfjs-document-properties-close-button = Schließen + +## Print + +pdfjs-print-progress-message = Dokument wird für Drucken vorbereitet… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress } % +pdfjs-print-progress-close-button = Abbrechen +pdfjs-printing-not-supported = Warnung: Die Drucken-Funktion wird durch diesen Browser nicht vollständig unterstützt. +pdfjs-printing-not-ready = Warnung: Die PDF-Datei ist nicht vollständig geladen, dies ist für das Drucken aber empfohlen. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Sidebar umschalten +pdfjs-toggle-sidebar-notification-button = + .title = Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge/Ebenen) +pdfjs-toggle-sidebar-button-label = Sidebar umschalten +pdfjs-document-outline-button = + .title = Dokumentstruktur anzeigen (Doppelklicken, um alle Einträge aus- bzw. einzuklappen) +pdfjs-document-outline-button-label = Dokumentstruktur +pdfjs-attachments-button = + .title = Anhänge anzeigen +pdfjs-attachments-button-label = Anhänge +pdfjs-layers-button = + .title = Ebenen anzeigen (Doppelklicken, um alle Ebenen auf den Standardzustand zurückzusetzen) +pdfjs-layers-button-label = Ebenen +pdfjs-thumbs-button = + .title = Miniaturansichten anzeigen +pdfjs-thumbs-button-label = Miniaturansichten +pdfjs-current-outline-item-button = + .title = Aktuelles Struktur-Element finden +pdfjs-current-outline-item-button-label = Aktuelles Struktur-Element +pdfjs-findbar-button = + .title = Dokument durchsuchen +pdfjs-findbar-button-label = Suchen +pdfjs-additional-layers = Zusätzliche Ebenen + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Seite { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniaturansicht von Seite { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Suchen + .placeholder = Dokument durchsuchen… +pdfjs-find-previous-button = + .title = Vorheriges Vorkommen des Suchbegriffs finden +pdfjs-find-previous-button-label = Zurück +pdfjs-find-next-button = + .title = Nächstes Vorkommen des Suchbegriffs finden +pdfjs-find-next-button-label = Weiter +pdfjs-find-highlight-checkbox = Alle hervorheben +pdfjs-find-match-case-checkbox-label = Groß-/Kleinschreibung beachten +pdfjs-find-match-diacritics-checkbox-label = Akzente +pdfjs-find-entire-word-checkbox-label = Ganze Wörter +pdfjs-find-reached-top = Anfang des Dokuments erreicht, fahre am Ende fort +pdfjs-find-reached-bottom = Ende des Dokuments erreicht, fahre am Anfang fort +# 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 } von { $total } Übereinstimmung + *[other] { $current } von { $total } Übereinstimmungen + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Mehr als { $limit } Übereinstimmung + *[other] Mehr als { $limit } Übereinstimmungen + } +pdfjs-find-not-found = Suchbegriff nicht gefunden + +## Predefined zoom values + +pdfjs-page-scale-width = Seitenbreite +pdfjs-page-scale-fit = Seitengröße +pdfjs-page-scale-auto = Automatischer Zoom +pdfjs-page-scale-actual = Originalgröße +# 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 = Seite { $page } + +## Loading indicator messages + +pdfjs-loading-error = Beim Laden der PDF-Datei trat ein Fehler auf. +pdfjs-invalid-file-error = Ungültige oder beschädigte PDF-Datei +pdfjs-missing-file-error = Fehlende PDF-Datei +pdfjs-unexpected-response-error = Unerwartete Antwort des Servers +pdfjs-rendering-error = Beim Darstellen der Seite trat ein Fehler auf. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Anlage: { $type }] + +## Password + +pdfjs-password-label = Geben Sie zum Öffnen der PDF-Datei deren Passwort ein. +pdfjs-password-invalid = Falsches Passwort. Bitte versuchen Sie es erneut. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Abbrechen +pdfjs-web-fonts-disabled = Web-Schriftarten sind deaktiviert: Eingebettete PDF-Schriftarten konnten nicht geladen werden. + +## Editing + +pdfjs-editor-free-text-button = + .title = Text +pdfjs-editor-free-text-button-label = Text +pdfjs-editor-ink-button = + .title = Zeichnen +pdfjs-editor-ink-button-label = Zeichnen +pdfjs-editor-stamp-button = + .title = Grafiken hinzufügen oder bearbeiten +pdfjs-editor-stamp-button-label = Grafiken hinzufügen oder bearbeiten +pdfjs-editor-highlight-button = + .title = Hervorheben +pdfjs-editor-highlight-button-label = Hervorheben +pdfjs-highlight-floating-button = + .title = Hervorheben +pdfjs-highlight-floating-button1 = + .title = Hervorheben + .aria-label = Hervorheben +pdfjs-highlight-floating-button-label = Hervorheben + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Zeichnung entfernen +pdfjs-editor-remove-freetext-button = + .title = Text entfernen +pdfjs-editor-remove-stamp-button = + .title = Grafik entfernen +pdfjs-editor-remove-highlight-button = + .title = Hervorhebung entfernen + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Farbe +pdfjs-editor-free-text-size-input = Größe +pdfjs-editor-ink-color-input = Farbe +pdfjs-editor-ink-thickness-input = Linienstärke +pdfjs-editor-ink-opacity-input = Deckkraft +pdfjs-editor-stamp-add-image-button = + .title = Grafik hinzufügen +pdfjs-editor-stamp-add-image-button-label = Grafik hinzufügen +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Linienstärke +pdfjs-editor-free-highlight-thickness-title = + .title = Linienstärke beim Hervorheben anderer Elemente als Text ändern +pdfjs-free-text = + .aria-label = Texteditor +pdfjs-free-text-default-content = Schreiben beginnen… +pdfjs-ink = + .aria-label = Zeichnungseditor +pdfjs-ink-canvas = + .aria-label = Vom Benutzer erstelltes Bild + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alternativ-Text +pdfjs-editor-alt-text-edit-button-label = Alternativ-Text bearbeiten +pdfjs-editor-alt-text-dialog-label = Option wählen +pdfjs-editor-alt-text-dialog-description = Alt-Text (Alternativtext) hilft, wenn Personen die Grafik nicht sehen können oder wenn sie nicht geladen wird. +pdfjs-editor-alt-text-add-description-label = Beschreibung hinzufügen +pdfjs-editor-alt-text-add-description-description = Ziel sind 1-2 Sätze, die das Thema, das Szenario oder Aktionen beschreiben. +pdfjs-editor-alt-text-mark-decorative-label = Als dekorativ markieren +pdfjs-editor-alt-text-mark-decorative-description = Dies wird für Ziergrafiken wie Ränder oder Wasserzeichen verwendet. +pdfjs-editor-alt-text-cancel-button = Abbrechen +pdfjs-editor-alt-text-save-button = Speichern +pdfjs-editor-alt-text-decorative-tooltip = Als dekorativ markiert +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Zum Beispiel: "Ein junger Mann setzt sich an einen Tisch, um zu essen." + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Linke obere Ecke - Größe ändern +pdfjs-editor-resizer-label-top-middle = Oben mittig - Größe ändern +pdfjs-editor-resizer-label-top-right = Rechts oben - Größe ändern +pdfjs-editor-resizer-label-middle-right = Mitte rechts - Größe ändern +pdfjs-editor-resizer-label-bottom-right = Rechte untere Ecke - Größe ändern +pdfjs-editor-resizer-label-bottom-middle = Unten mittig - Größe ändern +pdfjs-editor-resizer-label-bottom-left = Linke untere Ecke - Größe ändern +pdfjs-editor-resizer-label-middle-left = Mitte links - Größe ändern + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Hervorhebungsfarbe +pdfjs-editor-colorpicker-button = + .title = Farbe ändern +pdfjs-editor-colorpicker-dropdown = + .aria-label = Farbauswahl +pdfjs-editor-colorpicker-yellow = + .title = Gelb +pdfjs-editor-colorpicker-green = + .title = Grün +pdfjs-editor-colorpicker-blue = + .title = Blau +pdfjs-editor-colorpicker-pink = + .title = Pink +pdfjs-editor-colorpicker-red = + .title = Rot + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Alle anzeigen +pdfjs-editor-highlight-show-all-button = + .title = Alle anzeigen diff --git a/static/pdf.js/locale/de/viewer.properties b/static/pdf.js/locale/de/viewer.properties deleted file mode 100644 index a370ba4e..00000000 --- a/static/pdf.js/locale/de/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Eine Seite zurück -previous_label=Zurück -next.title=Eine Seite vor -next_label=Vor - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Seite -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=von {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} von {{pagesCount}}) - -zoom_out.title=Verkleinern -zoom_out_label=Verkleinern -zoom_in.title=Vergrößern -zoom_in_label=Vergrößern -zoom.title=Zoom -presentation_mode.title=In Präsentationsmodus wechseln -presentation_mode_label=Präsentationsmodus -open_file.title=Datei öffnen -open_file_label=Öffnen -print.title=Drucken -print_label=Drucken -save.title=Speichern -save_label=Speichern -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Herunterladen -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Herunterladen -bookmark1.title=Aktuelle Seite (URL von aktueller Seite anzeigen) -bookmark1_label=Aktuelle Seite -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Mit App öffnen -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Mit App öffnen - -# Secondary toolbar and context menu -tools.title=Werkzeuge -tools_label=Werkzeuge -first_page.title=Erste Seite anzeigen -first_page_label=Erste Seite anzeigen -last_page.title=Letzte Seite anzeigen -last_page_label=Letzte Seite anzeigen -page_rotate_cw.title=Im Uhrzeigersinn drehen -page_rotate_cw_label=Im Uhrzeigersinn drehen -page_rotate_ccw.title=Gegen Uhrzeigersinn drehen -page_rotate_ccw_label=Gegen Uhrzeigersinn drehen - -cursor_text_select_tool.title=Textauswahl-Werkzeug aktivieren -cursor_text_select_tool_label=Textauswahl-Werkzeug -cursor_hand_tool.title=Hand-Werkzeug aktivieren -cursor_hand_tool_label=Hand-Werkzeug - -scroll_page.title=Seiten einzeln anordnen -scroll_page_label=Einzelseitenanordnung -scroll_vertical.title=Seiten übereinander anordnen -scroll_vertical_label=Vertikale Seitenanordnung -scroll_horizontal.title=Seiten nebeneinander anordnen -scroll_horizontal_label=Horizontale Seitenanordnung -scroll_wrapped.title=Seiten neben- und übereinander anordnen, abhängig vom Platz -scroll_wrapped_label=Kombinierte Seitenanordnung - -spread_none.title=Seiten nicht nebeneinander anzeigen -spread_none_label=Einzelne Seiten -spread_odd.title=Jeweils eine ungerade und eine gerade Seite nebeneinander anzeigen -spread_odd_label=Ungerade + gerade Seite -spread_even.title=Jeweils eine gerade und eine ungerade Seite nebeneinander anzeigen -spread_even_label=Gerade + ungerade Seite - -# Document properties dialog box -document_properties.title=Dokumenteigenschaften -document_properties_label=Dokumenteigenschaften… -document_properties_file_name=Dateiname: -document_properties_file_size=Dateigröße: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} Bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} Bytes) -document_properties_title=Titel: -document_properties_author=Autor: -document_properties_subject=Thema: -document_properties_keywords=Stichwörter: -document_properties_creation_date=Erstelldatum: -document_properties_modification_date=Bearbeitungsdatum: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}} {{time}} -document_properties_creator=Anwendung: -document_properties_producer=PDF erstellt mit: -document_properties_version=PDF-Version: -document_properties_page_count=Seitenzahl: -document_properties_page_size=Seitengröße: -document_properties_page_size_unit_inches=Zoll -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=Hochformat -document_properties_page_size_orientation_landscape=Querformat -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Schnelle Webanzeige: -document_properties_linearized_yes=Ja -document_properties_linearized_no=Nein -document_properties_close=Schließen - -print_progress_message=Dokument wird für Drucken vorbereitet… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}} % -print_progress_close=Abbrechen - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Sidebar umschalten -toggle_sidebar_notification2.title=Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge/Ebenen) -toggle_sidebar_label=Sidebar umschalten -document_outline.title=Dokumentstruktur anzeigen (Doppelklicken, um alle Einträge aus- bzw. einzuklappen) -document_outline_label=Dokumentstruktur -attachments.title=Anhänge anzeigen -attachments_label=Anhänge -layers.title=Ebenen anzeigen (Doppelklicken, um alle Ebenen auf den Standardzustand zurückzusetzen) -layers_label=Ebenen -thumbs.title=Miniaturansichten anzeigen -thumbs_label=Miniaturansichten -current_outline_item.title=Aktuelles Struktur-Element finden -current_outline_item_label=Aktuelles Struktur-Element -findbar.title=Dokument durchsuchen -findbar_label=Suchen - -additional_layers=Zusätzliche Ebenen -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Seite {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Seite {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniaturansicht von Seite {{page}} - -# Find panel button title and messages -find_input.title=Suchen -find_input.placeholder=Dokument durchsuchen… -find_previous.title=Vorheriges Vorkommen des Suchbegriffs finden -find_previous_label=Zurück -find_next.title=Nächstes Vorkommen des Suchbegriffs finden -find_next_label=Weiter -find_highlight=Alle hervorheben -find_match_case_label=Groß-/Kleinschreibung beachten -find_match_diacritics_label=Akzente -find_entire_word_label=Ganze Wörter -find_reached_top=Anfang des Dokuments erreicht, fahre am Ende fort -find_reached_bottom=Ende des Dokuments erreicht, fahre am Anfang fort -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} von {{total}} Übereinstimmung -find_match_count[two]={{current}} von {{total}} Übereinstimmungen -find_match_count[few]={{current}} von {{total}} Übereinstimmungen -find_match_count[many]={{current}} von {{total}} Übereinstimmungen -find_match_count[other]={{current}} von {{total}} Übereinstimmungen -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Mehr als {{limit}} Übereinstimmungen -find_match_count_limit[one]=Mehr als {{limit}} Übereinstimmung -find_match_count_limit[two]=Mehr als {{limit}} Übereinstimmungen -find_match_count_limit[few]=Mehr als {{limit}} Übereinstimmungen -find_match_count_limit[many]=Mehr als {{limit}} Übereinstimmungen -find_match_count_limit[other]=Mehr als {{limit}} Übereinstimmungen -find_not_found=Suchbegriff nicht gefunden - -# Predefined zoom values -page_scale_width=Seitenbreite -page_scale_fit=Seitengröße -page_scale_auto=Automatischer Zoom -page_scale_actual=Originalgröße -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}} % - -# Loading indicator messages -loading_error=Beim Laden der PDF-Datei trat ein Fehler auf. -invalid_file_error=Ungültige oder beschädigte PDF-Datei -missing_file_error=Fehlende PDF-Datei -unexpected_response_error=Unerwartete Antwort des Servers -rendering_error=Beim Darstellen der Seite trat ein Fehler auf. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Anlage: {{type}}] -password_label=Geben Sie zum Öffnen der PDF-Datei deren Passwort ein. -password_invalid=Falsches Passwort. Bitte versuchen Sie es erneut. -password_ok=OK -password_cancel=Abbrechen - -printing_not_supported=Warnung: Die Drucken-Funktion wird durch diesen Browser nicht vollständig unterstützt. -printing_not_ready=Warnung: Die PDF-Datei ist nicht vollständig geladen, dies ist für das Drucken aber empfohlen. -web_fonts_disabled=Web-Schriftarten sind deaktiviert: Eingebettete PDF-Schriftarten konnten nicht geladen werden. - -# Editor -editor_free_text2.title=Text -editor_free_text2_label=Text -editor_ink2.title=Zeichnen -editor_ink2_label=Zeichnen - -editor_stamp.title=Ein Bild hinzufügen -editor_stamp_label=Ein Bild hinzufügen - -editor_stamp1.title=Grafiken hinzufügen oder bearbeiten -editor_stamp1_label=Grafiken hinzufügen oder bearbeiten - -free_text2_default_content=Schreiben beginnen… - -# Editor Parameters -editor_free_text_color=Farbe -editor_free_text_size=Größe -editor_ink_color=Farbe -editor_ink_thickness=Dicke -editor_ink_opacity=Deckkraft - -editor_stamp_add_image_label=Grafik hinzufügen -editor_stamp_add_image.title=Grafik hinzufügen - -# Editor aria -editor_free_text2_aria_label=Texteditor -editor_ink2_aria_label=Zeichnungseditor -editor_ink_canvas_aria_label=Vom Benutzer erstelltes Bild diff --git a/static/pdf.js/locale/dsb/viewer.ftl b/static/pdf.js/locale/dsb/viewer.ftl new file mode 100644 index 00000000..e86f8153 --- /dev/null +++ b/static/pdf.js/locale/dsb/viewer.ftl @@ -0,0 +1,406 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Pjerwjejšny bok +pdfjs-previous-button-label = Slědk +pdfjs-next-button = + .title = Pśiducy bok +pdfjs-next-button-label = Dalej +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Bok +# 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 = z { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } z { $pagesCount }) +pdfjs-zoom-out-button = + .title = Pómjeńšyś +pdfjs-zoom-out-button-label = Pómjeńšyś +pdfjs-zoom-in-button = + .title = Pówětšyś +pdfjs-zoom-in-button-label = Pówětšyś +pdfjs-zoom-select = + .title = Skalěrowanje +pdfjs-presentation-mode-button = + .title = Do prezentaciskego modusa pśejś +pdfjs-presentation-mode-button-label = Prezentaciski modus +pdfjs-open-file-button = + .title = Dataju wócyniś +pdfjs-open-file-button-label = Wócyniś +pdfjs-print-button = + .title = Śišćaś +pdfjs-print-button-label = Śišćaś +pdfjs-save-button = + .title = Składowaś +pdfjs-save-button-label = Składowaś +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Ześěgnuś +# 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 = Ześěgnuś +pdfjs-bookmark-button = + .title = Aktualny bok (URL z aktualnego boka pokazaś) +pdfjs-bookmark-button-label = Aktualny bok +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = W nałoženju wócyniś +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = W nałoženju wócyniś + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Rědy +pdfjs-tools-button-label = Rědy +pdfjs-first-page-button = + .title = K prědnemu bokoju +pdfjs-first-page-button-label = K prědnemu bokoju +pdfjs-last-page-button = + .title = K slědnemu bokoju +pdfjs-last-page-button-label = K slědnemu bokoju +pdfjs-page-rotate-cw-button = + .title = Wobwjertnuś ako špěra źo +pdfjs-page-rotate-cw-button-label = Wobwjertnuś ako špěra źo +pdfjs-page-rotate-ccw-button = + .title = Wobwjertnuś nawopaki ako špěra źo +pdfjs-page-rotate-ccw-button-label = Wobwjertnuś nawopaki ako špěra źo +pdfjs-cursor-text-select-tool-button = + .title = Rěd za wuběranje teksta zmóžniś +pdfjs-cursor-text-select-tool-button-label = Rěd za wuběranje teksta +pdfjs-cursor-hand-tool-button = + .title = Rucny rěd zmóžniś +pdfjs-cursor-hand-tool-button-label = Rucny rěd +pdfjs-scroll-page-button = + .title = Kulanje boka wužywaś +pdfjs-scroll-page-button-label = Kulanje boka +pdfjs-scroll-vertical-button = + .title = Wertikalne suwanje wužywaś +pdfjs-scroll-vertical-button-label = Wertikalne suwanje +pdfjs-scroll-horizontal-button = + .title = Horicontalne suwanje wužywaś +pdfjs-scroll-horizontal-button-label = Horicontalne suwanje +pdfjs-scroll-wrapped-button = + .title = Pózlažke suwanje wužywaś +pdfjs-scroll-wrapped-button-label = Pózlažke suwanje +pdfjs-spread-none-button = + .title = Boki njezwězaś +pdfjs-spread-none-button-label = Žeden dwójny bok +pdfjs-spread-odd-button = + .title = Boki zachopinajucy z njerownymi bokami zwězaś +pdfjs-spread-odd-button-label = Njerowne boki +pdfjs-spread-even-button = + .title = Boki zachopinajucy z rownymi bokami zwězaś +pdfjs-spread-even-button-label = Rowne boki + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Dokumentowe kakosći… +pdfjs-document-properties-button-label = Dokumentowe kakosći… +pdfjs-document-properties-file-name = Mě dataje: +pdfjs-document-properties-file-size = Wjelikosć dataje: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajtow) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bajtow) +pdfjs-document-properties-title = Titel: +pdfjs-document-properties-author = Awtor: +pdfjs-document-properties-subject = Tema: +pdfjs-document-properties-keywords = Klucowe słowa: +pdfjs-document-properties-creation-date = Datum napóranja: +pdfjs-document-properties-modification-date = Datum změny: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Awtor: +pdfjs-document-properties-producer = PDF-gótowaŕ: +pdfjs-document-properties-version = PDF-wersija: +pdfjs-document-properties-page-count = Licba bokow: +pdfjs-document-properties-page-size = Wjelikosć boka: +pdfjs-document-properties-page-size-unit-inches = col +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = wusoki format +pdfjs-document-properties-page-size-orientation-landscape = prěcny format +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Fast Web View: +pdfjs-document-properties-linearized-yes = Jo +pdfjs-document-properties-linearized-no = Ně +pdfjs-document-properties-close-button = Zacyniś + +## Print + +pdfjs-print-progress-message = Dokument pśigótujo se za śišćanje… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Pśetergnuś +pdfjs-printing-not-supported = Warnowanje: Śišćanje njepódpěra se połnje pśez toś ten wobglědowak. +pdfjs-printing-not-ready = Warnowanje: PDF njejo se za śišćanje dopołnje zacytał. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Bócnicu pokazaś/schowaś +pdfjs-toggle-sidebar-notification-button = + .title = Bocnicu pśešaltowaś (dokument rozrědowanje/pśipiski/warstwy wopśimujo) +pdfjs-toggle-sidebar-button-label = Bócnicu pokazaś/schowaś +pdfjs-document-outline-button = + .title = Dokumentowe naraźenje pokazaś (dwójne kliknjenje, aby se wšykne zapiski pokazali/schowali) +pdfjs-document-outline-button-label = Dokumentowa struktura +pdfjs-attachments-button = + .title = Pśidanki pokazaś +pdfjs-attachments-button-label = Pśidanki +pdfjs-layers-button = + .title = Warstwy pokazaś (klikniśo dwójcy, aby wšykne warstwy na standardny staw slědk stajił) +pdfjs-layers-button-label = Warstwy +pdfjs-thumbs-button = + .title = Miniatury pokazaś +pdfjs-thumbs-button-label = Miniatury +pdfjs-current-outline-item-button = + .title = Aktualny rozrědowański zapisk pytaś +pdfjs-current-outline-item-button-label = Aktualny rozrědowański zapisk +pdfjs-findbar-button = + .title = W dokumenśe pytaś +pdfjs-findbar-button-label = Pytaś +pdfjs-additional-layers = Dalšne warstwy + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Bok { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura boka { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Pytaś + .placeholder = W dokumenśe pytaś… +pdfjs-find-previous-button = + .title = Pjerwjejšne wustupowanje pytańskego wuraza pytaś +pdfjs-find-previous-button-label = Slědk +pdfjs-find-next-button = + .title = Pśidujuce wustupowanje pytańskego wuraza pytaś +pdfjs-find-next-button-label = Dalej +pdfjs-find-highlight-checkbox = Wšykne wuzwignuś +pdfjs-find-match-case-checkbox-label = Na wjelikopisanje źiwaś +pdfjs-find-match-diacritics-checkbox-label = Diakritiske znamuška wužywaś +pdfjs-find-entire-word-checkbox-label = Cełe słowa +pdfjs-find-reached-top = Zachopjeńk dokumenta dostany, pókšacujo se z kóńcom +pdfjs-find-reached-bottom = Kóńc dokumenta dostany, pókšacujo se ze zachopjeńkom +# 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 } z { $total } wótpowědnika + [two] { $current } z { $total } wótpowědnikowu + [few] { $current } z { $total } wótpowědnikow + *[other] { $current } z { $total } wótpowědnikow + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Wušej { $limit } wótpowědnik + [two] Wušej { $limit } wótpowědnika + [few] Wušej { $limit } wótpowědniki + *[other] Wušej { $limit } wótpowědniki + } +pdfjs-find-not-found = Pytański wuraz njejo se namakał + +## Predefined zoom values + +pdfjs-page-scale-width = Šyrokosć boka +pdfjs-page-scale-fit = Wjelikosć boka +pdfjs-page-scale-auto = Awtomatiske skalěrowanje +pdfjs-page-scale-actual = Aktualna wjelikosć +# 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 = Bok { $page } + +## Loading indicator messages + +pdfjs-loading-error = Pśi zacytowanju PDF jo zmólka nastała. +pdfjs-invalid-file-error = Njepłaśiwa abo wobškóźona PDF-dataja. +pdfjs-missing-file-error = Felujuca PDF-dataja. +pdfjs-unexpected-response-error = Njewócakane serwerowe wótegrono. +pdfjs-rendering-error = Pśi zwobraznjanju boka jo zmólka nastała. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Typ pśipiskow: { $type }] + +## Password + +pdfjs-password-label = Zapódajśo gronidło, aby PDF-dataju wócynił. +pdfjs-password-invalid = Njepłaśiwe gronidło. Pšosym wopytajśo hyšći raz. +pdfjs-password-ok-button = W pórěźe +pdfjs-password-cancel-button = Pśetergnuś +pdfjs-web-fonts-disabled = Webpisma su znjemóžnjone: njejo móžno, zasajźone PDF-pisma wužywaś. + +## Editing + +pdfjs-editor-free-text-button = + .title = Tekst +pdfjs-editor-free-text-button-label = Tekst +pdfjs-editor-ink-button = + .title = Kresliś +pdfjs-editor-ink-button-label = Kresliś +pdfjs-editor-stamp-button = + .title = Wobraze pśidaś abo wobźěłaś +pdfjs-editor-stamp-button-label = Wobraze pśidaś abo wobźěłaś +pdfjs-editor-highlight-button = + .title = Wuzwignuś +pdfjs-editor-highlight-button-label = Wuzwignuś +pdfjs-highlight-floating-button = + .title = Wuzwignjenje +pdfjs-highlight-floating-button1 = + .title = Wuzwignuś + .aria-label = Wuzwignuś +pdfjs-highlight-floating-button-label = Wuzwignuś + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Kreslanku wótwónoźeś +pdfjs-editor-remove-freetext-button = + .title = Tekst wótwónoźeś +pdfjs-editor-remove-stamp-button = + .title = Wobraz wótwónoźeś +pdfjs-editor-remove-highlight-button = + .title = Wuzwignjenje wótpóraś + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Barwa +pdfjs-editor-free-text-size-input = Wjelikosć +pdfjs-editor-ink-color-input = Barwa +pdfjs-editor-ink-thickness-input = Tłustosć +pdfjs-editor-ink-opacity-input = Opacita +pdfjs-editor-stamp-add-image-button = + .title = Wobraz pśidaś +pdfjs-editor-stamp-add-image-button-label = Wobraz pśidaś +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Tłustosć +pdfjs-editor-free-highlight-thickness-title = + .title = Tłustosć změniś, gaž se zapiski wuzwiguju, kótarež tekst njejsu +pdfjs-free-text = + .aria-label = Tekstowy editor +pdfjs-free-text-default-content = Zachopśo pisaś… +pdfjs-ink = + .aria-label = Kresleński editor +pdfjs-ink-canvas = + .aria-label = Wobraz napórany wót wužywarja + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alternatiwny tekst +pdfjs-editor-alt-text-edit-button-label = Alternatiwny tekst wobźěłaś +pdfjs-editor-alt-text-dialog-label = Nastajenje wubraś +pdfjs-editor-alt-text-dialog-description = Alternatiwny tekst pomaga, gaž luźe njamógu wobraz wiźeś abo gaž se wobraz njezacytajo. +pdfjs-editor-alt-text-add-description-label = Wopisanje pśidaś +pdfjs-editor-alt-text-add-description-description = Pišćo 1 sadu abo 2 saźe, kótarejž temu, nastajenje abo akcije wopisujotej. +pdfjs-editor-alt-text-mark-decorative-label = Ako dekoratiwny markěrowaś +pdfjs-editor-alt-text-mark-decorative-description = To se za pyšnjece wobraze wužywa, na pśikład ramiki abo wódowe znamjenja. +pdfjs-editor-alt-text-cancel-button = Pśetergnuś +pdfjs-editor-alt-text-save-button = Składowaś +pdfjs-editor-alt-text-decorative-tooltip = Ako dekoratiwny markěrowany +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Na pśikład, „Młody muski za blidom sejźi, aby jěź jědł“ + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Górjejce nalěwo – wjelikosć změniś +pdfjs-editor-resizer-label-top-middle = Górjejce wesrjejź – wjelikosć změniś +pdfjs-editor-resizer-label-top-right = Górjejce napšawo – wjelikosć změniś +pdfjs-editor-resizer-label-middle-right = Wesrjejź napšawo – wjelikosć změniś +pdfjs-editor-resizer-label-bottom-right = Dołojce napšawo – wjelikosć změniś +pdfjs-editor-resizer-label-bottom-middle = Dołojce wesrjejź – wjelikosć změniś +pdfjs-editor-resizer-label-bottom-left = Dołojce nalěwo – wjelikosć změniś +pdfjs-editor-resizer-label-middle-left = Wesrjejź nalěwo – wjelikosć změniś + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Barwa wuzwignjenja +pdfjs-editor-colorpicker-button = + .title = Barwu změniś +pdfjs-editor-colorpicker-dropdown = + .aria-label = Wuběrk barwow +pdfjs-editor-colorpicker-yellow = + .title = Žołty +pdfjs-editor-colorpicker-green = + .title = Zeleny +pdfjs-editor-colorpicker-blue = + .title = Módry +pdfjs-editor-colorpicker-pink = + .title = Pink +pdfjs-editor-colorpicker-red = + .title = Cerwjeny + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Wšykne pokazaś +pdfjs-editor-highlight-show-all-button = + .title = Wšykne pokazaś diff --git a/static/pdf.js/locale/dsb/viewer.properties b/static/pdf.js/locale/dsb/viewer.properties deleted file mode 100644 index 4094e149..00000000 --- a/static/pdf.js/locale/dsb/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Pjerwjejšny bok -previous_label=Slědk -next.title=Pśiducy bok -next_label=Dalej - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Bok -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=z {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} z {{pagesCount}}) - -zoom_out.title=Pómjeńšyś -zoom_out_label=Pómjeńšyś -zoom_in.title=Pówětšyś -zoom_in_label=Pówětšyś -zoom.title=Skalěrowanje -presentation_mode.title=Do prezentaciskego modusa pśejś -presentation_mode_label=Prezentaciski modus -open_file.title=Dataju wócyniś -open_file_label=Wócyniś -print.title=Śišćaś -print_label=Śišćaś -save.title=Składowaś -save_label=Składowaś -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Ześěgnuś -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Ześěgnuś -bookmark1.title=Aktualny bok (URL z aktualnego boka pokazaś) -bookmark1_label=Aktualny bok -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=W nałoženju wócyniś -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=W nałoženju wócyniś - -# Secondary toolbar and context menu -tools.title=Rědy -tools_label=Rědy -first_page.title=K prědnemu bokoju -first_page_label=K prědnemu bokoju -last_page.title=K slědnemu bokoju -last_page_label=K slědnemu bokoju -page_rotate_cw.title=Wobwjertnuś ako špěra źo -page_rotate_cw_label=Wobwjertnuś ako špěra źo -page_rotate_ccw.title=Wobwjertnuś nawopaki ako špěra źo -page_rotate_ccw_label=Wobwjertnuś nawopaki ako špěra źo - -cursor_text_select_tool.title=Rěd za wuběranje teksta zmóžniś -cursor_text_select_tool_label=Rěd za wuběranje teksta -cursor_hand_tool.title=Rucny rěd zmóžniś -cursor_hand_tool_label=Rucny rěd - -scroll_page.title=Kulanje boka wužywaś -scroll_page_label=Kulanje boka -scroll_vertical.title=Wertikalne suwanje wužywaś -scroll_vertical_label=Wertikalne suwanje -scroll_horizontal.title=Horicontalne suwanje wužywaś -scroll_horizontal_label=Horicontalne suwanje -scroll_wrapped.title=Pózlažke suwanje wužywaś -scroll_wrapped_label=Pózlažke suwanje - -spread_none.title=Boki njezwězaś -spread_none_label=Žeden dwójny bok -spread_odd.title=Boki zachopinajucy z njerownymi bokami zwězaś -spread_odd_label=Njerowne boki -spread_even.title=Boki zachopinajucy z rownymi bokami zwězaś -spread_even_label=Rowne boki - -# Document properties dialog box -document_properties.title=Dokumentowe kakosći… -document_properties_label=Dokumentowe kakosći… -document_properties_file_name=Mě dataje: -document_properties_file_size=Wjelikosć dataje: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bajtow) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bajtow) -document_properties_title=Titel: -document_properties_author=Awtor: -document_properties_subject=Tema: -document_properties_keywords=Klucowe słowa: -document_properties_creation_date=Datum napóranja: -document_properties_modification_date=Datum změny: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Awtor: -document_properties_producer=PDF-gótowaŕ: -document_properties_version=PDF-wersija: -document_properties_page_count=Licba bokow: -document_properties_page_size=Wjelikosć boka: -document_properties_page_size_unit_inches=col -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=wusoki format -document_properties_page_size_orientation_landscape=prěcny format -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Fast Web View: -document_properties_linearized_yes=Jo -document_properties_linearized_no=Ně -document_properties_close=Zacyniś - -print_progress_message=Dokument pśigótujo se za śišćanje… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Pśetergnuś - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Bócnicu pokazaś/schowaś -toggle_sidebar_notification2.title=Bocnicu pśešaltowaś (dokument rozrědowanje/pśipiski/warstwy wopśimujo) -toggle_sidebar_label=Bócnicu pokazaś/schowaś -document_outline.title=Dokumentowe naraźenje pokazaś (dwójne kliknjenje, aby se wšykne zapiski pokazali/schowali) -document_outline_label=Dokumentowa struktura -attachments.title=Pśidanki pokazaś -attachments_label=Pśidanki -layers.title=Warstwy pokazaś (klikniśo dwójcy, aby wšykne warstwy na standardny staw slědk stajił) -layers_label=Warstwy -thumbs.title=Miniatury pokazaś -thumbs_label=Miniatury -current_outline_item.title=Aktualny rozrědowański zapisk pytaś -current_outline_item_label=Aktualny rozrědowański zapisk -findbar.title=W dokumenśe pytaś -findbar_label=Pytaś - -additional_layers=Dalšne warstwy -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Bok {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Bok {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura boka {{page}} - -# Find panel button title and messages -find_input.title=Pytaś -find_input.placeholder=W dokumenśe pytaś… -find_previous.title=Pjerwjejšne wustupowanje pytańskego wuraza pytaś -find_previous_label=Slědk -find_next.title=Pśidujuce wustupowanje pytańskego wuraza pytaś -find_next_label=Dalej -find_highlight=Wšykne wuzwignuś -find_match_case_label=Na wjelikopisanje źiwaś -find_match_diacritics_label=Diakritiske znamuška wužywaś -find_entire_word_label=Cełe słowa -find_reached_top=Zachopjeńk dokumenta dostany, pókšacujo se z kóńcom -find_reached_bottom=Kóńc dokumenta dostany, pókšacujo se ze zachopjeńkom -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} z {{total}} wótpowědnika -find_match_count[two]={{current}} z {{total}} wótpowědnikowu -find_match_count[few]={{current}} z {{total}} wótpowědnikow -find_match_count[many]={{current}} z {{total}} wótpowědnikow -find_match_count[other]={{current}} z {{total}} wótpowědnikow -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Wěcej ako {{limit}} wótpowědnikow -find_match_count_limit[one]=Wěcej ako {{limit}} wótpowědnik -find_match_count_limit[two]=Wěcej ako {{limit}} wótpowědnika -find_match_count_limit[few]=Wěcej ako {{limit}} wótpowědniki -find_match_count_limit[many]=Wěcej ako {{limit}} wótpowědnikow -find_match_count_limit[other]=Wěcej ako {{limit}} wótpowědnikow -find_not_found=Pytański wuraz njejo se namakał - -# Predefined zoom values -page_scale_width=Šyrokosć boka -page_scale_fit=Wjelikosć boka -page_scale_auto=Awtomatiske skalěrowanje -page_scale_actual=Aktualna wjelikosć -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Pśi zacytowanju PDF jo zmólka nastała. -invalid_file_error=Njepłaśiwa abo wobškóźona PDF-dataja. -missing_file_error=Felujuca PDF-dataja. -unexpected_response_error=Njewócakane serwerowe wótegrono. -rendering_error=Pśi zwobraznjanju boka jo zmólka nastała. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Typ pśipiskow: {{type}}] -password_label=Zapódajśo gronidło, aby PDF-dataju wócynił. -password_invalid=Njepłaśiwe gronidło. Pšosym wopytajśo hyšći raz. -password_ok=W pórěźe -password_cancel=Pśetergnuś - -printing_not_supported=Warnowanje: Śišćanje njepódpěra se połnje pśez toś ten wobglědowak. -printing_not_ready=Warnowanje: PDF njejo se za śišćanje dopołnje zacytał. -web_fonts_disabled=Webpisma su znjemóžnjone: njejo móžno, zasajźone PDF-pisma wužywaś. - -# Editor -editor_free_text2.title=Tekst -editor_free_text2_label=Tekst -editor_ink2.title=Kresliś -editor_ink2_label=Kresliś - -editor_stamp1.title=Wobraze pśidaś abo wobźěłaś -editor_stamp1_label=Wobraze pśidaś abo wobźěłaś - -free_text2_default_content=Zachopśo pisaś… - -# Editor Parameters -editor_free_text_color=Barwa -editor_free_text_size=Wjelikosć -editor_ink_color=Barwa -editor_ink_thickness=Tłustosć -editor_ink_opacity=Opacita - -editor_stamp_add_image_label=Wobraz pśidaś -editor_stamp_add_image.title=Wobraz pśidaś - -# Editor aria -editor_free_text2_aria_label=Tekstowy editor -editor_ink2_aria_label=Kresleński editor -editor_ink_canvas_aria_label=Wobraz napórany wót wužywarja - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Alternatiwny tekst -editor_alt_text_edit_button_label=Alternatiwny tekst wobźěłaś -editor_alt_text_dialog_label=Nastajenje wubraś -editor_alt_text_dialog_description=Alternatiwny tekst pomaga, gaž luźe njamógu wobraz wiźeś abo gaž se wobraz njezacytajo. -editor_alt_text_add_description_label=Wopisanje pśidaś -editor_alt_text_add_description_description=Pišćo 1 sadu abo 2 saźe, kótarejž temu, nastajenje abo akcije wopisujotej. -editor_alt_text_mark_decorative_label=Ako dekoratiwny markěrowaś -editor_alt_text_mark_decorative_description=To se za pyšnjece wobraze wužywa, na pśikład ramiki abo wódowe znamjenja. -editor_alt_text_cancel_button=Pśetergnuś -editor_alt_text_save_button=Składowaś -editor_alt_text_decorative_tooltip=Ako dekoratiwny markěrowany -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=Na pśikład, „Młody muski za blidom sejźi, aby jěź jědł“ diff --git a/static/pdf.js/locale/el/viewer.ftl b/static/pdf.js/locale/el/viewer.ftl new file mode 100644 index 00000000..96d9dc36 --- /dev/null +++ b/static/pdf.js/locale/el/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = Εναλλαγή σε λειτουργία παρουσίασης +pdfjs-presentation-mode-button-label = Λειτουργία παρουσίασης +pdfjs-open-file-button = + .title = Άνοιγμα αρχείου +pdfjs-open-file-button-label = Άνοιγμα +pdfjs-print-button = + .title = Εκτύπωση +pdfjs-print-button-label = Εκτύπωση +pdfjs-save-button = + .title = Αποθήκευση +pdfjs-save-button-label = Αποθήκευση +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Λήψη +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = Λήψη +pdfjs-bookmark-button = + .title = Τρέχουσα σελίδα (Προβολή URL από τρέχουσα σελίδα) +pdfjs-bookmark-button-label = Τρέχουσα σελίδα +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Άνοιγμα σε εφαρμογή +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-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 = Κυκλική κύλιση +pdfjs-spread-none-button = + .title = Να μη γίνει σύνδεση επεκτάσεων σελίδων +pdfjs-spread-none-button-label = Χωρίς επεκτάσεις +pdfjs-spread-odd-button = + .title = Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις μονές σελίδες +pdfjs-spread-odd-button-label = Μονές επεκτάσεις +pdfjs-spread-even-button = + .title = Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις ζυγές σελίδες +pdfjs-spread-even-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 = Μέγεθος αρχείου: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Τίτλος: +pdfjs-document-properties-author = Συγγραφέας: +pdfjs-document-properties-subject = Θέμα: +pdfjs-document-properties-keywords = Λέξεις-κλειδιά: +pdfjs-document-properties-creation-date = Ημερομηνία δημιουργίας: +pdfjs-document-properties-modification-date = Ημερομηνία τροποποίησης: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = mm +pdfjs-document-properties-page-size-orientation-portrait = κατακόρυφα +pdfjs-document-properties-page-size-orientation-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 = Τύπου Legal + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = Ταχεία προβολή ιστού: +pdfjs-document-properties-linearized-yes = Ναι +pdfjs-document-properties-linearized-no = Όχι +pdfjs-document-properties-close-button = Κλείσιμο + +## Print + +pdfjs-print-progress-message = Προετοιμασία του εγγράφου για εκτύπωση… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Ακύρωση +pdfjs-printing-not-supported = Προειδοποίηση: Η εκτύπωση δεν υποστηρίζεται πλήρως από το πρόγραμμα περιήγησης. +pdfjs-printing-not-ready = Προειδοποίηση: Το PDF δεν φορτώθηκε πλήρως για εκτύπωση. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = (Απ)ενεργοποίηση πλαϊνής γραμμής +pdfjs-toggle-sidebar-notification-button = + .title = (Απ)ενεργοποίηση πλαϊνής γραμμής (το έγγραφο περιέχει περίγραμμα/συνημμένα/επίπεδα) +pdfjs-toggle-sidebar-button-label = (Απ)ενεργοποίηση πλαϊνής γραμμής +pdfjs-document-outline-button = + .title = Εμφάνιση διάρθρωσης εγγράφου (διπλό κλικ για ανάπτυξη/σύμπτυξη όλων των στοιχείων) +pdfjs-document-outline-button-label = Διάρθρωση εγγράφου +pdfjs-attachments-button = + .title = Εμφάνιση συνημμένων +pdfjs-attachments-button-label = Συνημμένα +pdfjs-layers-button = + .title = Εμφάνιση επιπέδων (διπλό κλικ για επαναφορά όλων των επιπέδων στην προεπιλεγμένη κατάσταση) +pdfjs-layers-button-label = Επίπεδα +pdfjs-thumbs-button = + .title = Εμφάνιση μικρογραφιών +pdfjs-thumbs-button-label = Μικρογραφίες +pdfjs-current-outline-item-button = + .title = Εύρεση τρέχοντος στοιχείου διάρθρωσης +pdfjs-current-outline-item-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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Μικρογραφία σελίδας { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Εύρεση + .placeholder = Εύρεση στο έγγραφο… +pdfjs-find-previous-button = + .title = Εύρεση της προηγούμενης εμφάνισης της φράσης +pdfjs-find-previous-button-label = Προηγούμενο +pdfjs-find-next-button = + .title = Εύρεση της επόμενης εμφάνισης της φράσης +pdfjs-find-next-button-label = Επόμενο +pdfjs-find-highlight-checkbox = Επισήμανση όλων +pdfjs-find-match-case-checkbox-label = Συμφωνία πεζών/κεφαλαίων +pdfjs-find-match-diacritics-checkbox-label = Αντιστοίχιση διακριτικών +pdfjs-find-entire-word-checkbox-label = Ολόκληρες λέξεις +pdfjs-find-reached-top = Φτάσατε στην αρχή του εγγράφου, συνέχεια από το τέλος +pdfjs-find-reached-bottom = Φτάσατε στο τέλος του εγγράφου, συνέχεια από την αρχή +# 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 } από { $total } αντιστοιχία + *[other] { $current } από { $total } αντιστοιχίες + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Περισσότερες από { $limit } αντιστοιχία + *[other] Περισσότερες από { $limit } αντιστοιχίες + } +pdfjs-find-not-found = Η φράση δεν βρέθηκε + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = Προέκυψε σφάλμα κατά τη φόρτωση του PDF. +pdfjs-invalid-file-error = Μη έγκυρο ή κατεστραμμένο αρχείο PDF. +pdfjs-missing-file-error = Λείπει αρχείο PDF. +pdfjs-unexpected-response-error = Μη αναμενόμενη απόκριση από το διακομιστή. +pdfjs-rendering-error = Προέκυψε σφάλμα κατά την εμφάνιση της σελίδας. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Σχόλιο «{ $type }»] + +## Password + +pdfjs-password-label = Εισαγάγετε τον κωδικό πρόσβασης για να ανοίξετε αυτό το αρχείο PDF. +pdfjs-password-invalid = Μη έγκυρος κωδικός πρόσβασης. Παρακαλώ δοκιμάστε ξανά. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Ακύρωση +pdfjs-web-fonts-disabled = Οι γραμματοσειρές ιστού είναι ανενεργές: δεν είναι δυνατή η χρήση των ενσωματωμένων γραμματοσειρών PDF. + +## Editing + +pdfjs-editor-free-text-button = + .title = Κείμενο +pdfjs-editor-free-text-button-label = Κείμενο +pdfjs-editor-ink-button = + .title = Σχέδιο +pdfjs-editor-ink-button-label = Σχέδιο +pdfjs-editor-stamp-button = + .title = Προσθήκη ή επεξεργασία εικόνων +pdfjs-editor-stamp-button-label = Προσθήκη ή επεξεργασία εικόνων +pdfjs-editor-highlight-button = + .title = Επισήμανση +pdfjs-editor-highlight-button-label = Επισήμανση +pdfjs-highlight-floating-button = + .title = Επισήμανση +pdfjs-highlight-floating-button1 = + .title = Επισήμανση + .aria-label = Επισήμανση +pdfjs-highlight-floating-button-label = Επισήμανση + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Αφαίρεση σχεδίου +pdfjs-editor-remove-freetext-button = + .title = Αφαίρεση κειμένου +pdfjs-editor-remove-stamp-button = + .title = Αφαίρεση εικόνας +pdfjs-editor-remove-highlight-button = + .title = Αφαίρεση επισήμανσης + +## + +# 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 = Αδιαφάνεια +pdfjs-editor-stamp-add-image-button = + .title = Προσθήκη εικόνας +pdfjs-editor-stamp-add-image-button-label = Προσθήκη εικόνας +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Πάχος +pdfjs-editor-free-highlight-thickness-title = + .title = Αλλαγή πάχους κατά την επισήμανση στοιχείων εκτός κειμένου +pdfjs-free-text = + .aria-label = Επεξεργασία κειμένου +pdfjs-free-text-default-content = Ξεκινήστε να πληκτρολογείτε… +pdfjs-ink = + .aria-label = Επεξεργασία σχεδίων +pdfjs-ink-canvas = + .aria-label = Εικόνα από τον χρήστη + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Εναλλακτικό κείμενο +pdfjs-editor-alt-text-edit-button-label = Επεξεργασία εναλλακτικού κειμένου +pdfjs-editor-alt-text-dialog-label = Διαλέξτε μια επιλογή +pdfjs-editor-alt-text-dialog-description = Το εναλλακτικό κείμενο είναι χρήσιμο όταν οι άνθρωποι δεν μπορούν να δουν την εικόνα ή όταν αυτή δεν φορτώνεται. +pdfjs-editor-alt-text-add-description-label = Προσθήκη περιγραφής +pdfjs-editor-alt-text-add-description-description = Στοχεύστε σε μία ή δύο προτάσεις που περιγράφουν το θέμα, τη ρύθμιση ή τις ενέργειες. +pdfjs-editor-alt-text-mark-decorative-label = Επισήμανση ως διακοσμητικό +pdfjs-editor-alt-text-mark-decorative-description = Χρησιμοποιείται για διακοσμητικές εικόνες, όπως περιγράμματα ή υδατογραφήματα. +pdfjs-editor-alt-text-cancel-button = Ακύρωση +pdfjs-editor-alt-text-save-button = Αποθήκευση +pdfjs-editor-alt-text-decorative-tooltip = Επισημασμένο ως διακοσμητικό +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Για παράδειγμα, «Ένας νεαρός άνδρας κάθεται σε ένα τραπέζι για να φάει ένα γεύμα» + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Επάνω αριστερή γωνία — αλλαγή μεγέθους +pdfjs-editor-resizer-label-top-middle = Μέσο επάνω πλευράς — αλλαγή μεγέθους +pdfjs-editor-resizer-label-top-right = Επάνω δεξιά γωνία — αλλαγή μεγέθους +pdfjs-editor-resizer-label-middle-right = Μέσο δεξιάς πλευράς — αλλαγή μεγέθους +pdfjs-editor-resizer-label-bottom-right = Κάτω δεξιά γωνία — αλλαγή μεγέθους +pdfjs-editor-resizer-label-bottom-middle = Μέσο κάτω πλευράς — αλλαγή μεγέθους +pdfjs-editor-resizer-label-bottom-left = Κάτω αριστερή γωνία — αλλαγή μεγέθους +pdfjs-editor-resizer-label-middle-left = Μέσο αριστερής πλευράς — αλλαγή μεγέθους + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Χρώμα επισήμανσης +pdfjs-editor-colorpicker-button = + .title = Αλλαγή χρώματος +pdfjs-editor-colorpicker-dropdown = + .aria-label = Επιλογές χρωμάτων +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 = Εμφάνιση όλων diff --git a/static/pdf.js/locale/el/viewer.properties b/static/pdf.js/locale/el/viewer.properties deleted file mode 100644 index e28ab7f2..00000000 --- a/static/pdf.js/locale/el/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Προηγούμενη σελίδα -previous_label=Προηγούμενη -next.title=Επόμενη σελίδα -next_label=Επόμενη - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Σελίδα -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=από {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} από {{pagesCount}}) - -zoom_out.title=Σμίκρυνση -zoom_out_label=Σμίκρυνση -zoom_in.title=Μεγέθυνση -zoom_in_label=Μεγέθυνση -zoom.title=Ζουμ -presentation_mode.title=Εναλλαγή σε λειτουργία παρουσίασης -presentation_mode_label=Λειτουργία παρουσίασης -open_file.title=Άνοιγμα αρχείου -open_file_label=Άνοιγμα -print.title=Εκτύπωση -print_label=Εκτύπωση -save.title=Αποθήκευση -save_label=Αποθήκευση -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Λήψη -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Λήψη -bookmark1.title=Τρέχουσα σελίδα (Προβολή URL από τρέχουσα σελίδα) -bookmark1_label=Τρέχουσα σελίδα -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Άνοιγμα σε εφαρμογή -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Άνοιγμα σε εφαρμογή - -# Secondary toolbar and context menu -tools.title=Εργαλεία -tools_label=Εργαλεία -first_page.title=Μετάβαση στην πρώτη σελίδα -first_page_label=Μετάβαση στην πρώτη σελίδα -last_page.title=Μετάβαση στην τελευταία σελίδα -last_page_label=Μετάβαση στην τελευταία σελίδα -page_rotate_cw.title=Δεξιόστροφη περιστροφή -page_rotate_cw_label=Δεξιόστροφη περιστροφή -page_rotate_ccw.title=Αριστερόστροφη περιστροφή -page_rotate_ccw_label=Αριστερόστροφη περιστροφή - -cursor_text_select_tool.title=Ενεργοποίηση εργαλείου επιλογής κειμένου -cursor_text_select_tool_label=Εργαλείο επιλογής κειμένου -cursor_hand_tool.title=Ενεργοποίηση εργαλείου χεριού -cursor_hand_tool_label=Εργαλείο χεριού - -scroll_page.title=Χρήση κύλισης σελίδας -scroll_page_label=Κύλιση σελίδας -scroll_vertical.title=Χρήση κάθετης κύλισης -scroll_vertical_label=Κάθετη κύλιση -scroll_horizontal.title=Χρήση οριζόντιας κύλισης -scroll_horizontal_label=Οριζόντια κύλιση -scroll_wrapped.title=Χρήση κυκλικής κύλισης -scroll_wrapped_label=Κυκλική κύλιση - -spread_none.title=Να μη γίνει σύνδεση επεκτάσεων σελίδων -spread_none_label=Χωρίς επεκτάσεις -spread_odd.title=Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις μονές σελίδες -spread_odd_label=Μονές επεκτάσεις -spread_even.title=Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις ζυγές σελίδες -spread_even_label=Ζυγές επεκτάσεις - -# Document properties dialog box -document_properties.title=Ιδιότητες εγγράφου… -document_properties_label=Ιδιότητες εγγράφου… -document_properties_file_name=Όνομα αρχείου: -document_properties_file_size=Μέγεθος αρχείου: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Τίτλος: -document_properties_author=Συγγραφέας: -document_properties_subject=Θέμα: -document_properties_keywords=Λέξεις-κλειδιά: -document_properties_creation_date=Ημερομηνία δημιουργίας: -document_properties_modification_date=Ημερομηνία τροποποίησης: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Δημιουργός: -document_properties_producer=Παραγωγός PDF: -document_properties_version=Έκδοση PDF: -document_properties_page_count=Αριθμός σελίδων: -document_properties_page_size=Μέγεθος σελίδας: -document_properties_page_size_unit_inches=ίντσες -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=κατακόρυφα -document_properties_page_size_orientation_landscape=οριζόντια -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Επιστολή -document_properties_page_size_name_legal=Τύπου Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Ταχεία προβολή ιστού: -document_properties_linearized_yes=Ναι -document_properties_linearized_no=Όχι -document_properties_close=Κλείσιμο - -print_progress_message=Προετοιμασία του εγγράφου για εκτύπωση… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Ακύρωση - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=(Απ)ενεργοποίηση πλαϊνής γραμμής -toggle_sidebar_notification2.title=(Απ)ενεργοποίηση πλαϊνής γραμμής (το έγγραφο περιέχει περίγραμμα/συνημμένα/επίπεδα) -toggle_sidebar_label=(Απ)ενεργοποίηση πλαϊνής γραμμής -document_outline.title=Εμφάνιση διάρθρωσης εγγράφου (διπλό κλικ για ανάπτυξη/σύμπτυξη όλων των στοιχείων) -document_outline_label=Διάρθρωση εγγράφου -attachments.title=Εμφάνιση συνημμένων -attachments_label=Συνημμένα -layers.title=Εμφάνιση επιπέδων (διπλό κλικ για επαναφορά όλων των επιπέδων στην προεπιλεγμένη κατάσταση) -layers_label=Επίπεδα -thumbs.title=Εμφάνιση μικρογραφιών -thumbs_label=Μικρογραφίες -current_outline_item.title=Εύρεση τρέχοντος στοιχείου διάρθρωσης -current_outline_item_label=Τρέχον στοιχείο διάρθρωσης -findbar.title=Εύρεση στο έγγραφο -findbar_label=Εύρεση - -additional_layers=Επιπρόσθετα επίπεδα -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Σελίδα {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Σελίδα {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Μικρογραφία σελίδας {{page}} - -# Find panel button title and messages -find_input.title=Εύρεση -find_input.placeholder=Εύρεση στο έγγραφο… -find_previous.title=Εύρεση της προηγούμενης εμφάνισης της φράσης -find_previous_label=Προηγούμενο -find_next.title=Εύρεση της επόμενης εμφάνισης της φράσης -find_next_label=Επόμενο -find_highlight=Επισήμανση όλων -find_match_case_label=Συμφωνία πεζών/κεφαλαίων -find_match_diacritics_label=Αντιστοίχιση διακριτικών -find_entire_word_label=Ολόκληρες λέξεις -find_reached_top=Φτάσατε στην αρχή του εγγράφου, συνέχεια από το τέλος -find_reached_bottom=Φτάσατε στο τέλος του εγγράφου, συνέχεια από την αρχή -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} από {{total}} αντιστοιχία -find_match_count[two]={{current}} από {{total}} αντιστοιχίες -find_match_count[few]={{current}} από {{total}} αντιστοιχίες -find_match_count[many]={{current}} από {{total}} αντιστοιχίες -find_match_count[other]={{current}} από {{total}} αντιστοιχίες -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Περισσότερες από {{limit}} αντιστοιχίες -find_match_count_limit[one]=Περισσότερες από {{limit}} αντιστοιχία -find_match_count_limit[two]=Περισσότερες από {{limit}} αντιστοιχίες -find_match_count_limit[few]=Περισσότερες από {{limit}} αντιστοιχίες -find_match_count_limit[many]=Περισσότερες από {{limit}} αντιστοιχίες -find_match_count_limit[other]=Περισσότερες από {{limit}} αντιστοιχίες -find_not_found=Η φράση δεν βρέθηκε - -# Predefined zoom values -page_scale_width=Πλάτος σελίδας -page_scale_fit=Μέγεθος σελίδας -page_scale_auto=Αυτόματο ζουμ -page_scale_actual=Πραγματικό μέγεθος -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Προέκυψε σφάλμα κατά τη φόρτωση του PDF. -invalid_file_error=Μη έγκυρο ή κατεστραμμένο αρχείο PDF. -missing_file_error=Λείπει αρχείο PDF. -unexpected_response_error=Μη αναμενόμενη απόκριση από το διακομιστή. -rendering_error=Προέκυψε σφάλμα κατά την εμφάνιση της σελίδας. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Σχόλιο «{{type}}»] -password_label=Εισαγάγετε τον κωδικό πρόσβασης για να ανοίξετε αυτό το αρχείο PDF. -password_invalid=Μη έγκυρος κωδικός πρόσβασης. Παρακαλώ δοκιμάστε ξανά. -password_ok=OK -password_cancel=Ακύρωση - -printing_not_supported=Προειδοποίηση: Η εκτύπωση δεν υποστηρίζεται πλήρως από το πρόγραμμα περιήγησης. -printing_not_ready=Προειδοποίηση: Το PDF δεν φορτώθηκε πλήρως για εκτύπωση. -web_fonts_disabled=Οι γραμματοσειρές ιστού είναι ανενεργές: δεν είναι δυνατή η χρήση των ενσωματωμένων γραμματοσειρών PDF. - -# Editor -editor_free_text2.title=Κείμενο -editor_free_text2_label=Κείμενο -editor_ink2.title=Σχέδιο -editor_ink2_label=Σχέδιο - -editor_stamp.title=Προσθήκη εικόνας -editor_stamp_label=Προσθήκη εικόνας - -editor_stamp1.title=Προσθήκη ή επεξεργασία εικόνων -editor_stamp1_label=Προσθήκη ή επεξεργασία εικόνων - -free_text2_default_content=Ξεκινήστε να πληκτρολογείτε… - -# Editor Parameters -editor_free_text_color=Χρώμα -editor_free_text_size=Μέγεθος -editor_ink_color=Χρώμα -editor_ink_thickness=Πάχος -editor_ink_opacity=Αδιαφάνεια - -editor_stamp_add_image_label=Προσθήκη εικόνας -editor_stamp_add_image.title=Προσθήκη εικόνας - -# Editor aria -editor_free_text2_aria_label=Επεξεργασία κειμένου -editor_ink2_aria_label=Επεξεργασία σχεδίων -editor_ink_canvas_aria_label=Εικόνα από τον χρήστη diff --git a/static/pdf.js/locale/en-CA/viewer.ftl b/static/pdf.js/locale/en-CA/viewer.ftl new file mode 100644 index 00000000..f87104e7 --- /dev/null +++ b/static/pdf.js/locale/en-CA/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Previous Page +pdfjs-previous-button-label = Previous +pdfjs-next-button = + .title = Next Page +pdfjs-next-button-label = Next +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Page +# 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 = of { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zoom Out +pdfjs-zoom-out-button-label = Zoom Out +pdfjs-zoom-in-button = + .title = Zoom In +pdfjs-zoom-in-button-label = Zoom In +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Switch to Presentation Mode +pdfjs-presentation-mode-button-label = Presentation Mode +pdfjs-open-file-button = + .title = Open File +pdfjs-open-file-button-label = Open +pdfjs-print-button = + .title = Print +pdfjs-print-button-label = Print +pdfjs-save-button = + .title = Save +pdfjs-save-button-label = Save +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Download +# 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 = Download +pdfjs-bookmark-button = + .title = Current Page (View URL from Current Page) +pdfjs-bookmark-button-label = Current Page +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Open in app +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Open in app + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Tools +pdfjs-tools-button-label = Tools +pdfjs-first-page-button = + .title = Go to First Page +pdfjs-first-page-button-label = Go to First Page +pdfjs-last-page-button = + .title = Go to Last Page +pdfjs-last-page-button-label = Go to Last Page +pdfjs-page-rotate-cw-button = + .title = Rotate Clockwise +pdfjs-page-rotate-cw-button-label = Rotate Clockwise +pdfjs-page-rotate-ccw-button = + .title = Rotate Counterclockwise +pdfjs-page-rotate-ccw-button-label = Rotate Counterclockwise +pdfjs-cursor-text-select-tool-button = + .title = Enable Text Selection Tool +pdfjs-cursor-text-select-tool-button-label = Text Selection Tool +pdfjs-cursor-hand-tool-button = + .title = Enable Hand Tool +pdfjs-cursor-hand-tool-button-label = Hand Tool +pdfjs-scroll-page-button = + .title = Use Page Scrolling +pdfjs-scroll-page-button-label = Page Scrolling +pdfjs-scroll-vertical-button = + .title = Use Vertical Scrolling +pdfjs-scroll-vertical-button-label = Vertical Scrolling +pdfjs-scroll-horizontal-button = + .title = Use Horizontal Scrolling +pdfjs-scroll-horizontal-button-label = Horizontal Scrolling +pdfjs-scroll-wrapped-button = + .title = Use Wrapped Scrolling +pdfjs-scroll-wrapped-button-label = Wrapped Scrolling +pdfjs-spread-none-button = + .title = Do not join page spreads +pdfjs-spread-none-button-label = No Spreads +pdfjs-spread-odd-button = + .title = Join page spreads starting with odd-numbered pages +pdfjs-spread-odd-button-label = Odd Spreads +pdfjs-spread-even-button = + .title = Join page spreads starting with even-numbered pages +pdfjs-spread-even-button-label = Even Spreads + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Document Properties… +pdfjs-document-properties-button-label = Document Properties… +pdfjs-document-properties-file-name = File name: +pdfjs-document-properties-file-size = File size: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } kB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Title: +pdfjs-document-properties-author = Author: +pdfjs-document-properties-subject = Subject: +pdfjs-document-properties-keywords = Keywords: +pdfjs-document-properties-creation-date = Creation Date: +pdfjs-document-properties-modification-date = Modification Date: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Creator: +pdfjs-document-properties-producer = PDF Producer: +pdfjs-document-properties-version = PDF Version: +pdfjs-document-properties-page-count = Page Count: +pdfjs-document-properties-page-size = Page Size: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +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 = Letter +pdfjs-document-properties-page-size-name-legal = 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 = Fast Web View: +pdfjs-document-properties-linearized-yes = Yes +pdfjs-document-properties-linearized-no = No +pdfjs-document-properties-close-button = Close + +## Print + +pdfjs-print-progress-message = Preparing document for printing… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Cancel +pdfjs-printing-not-supported = Warning: Printing is not fully supported by this browser. +pdfjs-printing-not-ready = Warning: The PDF is not fully loaded for printing. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Toggle Sidebar +pdfjs-toggle-sidebar-notification-button = + .title = Toggle Sidebar (document contains outline/attachments/layers) +pdfjs-toggle-sidebar-button-label = Toggle Sidebar +pdfjs-document-outline-button = + .title = Show Document Outline (double-click to expand/collapse all items) +pdfjs-document-outline-button-label = Document Outline +pdfjs-attachments-button = + .title = Show Attachments +pdfjs-attachments-button-label = Attachments +pdfjs-layers-button = + .title = Show Layers (double-click to reset all layers to the default state) +pdfjs-layers-button-label = Layers +pdfjs-thumbs-button = + .title = Show Thumbnails +pdfjs-thumbs-button-label = Thumbnails +pdfjs-current-outline-item-button = + .title = Find Current Outline Item +pdfjs-current-outline-item-button-label = Current Outline Item +pdfjs-findbar-button = + .title = Find in Document +pdfjs-findbar-button-label = Find +pdfjs-additional-layers = Additional Layers + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Page { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Thumbnail of Page { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Find + .placeholder = Find in document… +pdfjs-find-previous-button = + .title = Find the previous occurrence of the phrase +pdfjs-find-previous-button-label = Previous +pdfjs-find-next-button = + .title = Find the next occurrence of the phrase +pdfjs-find-next-button-label = Next +pdfjs-find-highlight-checkbox = Highlight All +pdfjs-find-match-case-checkbox-label = Match Case +pdfjs-find-match-diacritics-checkbox-label = Match Diacritics +pdfjs-find-entire-word-checkbox-label = Whole Words +pdfjs-find-reached-top = Reached top of document, continued from bottom +pdfjs-find-reached-bottom = Reached end of document, continued from top +# 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 } of { $total } match + *[other] { $current } of { $total } matches + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] More than { $limit } match + *[other] More than { $limit } matches + } +pdfjs-find-not-found = Phrase not found + +## Predefined zoom values + +pdfjs-page-scale-width = Page Width +pdfjs-page-scale-fit = Page Fit +pdfjs-page-scale-auto = Automatic Zoom +pdfjs-page-scale-actual = Actual Size +# 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 { $page } + +## Loading indicator messages + +pdfjs-loading-error = An error occurred while loading the PDF. +pdfjs-invalid-file-error = Invalid or corrupted PDF file. +pdfjs-missing-file-error = Missing PDF file. +pdfjs-unexpected-response-error = Unexpected server response. +pdfjs-rendering-error = An error occurred while rendering the page. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Annotation] + +## Password + +pdfjs-password-label = Enter the password to open this PDF file. +pdfjs-password-invalid = Invalid password. Please try again. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Cancel +pdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts. + +## Editing + +pdfjs-editor-free-text-button = + .title = Text +pdfjs-editor-free-text-button-label = Text +pdfjs-editor-ink-button = + .title = Draw +pdfjs-editor-ink-button-label = Draw +pdfjs-editor-stamp-button = + .title = Add or edit images +pdfjs-editor-stamp-button-label = Add or edit images +pdfjs-editor-highlight-button = + .title = Highlight +pdfjs-editor-highlight-button-label = Highlight +pdfjs-highlight-floating-button = + .title = Highlight +pdfjs-highlight-floating-button1 = + .title = Highlight + .aria-label = Highlight +pdfjs-highlight-floating-button-label = Highlight + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Remove drawing +pdfjs-editor-remove-freetext-button = + .title = Remove text +pdfjs-editor-remove-stamp-button = + .title = Remove image +pdfjs-editor-remove-highlight-button = + .title = Remove highlight + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Colour +pdfjs-editor-free-text-size-input = Size +pdfjs-editor-ink-color-input = Colour +pdfjs-editor-ink-thickness-input = Thickness +pdfjs-editor-ink-opacity-input = Opacity +pdfjs-editor-stamp-add-image-button = + .title = Add image +pdfjs-editor-stamp-add-image-button-label = Add image +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Thickness +pdfjs-editor-free-highlight-thickness-title = + .title = Change thickness when highlighting items other than text +pdfjs-free-text = + .aria-label = Text Editor +pdfjs-free-text-default-content = Start typing… +pdfjs-ink = + .aria-label = Draw Editor +pdfjs-ink-canvas = + .aria-label = User-created image + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alt text +pdfjs-editor-alt-text-edit-button-label = Edit alt text +pdfjs-editor-alt-text-dialog-label = Choose an option +pdfjs-editor-alt-text-dialog-description = Alt text (alternative text) helps when people can’t see the image or when it doesn’t load. +pdfjs-editor-alt-text-add-description-label = Add a description +pdfjs-editor-alt-text-add-description-description = Aim for 1-2 sentences that describe the subject, setting, or actions. +pdfjs-editor-alt-text-mark-decorative-label = Mark as decorative +pdfjs-editor-alt-text-mark-decorative-description = This is used for ornamental images, like borders or watermarks. +pdfjs-editor-alt-text-cancel-button = Cancel +pdfjs-editor-alt-text-save-button = Save +pdfjs-editor-alt-text-decorative-tooltip = Marked as decorative +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = For example, “A young man sits down at a table to eat a meal” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Top left corner — resize +pdfjs-editor-resizer-label-top-middle = Top middle — resize +pdfjs-editor-resizer-label-top-right = Top right corner — resize +pdfjs-editor-resizer-label-middle-right = Middle right — resize +pdfjs-editor-resizer-label-bottom-right = Bottom right corner — resize +pdfjs-editor-resizer-label-bottom-middle = Bottom middle — resize +pdfjs-editor-resizer-label-bottom-left = Bottom left corner — resize +pdfjs-editor-resizer-label-middle-left = Middle left — resize + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Highlight colour +pdfjs-editor-colorpicker-button = + .title = Change colour +pdfjs-editor-colorpicker-dropdown = + .aria-label = Colour choices +pdfjs-editor-colorpicker-yellow = + .title = Yellow +pdfjs-editor-colorpicker-green = + .title = Green +pdfjs-editor-colorpicker-blue = + .title = Blue +pdfjs-editor-colorpicker-pink = + .title = Pink +pdfjs-editor-colorpicker-red = + .title = Red + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Show all +pdfjs-editor-highlight-show-all-button = + .title = Show all diff --git a/static/pdf.js/locale/en-CA/viewer.properties b/static/pdf.js/locale/en-CA/viewer.properties deleted file mode 100644 index 8e10fcfb..00000000 --- a/static/pdf.js/locale/en-CA/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Previous Page -previous_label=Previous -next.title=Next Page -next_label=Next - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Page -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=of {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} of {{pagesCount}}) - -zoom_out.title=Zoom Out -zoom_out_label=Zoom Out -zoom_in.title=Zoom In -zoom_in_label=Zoom In -zoom.title=Zoom -presentation_mode.title=Switch to Presentation Mode -presentation_mode_label=Presentation Mode -open_file.title=Open File -open_file_label=Open -print.title=Print -print_label=Print -save.title=Save -save_label=Save -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Download -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Download -bookmark1.title=Current Page (View URL from Current Page) -bookmark1_label=Current Page -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Open in app -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Open in app - -# Secondary toolbar and context menu -tools.title=Tools -tools_label=Tools -first_page.title=Go to First Page -first_page_label=Go to First Page -last_page.title=Go to Last Page -last_page_label=Go to Last Page -page_rotate_cw.title=Rotate Clockwise -page_rotate_cw_label=Rotate Clockwise -page_rotate_ccw.title=Rotate Counterclockwise -page_rotate_ccw_label=Rotate Counterclockwise - -cursor_text_select_tool.title=Enable Text Selection Tool -cursor_text_select_tool_label=Text Selection Tool -cursor_hand_tool.title=Enable Hand Tool -cursor_hand_tool_label=Hand Tool - -scroll_page.title=Use Page Scrolling -scroll_page_label=Page Scrolling -scroll_vertical.title=Use Vertical Scrolling -scroll_vertical_label=Vertical Scrolling -scroll_horizontal.title=Use Horizontal Scrolling -scroll_horizontal_label=Horizontal Scrolling -scroll_wrapped.title=Use Wrapped Scrolling -scroll_wrapped_label=Wrapped Scrolling - -spread_none.title=Do not join page spreads -spread_none_label=No Spreads -spread_odd.title=Join page spreads starting with odd-numbered pages -spread_odd_label=Odd Spreads -spread_even.title=Join page spreads starting with even-numbered pages -spread_even_label=Even Spreads - -# Document properties dialog box -document_properties.title=Document Properties… -document_properties_label=Document Properties… -document_properties_file_name=File name: -document_properties_file_size=File size: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} kB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Title: -document_properties_author=Author: -document_properties_subject=Subject: -document_properties_keywords=Keywords: -document_properties_creation_date=Creation Date: -document_properties_modification_date=Modification Date: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Creator: -document_properties_producer=PDF Producer: -document_properties_version=PDF Version: -document_properties_page_count=Page Count: -document_properties_page_size=Page Size: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=portrait -document_properties_page_size_orientation_landscape=landscape -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Fast Web View: -document_properties_linearized_yes=Yes -document_properties_linearized_no=No -document_properties_close=Close - -print_progress_message=Preparing document for printing… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Cancel - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Toggle Sidebar -toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers) -toggle_sidebar_label=Toggle Sidebar -document_outline.title=Show Document Outline (double-click to expand/collapse all items) -document_outline_label=Document Outline -attachments.title=Show Attachments -attachments_label=Attachments -layers.title=Show Layers (double-click to reset all layers to the default state) -layers_label=Layers -thumbs.title=Show Thumbnails -thumbs_label=Thumbnails -current_outline_item.title=Find Current Outline Item -current_outline_item_label=Current Outline Item -findbar.title=Find in Document -findbar_label=Find - -additional_layers=Additional Layers -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Page {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Page {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Thumbnail of Page {{page}} - -# Find panel button title and messages -find_input.title=Find -find_input.placeholder=Find in document… -find_previous.title=Find the previous occurrence of the phrase -find_previous_label=Previous -find_next.title=Find the next occurrence of the phrase -find_next_label=Next -find_highlight=Highlight All -find_match_case_label=Match Case -find_match_diacritics_label=Match Diacritics -find_entire_word_label=Whole Words -find_reached_top=Reached top of document, continued from bottom -find_reached_bottom=Reached end of document, continued from top -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} of {{total}} match -find_match_count[two]={{current}} of {{total}} matches -find_match_count[few]={{current}} of {{total}} matches -find_match_count[many]={{current}} of {{total}} matches -find_match_count[other]={{current}} of {{total}} matches -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=More than {{limit}} matches -find_match_count_limit[one]=More than {{limit}} match -find_match_count_limit[two]=More than {{limit}} matches -find_match_count_limit[few]=More than {{limit}} matches -find_match_count_limit[many]=More than {{limit}} matches -find_match_count_limit[other]=More than {{limit}} matches -find_not_found=Phrase not found - -# Predefined zoom values -page_scale_width=Page Width -page_scale_fit=Page Fit -page_scale_auto=Automatic Zoom -page_scale_actual=Actual Size -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=An error occurred while loading the PDF. -invalid_file_error=Invalid or corrupted PDF file. -missing_file_error=Missing PDF file. -unexpected_response_error=Unexpected server response. -rendering_error=An error occurred while rendering the page. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Annotation] -password_label=Enter the password to open this PDF file. -password_invalid=Invalid password. Please try again. -password_ok=OK -password_cancel=Cancel - -printing_not_supported=Warning: Printing is not fully supported by this browser. -printing_not_ready=Warning: The PDF is not fully loaded for printing. -web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts. - -# Editor -editor_free_text2.title=Text -editor_free_text2_label=Text -editor_ink2.title=Draw -editor_ink2_label=Draw - -editor_stamp.title=Add an image -editor_stamp_label=Add an image - -editor_stamp1.title=Add or edit images -editor_stamp1_label=Add or edit images - -free_text2_default_content=Start typing… - -# Editor Parameters -editor_free_text_color=Colour -editor_free_text_size=Size -editor_ink_color=Colour -editor_ink_thickness=Thickness -editor_ink_opacity=Opacity - -editor_stamp_add_image_label=Add image -editor_stamp_add_image.title=Add image - -# Editor aria -editor_free_text2_aria_label=Text Editor -editor_ink2_aria_label=Draw Editor -editor_ink_canvas_aria_label=User-created image diff --git a/static/pdf.js/locale/en-GB/viewer.ftl b/static/pdf.js/locale/en-GB/viewer.ftl new file mode 100644 index 00000000..3b141aee --- /dev/null +++ b/static/pdf.js/locale/en-GB/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Previous Page +pdfjs-previous-button-label = Previous +pdfjs-next-button = + .title = Next Page +pdfjs-next-button-label = Next +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Page +# 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 = of { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zoom Out +pdfjs-zoom-out-button-label = Zoom Out +pdfjs-zoom-in-button = + .title = Zoom In +pdfjs-zoom-in-button-label = Zoom In +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Switch to Presentation Mode +pdfjs-presentation-mode-button-label = Presentation Mode +pdfjs-open-file-button = + .title = Open File +pdfjs-open-file-button-label = Open +pdfjs-print-button = + .title = Print +pdfjs-print-button-label = Print +pdfjs-save-button = + .title = Save +pdfjs-save-button-label = Save +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Download +# 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 = Download +pdfjs-bookmark-button = + .title = Current Page (View URL from Current Page) +pdfjs-bookmark-button-label = Current Page +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Open in app +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Open in app + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Tools +pdfjs-tools-button-label = Tools +pdfjs-first-page-button = + .title = Go to First Page +pdfjs-first-page-button-label = Go to First Page +pdfjs-last-page-button = + .title = Go to Last Page +pdfjs-last-page-button-label = Go to Last Page +pdfjs-page-rotate-cw-button = + .title = Rotate Clockwise +pdfjs-page-rotate-cw-button-label = Rotate Clockwise +pdfjs-page-rotate-ccw-button = + .title = Rotate Anti-Clockwise +pdfjs-page-rotate-ccw-button-label = Rotate Anti-Clockwise +pdfjs-cursor-text-select-tool-button = + .title = Enable Text Selection Tool +pdfjs-cursor-text-select-tool-button-label = Text Selection Tool +pdfjs-cursor-hand-tool-button = + .title = Enable Hand Tool +pdfjs-cursor-hand-tool-button-label = Hand Tool +pdfjs-scroll-page-button = + .title = Use Page Scrolling +pdfjs-scroll-page-button-label = Page Scrolling +pdfjs-scroll-vertical-button = + .title = Use Vertical Scrolling +pdfjs-scroll-vertical-button-label = Vertical Scrolling +pdfjs-scroll-horizontal-button = + .title = Use Horizontal Scrolling +pdfjs-scroll-horizontal-button-label = Horizontal Scrolling +pdfjs-scroll-wrapped-button = + .title = Use Wrapped Scrolling +pdfjs-scroll-wrapped-button-label = Wrapped Scrolling +pdfjs-spread-none-button = + .title = Do not join page spreads +pdfjs-spread-none-button-label = No Spreads +pdfjs-spread-odd-button = + .title = Join page spreads starting with odd-numbered pages +pdfjs-spread-odd-button-label = Odd Spreads +pdfjs-spread-even-button = + .title = Join page spreads starting with even-numbered pages +pdfjs-spread-even-button-label = Even Spreads + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Document Properties… +pdfjs-document-properties-button-label = Document Properties… +pdfjs-document-properties-file-name = File name: +pdfjs-document-properties-file-size = File size: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } kB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Title: +pdfjs-document-properties-author = Author: +pdfjs-document-properties-subject = Subject: +pdfjs-document-properties-keywords = Keywords: +pdfjs-document-properties-creation-date = Creation Date: +pdfjs-document-properties-modification-date = Modification Date: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Creator: +pdfjs-document-properties-producer = PDF Producer: +pdfjs-document-properties-version = PDF Version: +pdfjs-document-properties-page-count = Page Count: +pdfjs-document-properties-page-size = Page Size: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +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 = Letter +pdfjs-document-properties-page-size-name-legal = 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 = Fast Web View: +pdfjs-document-properties-linearized-yes = Yes +pdfjs-document-properties-linearized-no = No +pdfjs-document-properties-close-button = Close + +## Print + +pdfjs-print-progress-message = Preparing document for printing… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Cancel +pdfjs-printing-not-supported = Warning: Printing is not fully supported by this browser. +pdfjs-printing-not-ready = Warning: The PDF is not fully loaded for printing. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Toggle Sidebar +pdfjs-toggle-sidebar-notification-button = + .title = Toggle Sidebar (document contains outline/attachments/layers) +pdfjs-toggle-sidebar-button-label = Toggle Sidebar +pdfjs-document-outline-button = + .title = Show Document Outline (double-click to expand/collapse all items) +pdfjs-document-outline-button-label = Document Outline +pdfjs-attachments-button = + .title = Show Attachments +pdfjs-attachments-button-label = Attachments +pdfjs-layers-button = + .title = Show Layers (double-click to reset all layers to the default state) +pdfjs-layers-button-label = Layers +pdfjs-thumbs-button = + .title = Show Thumbnails +pdfjs-thumbs-button-label = Thumbnails +pdfjs-current-outline-item-button = + .title = Find Current Outline Item +pdfjs-current-outline-item-button-label = Current Outline Item +pdfjs-findbar-button = + .title = Find in Document +pdfjs-findbar-button-label = Find +pdfjs-additional-layers = Additional Layers + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Page { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Thumbnail of Page { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Find + .placeholder = Find in document… +pdfjs-find-previous-button = + .title = Find the previous occurrence of the phrase +pdfjs-find-previous-button-label = Previous +pdfjs-find-next-button = + .title = Find the next occurrence of the phrase +pdfjs-find-next-button-label = Next +pdfjs-find-highlight-checkbox = Highlight All +pdfjs-find-match-case-checkbox-label = Match Case +pdfjs-find-match-diacritics-checkbox-label = Match Diacritics +pdfjs-find-entire-word-checkbox-label = Whole Words +pdfjs-find-reached-top = Reached top of document, continued from bottom +pdfjs-find-reached-bottom = Reached end of document, continued from top +# 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 } of { $total } match + *[other] { $current } of { $total } matches + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] More than { $limit } match + *[other] More than { $limit } matches + } +pdfjs-find-not-found = Phrase not found + +## Predefined zoom values + +pdfjs-page-scale-width = Page Width +pdfjs-page-scale-fit = Page Fit +pdfjs-page-scale-auto = Automatic Zoom +pdfjs-page-scale-actual = Actual Size +# 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 { $page } + +## Loading indicator messages + +pdfjs-loading-error = An error occurred while loading the PDF. +pdfjs-invalid-file-error = Invalid or corrupted PDF file. +pdfjs-missing-file-error = Missing PDF file. +pdfjs-unexpected-response-error = Unexpected server response. +pdfjs-rendering-error = An error occurred while rendering the page. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Annotation] + +## Password + +pdfjs-password-label = Enter the password to open this PDF file. +pdfjs-password-invalid = Invalid password. Please try again. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Cancel +pdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts. + +## Editing + +pdfjs-editor-free-text-button = + .title = Text +pdfjs-editor-free-text-button-label = Text +pdfjs-editor-ink-button = + .title = Draw +pdfjs-editor-ink-button-label = Draw +pdfjs-editor-stamp-button = + .title = Add or edit images +pdfjs-editor-stamp-button-label = Add or edit images +pdfjs-editor-highlight-button = + .title = Highlight +pdfjs-editor-highlight-button-label = Highlight +pdfjs-highlight-floating-button = + .title = Highlight +pdfjs-highlight-floating-button1 = + .title = Highlight + .aria-label = Highlight +pdfjs-highlight-floating-button-label = Highlight + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Remove drawing +pdfjs-editor-remove-freetext-button = + .title = Remove text +pdfjs-editor-remove-stamp-button = + .title = Remove image +pdfjs-editor-remove-highlight-button = + .title = Remove highlight + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Colour +pdfjs-editor-free-text-size-input = Size +pdfjs-editor-ink-color-input = Colour +pdfjs-editor-ink-thickness-input = Thickness +pdfjs-editor-ink-opacity-input = Opacity +pdfjs-editor-stamp-add-image-button = + .title = Add image +pdfjs-editor-stamp-add-image-button-label = Add image +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Thickness +pdfjs-editor-free-highlight-thickness-title = + .title = Change thickness when highlighting items other than text +pdfjs-free-text = + .aria-label = Text Editor +pdfjs-free-text-default-content = Start typing… +pdfjs-ink = + .aria-label = Draw Editor +pdfjs-ink-canvas = + .aria-label = User-created image + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alt text +pdfjs-editor-alt-text-edit-button-label = Edit alt text +pdfjs-editor-alt-text-dialog-label = Choose an option +pdfjs-editor-alt-text-dialog-description = Alt text (alternative text) helps when people can’t see the image or when it doesn’t load. +pdfjs-editor-alt-text-add-description-label = Add a description +pdfjs-editor-alt-text-add-description-description = Aim for 1-2 sentences that describe the subject, setting, or actions. +pdfjs-editor-alt-text-mark-decorative-label = Mark as decorative +pdfjs-editor-alt-text-mark-decorative-description = This is used for ornamental images, like borders or watermarks. +pdfjs-editor-alt-text-cancel-button = Cancel +pdfjs-editor-alt-text-save-button = Save +pdfjs-editor-alt-text-decorative-tooltip = Marked as decorative +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = For example, “A young man sits down at a table to eat a meal” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Top left corner — resize +pdfjs-editor-resizer-label-top-middle = Top middle — resize +pdfjs-editor-resizer-label-top-right = Top right corner — resize +pdfjs-editor-resizer-label-middle-right = Middle right — resize +pdfjs-editor-resizer-label-bottom-right = Bottom right corner — resize +pdfjs-editor-resizer-label-bottom-middle = Bottom middle — resize +pdfjs-editor-resizer-label-bottom-left = Bottom left corner — resize +pdfjs-editor-resizer-label-middle-left = Middle left — resize + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Highlight colour +pdfjs-editor-colorpicker-button = + .title = Change colour +pdfjs-editor-colorpicker-dropdown = + .aria-label = Colour choices +pdfjs-editor-colorpicker-yellow = + .title = Yellow +pdfjs-editor-colorpicker-green = + .title = Green +pdfjs-editor-colorpicker-blue = + .title = Blue +pdfjs-editor-colorpicker-pink = + .title = Pink +pdfjs-editor-colorpicker-red = + .title = Red + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Show all +pdfjs-editor-highlight-show-all-button = + .title = Show all diff --git a/static/pdf.js/locale/en-GB/viewer.properties b/static/pdf.js/locale/en-GB/viewer.properties deleted file mode 100644 index 50f50f66..00000000 --- a/static/pdf.js/locale/en-GB/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Previous Page -previous_label=Previous -next.title=Next Page -next_label=Next - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Page -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=of {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} of {{pagesCount}}) - -zoom_out.title=Zoom Out -zoom_out_label=Zoom Out -zoom_in.title=Zoom In -zoom_in_label=Zoom In -zoom.title=Zoom -presentation_mode.title=Switch to Presentation Mode -presentation_mode_label=Presentation Mode -open_file.title=Open File -open_file_label=Open -print.title=Print -print_label=Print -save.title=Save -save_label=Save -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Download -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Download -bookmark1.title=Current Page (View URL from Current Page) -bookmark1_label=Current Page -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Open in app -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Open in app - -# Secondary toolbar and context menu -tools.title=Tools -tools_label=Tools -first_page.title=Go to First Page -first_page_label=Go to First Page -last_page.title=Go to Last Page -last_page_label=Go to Last Page -page_rotate_cw.title=Rotate Clockwise -page_rotate_cw_label=Rotate Clockwise -page_rotate_ccw.title=Rotate Anti-Clockwise -page_rotate_ccw_label=Rotate Anti-Clockwise - -cursor_text_select_tool.title=Enable Text Selection Tool -cursor_text_select_tool_label=Text Selection Tool -cursor_hand_tool.title=Enable Hand Tool -cursor_hand_tool_label=Hand Tool - -scroll_page.title=Use Page Scrolling -scroll_page_label=Page Scrolling -scroll_vertical.title=Use Vertical Scrolling -scroll_vertical_label=Vertical Scrolling -scroll_horizontal.title=Use Horizontal Scrolling -scroll_horizontal_label=Horizontal Scrolling -scroll_wrapped.title=Use Wrapped Scrolling -scroll_wrapped_label=Wrapped Scrolling - -spread_none.title=Do not join page spreads -spread_none_label=No Spreads -spread_odd.title=Join page spreads starting with odd-numbered pages -spread_odd_label=Odd Spreads -spread_even.title=Join page spreads starting with even-numbered pages -spread_even_label=Even Spreads - -# Document properties dialog box -document_properties.title=Document Properties… -document_properties_label=Document Properties… -document_properties_file_name=File name: -document_properties_file_size=File size: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} kB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Title: -document_properties_author=Author: -document_properties_subject=Subject: -document_properties_keywords=Keywords: -document_properties_creation_date=Creation Date: -document_properties_modification_date=Modification Date: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Creator: -document_properties_producer=PDF Producer: -document_properties_version=PDF Version: -document_properties_page_count=Page Count: -document_properties_page_size=Page Size: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=portrait -document_properties_page_size_orientation_landscape=landscape -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Fast Web View: -document_properties_linearized_yes=Yes -document_properties_linearized_no=No -document_properties_close=Close - -print_progress_message=Preparing document for printing… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Cancel - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Toggle Sidebar -toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers) -toggle_sidebar_label=Toggle Sidebar -document_outline.title=Show Document Outline (double-click to expand/collapse all items) -document_outline_label=Document Outline -attachments.title=Show Attachments -attachments_label=Attachments -layers.title=Show Layers (double-click to reset all layers to the default state) -layers_label=Layers -thumbs.title=Show Thumbnails -thumbs_label=Thumbnails -current_outline_item.title=Find Current Outline Item -current_outline_item_label=Current Outline Item -findbar.title=Find in Document -findbar_label=Find - -additional_layers=Additional Layers -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Page {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Page {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Thumbnail of Page {{page}} - -# Find panel button title and messages -find_input.title=Find -find_input.placeholder=Find in document… -find_previous.title=Find the previous occurrence of the phrase -find_previous_label=Previous -find_next.title=Find the next occurrence of the phrase -find_next_label=Next -find_highlight=Highlight All -find_match_case_label=Match Case -find_match_diacritics_label=Match Diacritics -find_entire_word_label=Whole Words -find_reached_top=Reached top of document, continued from bottom -find_reached_bottom=Reached end of document, continued from top -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} of {{total}} match -find_match_count[two]={{current}} of {{total}} matches -find_match_count[few]={{current}} of {{total}} matches -find_match_count[many]={{current}} of {{total}} matches -find_match_count[other]={{current}} of {{total}} matches -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=More than {{limit}} matches -find_match_count_limit[one]=More than {{limit}} match -find_match_count_limit[two]=More than {{limit}} matches -find_match_count_limit[few]=More than {{limit}} matches -find_match_count_limit[many]=More than {{limit}} matches -find_match_count_limit[other]=More than {{limit}} matches -find_not_found=Phrase not found - -# Predefined zoom values -page_scale_width=Page Width -page_scale_fit=Page Fit -page_scale_auto=Automatic Zoom -page_scale_actual=Actual Size -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=An error occurred while loading the PDF. -invalid_file_error=Invalid or corrupted PDF file. -missing_file_error=Missing PDF file. -unexpected_response_error=Unexpected server response. -rendering_error=An error occurred while rendering the page. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Annotation] -password_label=Enter the password to open this PDF file. -password_invalid=Invalid password. Please try again. -password_ok=OK -password_cancel=Cancel - -printing_not_supported=Warning: Printing is not fully supported by this browser. -printing_not_ready=Warning: The PDF is not fully loaded for printing. -web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts. - -# Editor -editor_free_text2.title=Text -editor_free_text2_label=Text -editor_ink2.title=Draw -editor_ink2_label=Draw - -editor_stamp1.title=Add or edit images -editor_stamp1_label=Add or edit images - -free_text2_default_content=Start typing… - -# Editor Parameters -editor_free_text_color=Colour -editor_free_text_size=Size -editor_ink_color=Colour -editor_ink_thickness=Thickness -editor_ink_opacity=Opacity - -editor_stamp_add_image_label=Add image -editor_stamp_add_image.title=Add image - -# Editor aria -editor_free_text2_aria_label=Text Editor -editor_ink2_aria_label=Draw Editor -editor_ink_canvas_aria_label=User-created image - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Alt text -editor_alt_text_edit_button_label=Edit alt text -editor_alt_text_dialog_label=Choose an option -editor_alt_text_dialog_description=Alt text (alternative text) helps when people can’t see the image or when it doesn’t load. -editor_alt_text_add_description_label=Add a description -editor_alt_text_add_description_description=Aim for 1-2 sentences that describe the subject, setting, or actions. -editor_alt_text_mark_decorative_label=Mark as decorative -editor_alt_text_mark_decorative_description=This is used for ornamental images, like borders or watermarks. -editor_alt_text_cancel_button=Cancel -editor_alt_text_save_button=Save -editor_alt_text_decorative_tooltip=Marked as decorative -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=For example, “A young man sits down at a table to eat a meal” diff --git a/static/pdf.js/locale/en-US/viewer.ftl b/static/pdf.js/locale/en-US/viewer.ftl new file mode 100644 index 00000000..8aea4395 --- /dev/null +++ b/static/pdf.js/locale/en-US/viewer.ftl @@ -0,0 +1,418 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Previous Page +pdfjs-previous-button-label = Previous +pdfjs-next-button = + .title = Next Page +pdfjs-next-button-label = Next + +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Page + +# 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 = of { $pagesCount } + +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount }) + +pdfjs-zoom-out-button = + .title = Zoom Out +pdfjs-zoom-out-button-label = Zoom Out +pdfjs-zoom-in-button = + .title = Zoom In +pdfjs-zoom-in-button-label = Zoom In +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Switch to Presentation Mode +pdfjs-presentation-mode-button-label = Presentation Mode +pdfjs-open-file-button = + .title = Open File +pdfjs-open-file-button-label = Open +pdfjs-print-button = + .title = Print +pdfjs-print-button-label = Print +pdfjs-save-button = + .title = Save +pdfjs-save-button-label = Save + +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Download + +# 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 = Download + +pdfjs-bookmark-button = + .title = Current Page (View URL from Current Page) +pdfjs-bookmark-button-label = Current Page + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Tools + +pdfjs-tools-button-label = Tools +pdfjs-first-page-button = + .title = Go to First Page +pdfjs-first-page-button-label = Go to First Page +pdfjs-last-page-button = + .title = Go to Last Page +pdfjs-last-page-button-label = Go to Last Page +pdfjs-page-rotate-cw-button = + .title = Rotate Clockwise +pdfjs-page-rotate-cw-button-label = Rotate Clockwise +pdfjs-page-rotate-ccw-button = + .title = Rotate Counterclockwise +pdfjs-page-rotate-ccw-button-label = Rotate Counterclockwise +pdfjs-cursor-text-select-tool-button = + .title = Enable Text Selection Tool +pdfjs-cursor-text-select-tool-button-label = Text Selection Tool +pdfjs-cursor-hand-tool-button = + .title = Enable Hand Tool +pdfjs-cursor-hand-tool-button-label = Hand Tool +pdfjs-scroll-page-button = + .title = Use Page Scrolling +pdfjs-scroll-page-button-label = Page Scrolling +pdfjs-scroll-vertical-button = + .title = Use Vertical Scrolling +pdfjs-scroll-vertical-button-label = Vertical Scrolling +pdfjs-scroll-horizontal-button = + .title = Use Horizontal Scrolling +pdfjs-scroll-horizontal-button-label = Horizontal Scrolling +pdfjs-scroll-wrapped-button = + .title = Use Wrapped Scrolling +pdfjs-scroll-wrapped-button-label = Wrapped Scrolling +pdfjs-spread-none-button = + .title = Do not join page spreads +pdfjs-spread-none-button-label = No Spreads +pdfjs-spread-odd-button = + .title = Join page spreads starting with odd-numbered pages +pdfjs-spread-odd-button-label = Odd Spreads +pdfjs-spread-even-button = + .title = Join page spreads starting with even-numbered pages +pdfjs-spread-even-button-label = Even Spreads + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Document Properties… +pdfjs-document-properties-button-label = Document Properties… +pdfjs-document-properties-file-name = File name: +pdfjs-document-properties-file-size = File size: + +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) + +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) + +pdfjs-document-properties-title = Title: +pdfjs-document-properties-author = Author: +pdfjs-document-properties-subject = Subject: +pdfjs-document-properties-keywords = Keywords: +pdfjs-document-properties-creation-date = Creation Date: +pdfjs-document-properties-modification-date = Modification Date: + +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } + +pdfjs-document-properties-creator = Creator: +pdfjs-document-properties-producer = PDF Producer: +pdfjs-document-properties-version = PDF Version: +pdfjs-document-properties-page-count = Page Count: +pdfjs-document-properties-page-size = Page Size: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +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 = Letter +pdfjs-document-properties-page-size-name-legal = 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 = Fast Web View: +pdfjs-document-properties-linearized-yes = Yes +pdfjs-document-properties-linearized-no = No +pdfjs-document-properties-close-button = Close + +## Print + +pdfjs-print-progress-message = Preparing document for printing… + +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% + +pdfjs-print-progress-close-button = Cancel +pdfjs-printing-not-supported = Warning: Printing is not fully supported by this browser. +pdfjs-printing-not-ready = Warning: The PDF is not fully loaded for printing. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Toggle Sidebar +pdfjs-toggle-sidebar-notification-button = + .title = Toggle Sidebar (document contains outline/attachments/layers) +pdfjs-toggle-sidebar-button-label = Toggle Sidebar +pdfjs-document-outline-button = + .title = Show Document Outline (double-click to expand/collapse all items) +pdfjs-document-outline-button-label = Document Outline +pdfjs-attachments-button = + .title = Show Attachments +pdfjs-attachments-button-label = Attachments +pdfjs-layers-button = + .title = Show Layers (double-click to reset all layers to the default state) +pdfjs-layers-button-label = Layers +pdfjs-thumbs-button = + .title = Show Thumbnails +pdfjs-thumbs-button-label = Thumbnails +pdfjs-current-outline-item-button = + .title = Find Current Outline Item +pdfjs-current-outline-item-button-label = Current Outline Item +pdfjs-findbar-button = + .title = Find in Document +pdfjs-findbar-button-label = Find +pdfjs-additional-layers = Additional Layers + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Page { $page } + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Thumbnail of Page { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Find + .placeholder = Find in document… +pdfjs-find-previous-button = + .title = Find the previous occurrence of the phrase +pdfjs-find-previous-button-label = Previous +pdfjs-find-next-button = + .title = Find the next occurrence of the phrase +pdfjs-find-next-button-label = Next +pdfjs-find-highlight-checkbox = Highlight All +pdfjs-find-match-case-checkbox-label = Match Case +pdfjs-find-match-diacritics-checkbox-label = Match Diacritics +pdfjs-find-entire-word-checkbox-label = Whole Words +pdfjs-find-reached-top = Reached top of document, continued from bottom +pdfjs-find-reached-bottom = Reached end of document, continued from top + +# 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 } of { $total } match + *[other] { $current } of { $total } matches + } + +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] More than { $limit } match + *[other] More than { $limit } matches + } + +pdfjs-find-not-found = Phrase not found + +## Predefined zoom values + +pdfjs-page-scale-width = Page Width +pdfjs-page-scale-fit = Page Fit +pdfjs-page-scale-auto = Automatic Zoom +pdfjs-page-scale-actual = Actual Size + +# 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 { $page } + +## Loading indicator messages + +pdfjs-loading-error = An error occurred while loading the PDF. +pdfjs-invalid-file-error = Invalid or corrupted PDF file. +pdfjs-missing-file-error = Missing PDF file. +pdfjs-unexpected-response-error = Unexpected server response. +pdfjs-rendering-error = An error occurred while rendering the page. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Annotation] + +## Password + +pdfjs-password-label = Enter the password to open this PDF file. +pdfjs-password-invalid = Invalid password. Please try again. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Cancel +pdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts. + +## Editing + +pdfjs-editor-free-text-button = + .title = Text +pdfjs-editor-free-text-button-label = Text +pdfjs-editor-ink-button = + .title = Draw +pdfjs-editor-ink-button-label = Draw +pdfjs-editor-stamp-button = + .title = Add or edit images +pdfjs-editor-stamp-button-label = Add or edit images +pdfjs-editor-highlight-button = + .title = Highlight +pdfjs-editor-highlight-button-label = Highlight +pdfjs-highlight-floating-button1 = + .title = Highlight + .aria-label = Highlight +pdfjs-highlight-floating-button-label = Highlight + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Remove drawing +pdfjs-editor-remove-freetext-button = + .title = Remove text +pdfjs-editor-remove-stamp-button = + .title = Remove image +pdfjs-editor-remove-highlight-button = + .title = Remove highlight + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Color +pdfjs-editor-free-text-size-input = Size +pdfjs-editor-ink-color-input = Color +pdfjs-editor-ink-thickness-input = Thickness +pdfjs-editor-ink-opacity-input = Opacity +pdfjs-editor-stamp-add-image-button = + .title = Add image +pdfjs-editor-stamp-add-image-button-label = Add image +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Thickness +pdfjs-editor-free-highlight-thickness-title = + .title = Change thickness when highlighting items other than text + +pdfjs-free-text = + .aria-label = Text Editor +pdfjs-free-text-default-content = Start typing… +pdfjs-ink = + .aria-label = Draw Editor +pdfjs-ink-canvas = + .aria-label = User-created image + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alt text + +pdfjs-editor-alt-text-edit-button-label = Edit alt text +pdfjs-editor-alt-text-dialog-label = Choose an option +pdfjs-editor-alt-text-dialog-description = Alt text (alternative text) helps when people can’t see the image or when it doesn’t load. +pdfjs-editor-alt-text-add-description-label = Add a description +pdfjs-editor-alt-text-add-description-description = Aim for 1-2 sentences that describe the subject, setting, or actions. +pdfjs-editor-alt-text-mark-decorative-label = Mark as decorative +pdfjs-editor-alt-text-mark-decorative-description = This is used for ornamental images, like borders or watermarks. +pdfjs-editor-alt-text-cancel-button = Cancel +pdfjs-editor-alt-text-save-button = Save +pdfjs-editor-alt-text-decorative-tooltip = Marked as decorative + +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = For example, “A young man sits down at a table to eat a meal” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Top left corner — resize +pdfjs-editor-resizer-label-top-middle = Top middle — resize +pdfjs-editor-resizer-label-top-right = Top right corner — resize +pdfjs-editor-resizer-label-middle-right = Middle right — resize +pdfjs-editor-resizer-label-bottom-right = Bottom right corner — resize +pdfjs-editor-resizer-label-bottom-middle = Bottom middle — resize +pdfjs-editor-resizer-label-bottom-left = Bottom left corner — resize +pdfjs-editor-resizer-label-middle-left = Middle left — resize + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Highlight color + +pdfjs-editor-colorpicker-button = + .title = Change color +pdfjs-editor-colorpicker-dropdown = + .aria-label = Color choices +pdfjs-editor-colorpicker-yellow = + .title = Yellow +pdfjs-editor-colorpicker-green = + .title = Green +pdfjs-editor-colorpicker-blue = + .title = Blue +pdfjs-editor-colorpicker-pink = + .title = Pink +pdfjs-editor-colorpicker-red = + .title = Red + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Show all +pdfjs-editor-highlight-show-all-button = + .title = Show all diff --git a/static/pdf.js/locale/en-US/viewer.properties b/static/pdf.js/locale/en-US/viewer.properties deleted file mode 100644 index b0369cc2..00000000 --- a/static/pdf.js/locale/en-US/viewer.properties +++ /dev/null @@ -1,282 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Previous Page -previous_label=Previous -next.title=Next Page -next_label=Next - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Page -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=of {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} of {{pagesCount}}) - -zoom_out.title=Zoom Out -zoom_out_label=Zoom Out -zoom_in.title=Zoom In -zoom_in_label=Zoom In -zoom.title=Zoom -presentation_mode.title=Switch to Presentation Mode -presentation_mode_label=Presentation Mode -open_file.title=Open File -open_file_label=Open -print.title=Print -print_label=Print -save.title=Save -save_label=Save -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Download -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Download -bookmark1.title=Current Page (View URL from Current Page) -bookmark1_label=Current Page -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Open in app -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Open in app - -# Secondary toolbar and context menu -tools.title=Tools -tools_label=Tools -first_page.title=Go to First Page -first_page_label=Go to First Page -last_page.title=Go to Last Page -last_page_label=Go to Last Page -page_rotate_cw.title=Rotate Clockwise -page_rotate_cw_label=Rotate Clockwise -page_rotate_ccw.title=Rotate Counterclockwise -page_rotate_ccw_label=Rotate Counterclockwise - -cursor_text_select_tool.title=Enable Text Selection Tool -cursor_text_select_tool_label=Text Selection Tool -cursor_hand_tool.title=Enable Hand Tool -cursor_hand_tool_label=Hand Tool - -scroll_page.title=Use Page Scrolling -scroll_page_label=Page Scrolling -scroll_vertical.title=Use Vertical Scrolling -scroll_vertical_label=Vertical Scrolling -scroll_horizontal.title=Use Horizontal Scrolling -scroll_horizontal_label=Horizontal Scrolling -scroll_wrapped.title=Use Wrapped Scrolling -scroll_wrapped_label=Wrapped Scrolling - -spread_none.title=Do not join page spreads -spread_none_label=No Spreads -spread_odd.title=Join page spreads starting with odd-numbered pages -spread_odd_label=Odd Spreads -spread_even.title=Join page spreads starting with even-numbered pages -spread_even_label=Even Spreads - -# Document properties dialog box -document_properties.title=Document Properties… -document_properties_label=Document Properties… -document_properties_file_name=File name: -document_properties_file_size=File size: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Title: -document_properties_author=Author: -document_properties_subject=Subject: -document_properties_keywords=Keywords: -document_properties_creation_date=Creation Date: -document_properties_modification_date=Modification Date: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Creator: -document_properties_producer=PDF Producer: -document_properties_version=PDF Version: -document_properties_page_count=Page Count: -document_properties_page_size=Page Size: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=portrait -document_properties_page_size_orientation_landscape=landscape -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Fast Web View: -document_properties_linearized_yes=Yes -document_properties_linearized_no=No -document_properties_close=Close - -print_progress_message=Preparing document for printing… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Cancel - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Toggle Sidebar -toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers) -toggle_sidebar_label=Toggle Sidebar -document_outline.title=Show Document Outline (double-click to expand/collapse all items) -document_outline_label=Document Outline -attachments.title=Show Attachments -attachments_label=Attachments -layers.title=Show Layers (double-click to reset all layers to the default state) -layers_label=Layers -thumbs.title=Show Thumbnails -thumbs_label=Thumbnails -current_outline_item.title=Find Current Outline Item -current_outline_item_label=Current Outline Item -findbar.title=Find in Document -findbar_label=Find - -additional_layers=Additional Layers -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Page {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Page {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Thumbnail of Page {{page}} - -# Find panel button title and messages -find_input.title=Find -find_input.placeholder=Find in document… -find_previous.title=Find the previous occurrence of the phrase -find_previous_label=Previous -find_next.title=Find the next occurrence of the phrase -find_next_label=Next -find_highlight=Highlight All -find_match_case_label=Match Case -find_match_diacritics_label=Match Diacritics -find_entire_word_label=Whole Words -find_reached_top=Reached top of document, continued from bottom -find_reached_bottom=Reached end of document, continued from top -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} of {{total}} match -find_match_count[two]={{current}} of {{total}} matches -find_match_count[few]={{current}} of {{total}} matches -find_match_count[many]={{current}} of {{total}} matches -find_match_count[other]={{current}} of {{total}} matches -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=More than {{limit}} matches -find_match_count_limit[one]=More than {{limit}} match -find_match_count_limit[two]=More than {{limit}} matches -find_match_count_limit[few]=More than {{limit}} matches -find_match_count_limit[many]=More than {{limit}} matches -find_match_count_limit[other]=More than {{limit}} matches -find_not_found=Phrase not found - -# Predefined zoom values -page_scale_width=Page Width -page_scale_fit=Page Fit -page_scale_auto=Automatic Zoom -page_scale_actual=Actual Size -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=An error occurred while loading the PDF. -invalid_file_error=Invalid or corrupted PDF file. -missing_file_error=Missing PDF file. -unexpected_response_error=Unexpected server response. -rendering_error=An error occurred while rendering the page. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Annotation] -password_label=Enter the password to open this PDF file. -password_invalid=Invalid password. Please try again. -password_ok=OK -password_cancel=Cancel - -printing_not_supported=Warning: Printing is not fully supported by this browser. -printing_not_ready=Warning: The PDF is not fully loaded for printing. -web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts. - -# Editor -editor_free_text2.title=Text -editor_free_text2_label=Text -editor_ink2.title=Draw -editor_ink2_label=Draw -editor_stamp1.title=Add or edit images -editor_stamp1_label=Add or edit images - -free_text2_default_content=Start typing… - -# Editor Parameters -editor_free_text_color=Color -editor_free_text_size=Size -editor_ink_color=Color -editor_ink_thickness=Thickness -editor_ink_opacity=Opacity -editor_stamp_add_image_label=Add image -editor_stamp_add_image.title=Add image - -# Editor aria -editor_free_text2_aria_label=Text Editor -editor_ink2_aria_label=Draw Editor -editor_ink_canvas_aria_label=User-created image - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Alt text -editor_alt_text_edit_button_label=Edit alt text -editor_alt_text_dialog_label=Choose an option -editor_alt_text_dialog_description=Alt text (alternative text) helps when people can’t see the image or when it doesn’t load. -editor_alt_text_add_description_label=Add a description -editor_alt_text_add_description_description=Aim for 1-2 sentences that describe the subject, setting, or actions. -editor_alt_text_mark_decorative_label=Mark as decorative -editor_alt_text_mark_decorative_description=This is used for ornamental images, like borders or watermarks. -editor_alt_text_cancel_button=Cancel -editor_alt_text_save_button=Save -editor_alt_text_decorative_tooltip=Marked as decorative -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=For example, “A young man sits down at a table to eat a meal” diff --git a/static/pdf.js/locale/eo/viewer.ftl b/static/pdf.js/locale/eo/viewer.ftl new file mode 100644 index 00000000..23c2b24f --- /dev/null +++ b/static/pdf.js/locale/eo/viewer.ftl @@ -0,0 +1,396 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Antaŭa paĝo +pdfjs-previous-button-label = Malantaŭen +pdfjs-next-button = + .title = Venonta paĝo +pdfjs-next-button-label = Antaŭen +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Paĝo +# 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 = el { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } el { $pagesCount }) +pdfjs-zoom-out-button = + .title = Malpligrandigi +pdfjs-zoom-out-button-label = Malpligrandigi +pdfjs-zoom-in-button = + .title = Pligrandigi +pdfjs-zoom-in-button-label = Pligrandigi +pdfjs-zoom-select = + .title = Pligrandigilo +pdfjs-presentation-mode-button = + .title = Iri al prezenta reĝimo +pdfjs-presentation-mode-button-label = Prezenta reĝimo +pdfjs-open-file-button = + .title = Malfermi dosieron +pdfjs-open-file-button-label = Malfermi +pdfjs-print-button = + .title = Presi +pdfjs-print-button-label = Presi +pdfjs-save-button = + .title = Konservi +pdfjs-save-button-label = Konservi +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Elŝuti +# 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 = Elŝuti +pdfjs-bookmark-button = + .title = Nuna paĝo (Montri adreson de la nuna paĝo) +pdfjs-bookmark-button-label = Nuna paĝo + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Iloj +pdfjs-tools-button-label = Iloj +pdfjs-first-page-button = + .title = Iri al la unua paĝo +pdfjs-first-page-button-label = Iri al la unua paĝo +pdfjs-last-page-button = + .title = Iri al la lasta paĝo +pdfjs-last-page-button-label = Iri al la lasta paĝo +pdfjs-page-rotate-cw-button = + .title = Rotaciigi dekstrume +pdfjs-page-rotate-cw-button-label = Rotaciigi dekstrume +pdfjs-page-rotate-ccw-button = + .title = Rotaciigi maldekstrume +pdfjs-page-rotate-ccw-button-label = Rotaciigi maldekstrume +pdfjs-cursor-text-select-tool-button = + .title = Aktivigi tekstan elektilon +pdfjs-cursor-text-select-tool-button-label = Teksta elektilo +pdfjs-cursor-hand-tool-button = + .title = Aktivigi ilon de mano +pdfjs-cursor-hand-tool-button-label = Ilo de mano +pdfjs-scroll-page-button = + .title = Uzi rulumon de paĝo +pdfjs-scroll-page-button-label = Rulumo de paĝo +pdfjs-scroll-vertical-button = + .title = Uzi vertikalan rulumon +pdfjs-scroll-vertical-button-label = Vertikala rulumo +pdfjs-scroll-horizontal-button = + .title = Uzi horizontalan rulumon +pdfjs-scroll-horizontal-button-label = Horizontala rulumo +pdfjs-scroll-wrapped-button = + .title = Uzi ambaŭdirektan rulumon +pdfjs-scroll-wrapped-button-label = Ambaŭdirekta rulumo +pdfjs-spread-none-button = + .title = Ne montri paĝojn po du +pdfjs-spread-none-button-label = Unupaĝa vido +pdfjs-spread-odd-button = + .title = Kunigi paĝojn komencante per nepara paĝo +pdfjs-spread-odd-button-label = Po du paĝoj, neparaj maldekstre +pdfjs-spread-even-button = + .title = Kunigi paĝojn komencante per para paĝo +pdfjs-spread-even-button-label = Po du paĝoj, paraj maldekstre + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Atributoj de dokumento… +pdfjs-document-properties-button-label = Atributoj de dokumento… +pdfjs-document-properties-file-name = Nomo de dosiero: +pdfjs-document-properties-file-size = Grando de dosiero: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KO ({ $size_b } oktetoj) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MO ({ $size_b } oktetoj) +pdfjs-document-properties-title = Titolo: +pdfjs-document-properties-author = Aŭtoro: +pdfjs-document-properties-subject = Temo: +pdfjs-document-properties-keywords = Ŝlosilvorto: +pdfjs-document-properties-creation-date = Dato de kreado: +pdfjs-document-properties-modification-date = Dato de modifo: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Kreinto: +pdfjs-document-properties-producer = Produktinto de PDF: +pdfjs-document-properties-version = Versio de PDF: +pdfjs-document-properties-page-count = Nombro de paĝoj: +pdfjs-document-properties-page-size = Grando de paĝo: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = vertikala +pdfjs-document-properties-page-size-orientation-landscape = horizontala +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 = Letera +pdfjs-document-properties-page-size-name-legal = Jura + +## 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 = Rapida tekstaĵa vido: +pdfjs-document-properties-linearized-yes = Jes +pdfjs-document-properties-linearized-no = Ne +pdfjs-document-properties-close-button = Fermi + +## Print + +pdfjs-print-progress-message = Preparo de dokumento por presi ĝin … +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Nuligi +pdfjs-printing-not-supported = Averto: tiu ĉi retumilo ne plene subtenas presadon. +pdfjs-printing-not-ready = Averto: la PDF dosiero ne estas plene ŝargita por presado. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Montri/kaŝi flankan strion +pdfjs-toggle-sidebar-notification-button = + .title = Montri/kaŝi flankan strion (la dokumento enhavas konturon/kunsendaĵojn/tavolojn) +pdfjs-toggle-sidebar-button-label = Montri/kaŝi flankan strion +pdfjs-document-outline-button = + .title = Montri la konturon de dokumento (alklaku duoble por faldi/malfaldi ĉiujn elementojn) +pdfjs-document-outline-button-label = Konturo de dokumento +pdfjs-attachments-button = + .title = Montri kunsendaĵojn +pdfjs-attachments-button-label = Kunsendaĵojn +pdfjs-layers-button = + .title = Montri tavolojn (duoble alklaku por remeti ĉiujn tavolojn en la norman staton) +pdfjs-layers-button-label = Tavoloj +pdfjs-thumbs-button = + .title = Montri miniaturojn +pdfjs-thumbs-button-label = Miniaturoj +pdfjs-current-outline-item-button = + .title = Trovi nunan konturan elementon +pdfjs-current-outline-item-button-label = Nuna kontura elemento +pdfjs-findbar-button = + .title = Serĉi en dokumento +pdfjs-findbar-button-label = Serĉi +pdfjs-additional-layers = Aldonaj tavoloj + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Paĝo { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniaturo de paĝo { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Serĉi + .placeholder = Serĉi en dokumento… +pdfjs-find-previous-button = + .title = Serĉi la antaŭan aperon de la frazo +pdfjs-find-previous-button-label = Malantaŭen +pdfjs-find-next-button = + .title = Serĉi la venontan aperon de la frazo +pdfjs-find-next-button-label = Antaŭen +pdfjs-find-highlight-checkbox = Elstarigi ĉiujn +pdfjs-find-match-case-checkbox-label = Distingi inter majuskloj kaj minuskloj +pdfjs-find-match-diacritics-checkbox-label = Respekti supersignojn +pdfjs-find-entire-word-checkbox-label = Tutaj vortoj +pdfjs-find-reached-top = Komenco de la dokumento atingita, daŭrigado ekde la fino +pdfjs-find-reached-bottom = Fino de la dokumento atingita, daŭrigado ekde la komenco +# 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 } el { $total } kongruo + *[other] { $current } el { $total } kongruoj + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Pli ol { $limit } kongruo + *[other] Pli ol { $limit } kongruoj + } +pdfjs-find-not-found = Frazo ne trovita + +## Predefined zoom values + +pdfjs-page-scale-width = Larĝo de paĝo +pdfjs-page-scale-fit = Adapti paĝon +pdfjs-page-scale-auto = Aŭtomata skalo +pdfjs-page-scale-actual = Reala grando +# 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 = Paĝo { $page } + +## Loading indicator messages + +pdfjs-loading-error = Okazis eraro dum la ŝargado de la PDF dosiero. +pdfjs-invalid-file-error = Nevalida aŭ difektita PDF dosiero. +pdfjs-missing-file-error = Mankas dosiero PDF. +pdfjs-unexpected-response-error = Neatendita respondo de servilo. +pdfjs-rendering-error = Okazis eraro dum la montro de la paĝo. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Prinoto: { $type }] + +## Password + +pdfjs-password-label = Tajpu pasvorton por malfermi tiun ĉi dosieron PDF. +pdfjs-password-invalid = Nevalida pasvorto. Bonvolu provi denove. +pdfjs-password-ok-button = Akcepti +pdfjs-password-cancel-button = Nuligi +pdfjs-web-fonts-disabled = Neaktivaj teksaĵaj tiparoj: ne elbas uzi enmetitajn tiparojn de PDF. + +## Editing + +pdfjs-editor-free-text-button = + .title = Teksto +pdfjs-editor-free-text-button-label = Teksto +pdfjs-editor-ink-button = + .title = Desegni +pdfjs-editor-ink-button-label = Desegni +pdfjs-editor-stamp-button = + .title = Aldoni aŭ modifi bildojn +pdfjs-editor-stamp-button-label = Aldoni aŭ modifi bildojn +pdfjs-editor-highlight-button = + .title = Elstarigi +pdfjs-editor-highlight-button-label = Elstarigi +pdfjs-highlight-floating-button = + .title = Elstarigi +pdfjs-highlight-floating-button1 = + .title = Elstarigi + .aria-label = Elstarigi +pdfjs-highlight-floating-button-label = Elstarigi + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Forigi desegnon +pdfjs-editor-remove-freetext-button = + .title = Forigi tekston +pdfjs-editor-remove-stamp-button = + .title = Forigi bildon +pdfjs-editor-remove-highlight-button = + .title = Forigi elstaraĵon + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Koloro +pdfjs-editor-free-text-size-input = Grando +pdfjs-editor-ink-color-input = Koloro +pdfjs-editor-ink-thickness-input = Dikeco +pdfjs-editor-ink-opacity-input = Maldiafaneco +pdfjs-editor-stamp-add-image-button = + .title = Aldoni bildon +pdfjs-editor-stamp-add-image-button-label = Aldoni bildon +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Dikeco +pdfjs-editor-free-highlight-thickness-title = + .title = Ŝanĝi dikecon dum elstarigo de netekstaj elementoj +pdfjs-free-text = + .aria-label = Tekstan redaktilon +pdfjs-free-text-default-content = Ektajpi… +pdfjs-ink = + .aria-label = Desegnan redaktilon +pdfjs-ink-canvas = + .aria-label = Bildo kreita de uzanto + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alternativa teksto +pdfjs-editor-alt-text-edit-button-label = Redakti alternativan tekston +pdfjs-editor-alt-text-dialog-label = Elektu eblon +pdfjs-editor-alt-text-dialog-description = Alternativa teksto helpas personojn, en la okazoj kiam ili ne povas vidi aŭ ŝargi la bildon. +pdfjs-editor-alt-text-add-description-label = Aldoni priskribon +pdfjs-editor-alt-text-add-description-description = La celo estas unu aŭ du frazoj, kiuj priskribas la temon, etoson aŭ agojn. +pdfjs-editor-alt-text-mark-decorative-label = Marki kiel ornaman +pdfjs-editor-alt-text-mark-decorative-description = Tio ĉi estas uzita por ornamaj bildoj, kiel randoj aŭ fonaj bildoj. +pdfjs-editor-alt-text-cancel-button = Nuligi +pdfjs-editor-alt-text-save-button = Konservi +pdfjs-editor-alt-text-decorative-tooltip = Markita kiel ornama +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Ekzemple: “Juna persono sidiĝas ĉetable por ekmanĝi” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Supra maldekstra angulo — ŝangi grandon +pdfjs-editor-resizer-label-top-middle = Supra mezo — ŝanĝi grandon +pdfjs-editor-resizer-label-top-right = Supran dekstran angulon — ŝanĝi grandon +pdfjs-editor-resizer-label-middle-right = Dekstra mezo — ŝanĝi grandon +pdfjs-editor-resizer-label-bottom-right = Malsupra deksta angulo — ŝanĝi grandon +pdfjs-editor-resizer-label-bottom-middle = Malsupra mezo — ŝanĝi grandon +pdfjs-editor-resizer-label-bottom-left = Malsupra maldekstra angulo — ŝanĝi grandon +pdfjs-editor-resizer-label-middle-left = Maldekstra mezo — ŝanĝi grandon + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Elstarigi koloron +pdfjs-editor-colorpicker-button = + .title = Ŝanĝi koloron +pdfjs-editor-colorpicker-dropdown = + .aria-label = Elekto de koloroj +pdfjs-editor-colorpicker-yellow = + .title = Flava +pdfjs-editor-colorpicker-green = + .title = Verda +pdfjs-editor-colorpicker-blue = + .title = Blua +pdfjs-editor-colorpicker-pink = + .title = Roza +pdfjs-editor-colorpicker-red = + .title = Ruĝa + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Montri ĉiujn +pdfjs-editor-highlight-show-all-button = + .title = Montri ĉiujn diff --git a/static/pdf.js/locale/eo/viewer.properties b/static/pdf.js/locale/eo/viewer.properties deleted file mode 100644 index 2018f9e7..00000000 --- a/static/pdf.js/locale/eo/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Antaŭa paĝo -previous_label=Malantaŭen -next.title=Venonta paĝo -next_label=Antaŭen - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Paĝo -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=el {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} el {{pagesCount}}) - -zoom_out.title=Malpligrandigi -zoom_out_label=Malpligrandigi -zoom_in.title=Pligrandigi -zoom_in_label=Pligrandigi -zoom.title=Pligrandigilo -presentation_mode.title=Iri al prezenta reĝimo -presentation_mode_label=Prezenta reĝimo -open_file.title=Malfermi dosieron -open_file_label=Malfermi -print.title=Presi -print_label=Presi -save.title=Konservi -save_label=Konservi -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Elŝuti -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Elŝuti -bookmark1.title=Nuna paĝo (Montri adreson de la nuna paĝo) -bookmark1_label=Nuna paĝo -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Malfermi en programo -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Malfermi en programo - -# Secondary toolbar and context menu -tools.title=Iloj -tools_label=Iloj -first_page.title=Iri al la unua paĝo -first_page_label=Iri al la unua paĝo -last_page.title=Iri al la lasta paĝo -last_page_label=Iri al la lasta paĝo -page_rotate_cw.title=Rotaciigi dekstrume -page_rotate_cw_label=Rotaciigi dekstrume -page_rotate_ccw.title=Rotaciigi maldekstrume -page_rotate_ccw_label=Rotaciigi maldekstrume - -cursor_text_select_tool.title=Aktivigi tekstan elektilon -cursor_text_select_tool_label=Teksta elektilo -cursor_hand_tool.title=Aktivigi ilon de mano -cursor_hand_tool_label=Ilo de mano - -scroll_page.title=Uzi ŝovadon de paĝo -scroll_page_label=Ŝovado de paĝo -scroll_vertical.title=Uzi vertikalan ŝovadon -scroll_vertical_label=Vertikala ŝovado -scroll_horizontal.title=Uzi horizontalan ŝovadon -scroll_horizontal_label=Horizontala ŝovado -scroll_wrapped.title=Uzi ambaŭdirektan ŝovadon -scroll_wrapped_label=Ambaŭdirekta ŝovado - -spread_none.title=Ne montri paĝojn po du -spread_none_label=Unupaĝa vido -spread_odd.title=Kunigi paĝojn komencante per nepara paĝo -spread_odd_label=Po du paĝoj, neparaj maldekstre -spread_even.title=Kunigi paĝojn komencante per para paĝo -spread_even_label=Po du paĝoj, paraj maldekstre - -# Document properties dialog box -document_properties.title=Atributoj de dokumento… -document_properties_label=Atributoj de dokumento… -document_properties_file_name=Nomo de dosiero: -document_properties_file_size=Grando de dosiero: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KO ({{size_b}} oktetoj) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MO ({{size_b}} oktetoj) -document_properties_title=Titolo: -document_properties_author=Aŭtoro: -document_properties_subject=Temo: -document_properties_keywords=Ŝlosilvorto: -document_properties_creation_date=Dato de kreado: -document_properties_modification_date=Dato de modifo: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Kreinto: -document_properties_producer=Produktinto de PDF: -document_properties_version=Versio de PDF: -document_properties_page_count=Nombro de paĝoj: -document_properties_page_size=Grando de paĝo: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=vertikala -document_properties_page_size_orientation_landscape=horizontala -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letera -document_properties_page_size_name_legal=Jura -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Rapida tekstaĵa vido: -document_properties_linearized_yes=Jes -document_properties_linearized_no=Ne -document_properties_close=Fermi - -print_progress_message=Preparo de dokumento por presi ĝin … -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Nuligi - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Montri/kaŝi flankan strion -toggle_sidebar_notification2.title=Montri/kaŝi flankan strion (la dokumento enhavas konturon/kunsendaĵojn/tavolojn) -toggle_sidebar_label=Montri/kaŝi flankan strion -document_outline.title=Montri la konturon de dokumento (alklaku duoble por faldi/malfaldi ĉiujn elementojn) -document_outline_label=Konturo de dokumento -attachments.title=Montri kunsendaĵojn -attachments_label=Kunsendaĵojn -layers.title=Montri tavolojn (duoble alklaku por remeti ĉiujn tavolojn en la norman staton) -layers_label=Tavoloj -thumbs.title=Montri miniaturojn -thumbs_label=Miniaturoj -current_outline_item.title=Trovi nunan konturan elementon -current_outline_item_label=Nuna kontura elemento -findbar.title=Serĉi en dokumento -findbar_label=Serĉi - -additional_layers=Aldonaj tavoloj -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Paĝo {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Paĝo {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniaturo de paĝo {{page}} - -# Find panel button title and messages -find_input.title=Serĉi -find_input.placeholder=Serĉi en dokumento… -find_previous.title=Serĉi la antaŭan aperon de la frazo -find_previous_label=Malantaŭen -find_next.title=Serĉi la venontan aperon de la frazo -find_next_label=Antaŭen -find_highlight=Elstarigi ĉiujn -find_match_case_label=Distingi inter majuskloj kaj minuskloj -find_match_diacritics_label=Respekti supersignojn -find_entire_word_label=Tutaj vortoj -find_reached_top=Komenco de la dokumento atingita, daŭrigado ekde la fino -find_reached_bottom=Fino de la dokumento atingita, daŭrigado ekde la komenco -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} el {{total}} kongruo -find_match_count[two]={{current}} el {{total}} kongruoj -find_match_count[few]={{current}} el {{total}} kongruoj -find_match_count[many]={{current}} el {{total}} kongruoj -find_match_count[other]={{current}} el {{total}} kongruoj -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Pli ol {{limit}} kongruoj -find_match_count_limit[one]=Pli ol {{limit}} kongruo -find_match_count_limit[two]=Pli ol {{limit}} kongruoj -find_match_count_limit[few]=Pli ol {{limit}} kongruoj -find_match_count_limit[many]=Pli ol {{limit}} kongruoj -find_match_count_limit[other]=Pli ol {{limit}} kongruoj -find_not_found=Frazo ne trovita - -# Predefined zoom values -page_scale_width=Larĝo de paĝo -page_scale_fit=Adapti paĝon -page_scale_auto=Aŭtomata skalo -page_scale_actual=Reala grando -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Okazis eraro dum la ŝargado de la PDF dosiero. -invalid_file_error=Nevalida aŭ difektita PDF dosiero. -missing_file_error=Mankas dosiero PDF. -unexpected_response_error=Neatendita respondo de servilo. -rendering_error=Okazis eraro dum la montro de la paĝo. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Prinoto: {{type}}] -password_label=Tajpu pasvorton por malfermi tiun ĉi dosieron PDF. -password_invalid=Nevalida pasvorto. Bonvolu provi denove. -password_ok=Akcepti -password_cancel=Nuligi - -printing_not_supported=Averto: tiu ĉi retumilo ne plene subtenas presadon. -printing_not_ready=Averto: la PDF dosiero ne estas plene ŝargita por presado. -web_fonts_disabled=Neaktivaj teksaĵaj tiparoj: ne elbas uzi enmetitajn tiparojn de PDF. - -# Editor -editor_free_text2.title=Teksto -editor_free_text2_label=Teksto -editor_ink2.title=Desegni -editor_ink2_label=Desegni - -editor_stamp.title=Aldoni bildon -editor_stamp_label=Aldoni bildon - -editor_stamp1.title=Aldoni aŭ modifi bildojn -editor_stamp1_label=Aldoni aŭ modifi bildojn - -free_text2_default_content=Ektajpi… - -# Editor Parameters -editor_free_text_color=Koloro -editor_free_text_size=Grando -editor_ink_color=Koloro -editor_ink_thickness=Dikeco -editor_ink_opacity=Maldiafaneco - -editor_stamp_add_image_label=Aldoni bildon -editor_stamp_add_image.title=Aldoni bildon - -# Editor aria -editor_free_text2_aria_label=Tekstan redaktilon -editor_ink2_aria_label=Desegnan redaktilon -editor_ink_canvas_aria_label=Bildo kreita de uzanto diff --git a/static/pdf.js/locale/es-AR/viewer.ftl b/static/pdf.js/locale/es-AR/viewer.ftl new file mode 100644 index 00000000..40610b24 --- /dev/null +++ b/static/pdf.js/locale/es-AR/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Página anterior +pdfjs-previous-button-label = Anterior +pdfjs-next-button = + .title = Página siguiente +pdfjs-next-button-label = Siguiente +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Página +# 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 = de { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ( { $pageNumber } de { $pagesCount } ) +pdfjs-zoom-out-button = + .title = Alejar +pdfjs-zoom-out-button-label = Alejar +pdfjs-zoom-in-button = + .title = Acercar +pdfjs-zoom-in-button-label = Acercar +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Cambiar a modo presentación +pdfjs-presentation-mode-button-label = Modo presentación +pdfjs-open-file-button = + .title = Abrir archivo +pdfjs-open-file-button-label = Abrir +pdfjs-print-button = + .title = Imprimir +pdfjs-print-button-label = Imprimir +pdfjs-save-button = + .title = Guardar +pdfjs-save-button-label = Guardar +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Descargar +# 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 = Descargar +pdfjs-bookmark-button = + .title = Página actual (Ver URL de la página actual) +pdfjs-bookmark-button-label = Página actual +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Abrir en la aplicación +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Abrir en la aplicación + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Herramientas +pdfjs-tools-button-label = Herramientas +pdfjs-first-page-button = + .title = Ir a primera página +pdfjs-first-page-button-label = Ir a primera página +pdfjs-last-page-button = + .title = Ir a última página +pdfjs-last-page-button-label = Ir a última página +pdfjs-page-rotate-cw-button = + .title = Rotar horario +pdfjs-page-rotate-cw-button-label = Rotar horario +pdfjs-page-rotate-ccw-button = + .title = Rotar antihorario +pdfjs-page-rotate-ccw-button-label = Rotar antihorario +pdfjs-cursor-text-select-tool-button = + .title = Habilitar herramienta de selección de texto +pdfjs-cursor-text-select-tool-button-label = Herramienta de selección de texto +pdfjs-cursor-hand-tool-button = + .title = Habilitar herramienta mano +pdfjs-cursor-hand-tool-button-label = Herramienta mano +pdfjs-scroll-page-button = + .title = Usar desplazamiento de página +pdfjs-scroll-page-button-label = Desplazamiento de página +pdfjs-scroll-vertical-button = + .title = Usar desplazamiento vertical +pdfjs-scroll-vertical-button-label = Desplazamiento vertical +pdfjs-scroll-horizontal-button = + .title = Usar desplazamiento vertical +pdfjs-scroll-horizontal-button-label = Desplazamiento horizontal +pdfjs-scroll-wrapped-button = + .title = Usar desplazamiento encapsulado +pdfjs-scroll-wrapped-button-label = Desplazamiento encapsulado +pdfjs-spread-none-button = + .title = No unir páginas dobles +pdfjs-spread-none-button-label = Sin dobles +pdfjs-spread-odd-button = + .title = Unir páginas dobles comenzando con las impares +pdfjs-spread-odd-button-label = Dobles impares +pdfjs-spread-even-button = + .title = Unir páginas dobles comenzando con las pares +pdfjs-spread-even-button-label = Dobles pares + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Propiedades del documento… +pdfjs-document-properties-button-label = Propiedades del documento… +pdfjs-document-properties-file-name = Nombre de archivo: +pdfjs-document-properties-file-size = Tamaño de archovo: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Título: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Asunto: +pdfjs-document-properties-keywords = Palabras clave: +pdfjs-document-properties-creation-date = Fecha de creación: +pdfjs-document-properties-modification-date = Fecha de modificación: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Creador: +pdfjs-document-properties-producer = PDF Productor: +pdfjs-document-properties-version = Versión de PDF: +pdfjs-document-properties-page-count = Cantidad de páginas: +pdfjs-document-properties-page-size = Tamaño de página: +pdfjs-document-properties-page-size-unit-inches = en +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = normal +pdfjs-document-properties-page-size-orientation-landscape = apaisado +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 = Carta +pdfjs-document-properties-page-size-name-legal = 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 = Vista rápida de la Web: +pdfjs-document-properties-linearized-yes = Sí +pdfjs-document-properties-linearized-no = No +pdfjs-document-properties-close-button = Cerrar + +## Print + +pdfjs-print-progress-message = Preparando documento para imprimir… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Cancelar +pdfjs-printing-not-supported = Advertencia: La impresión no está totalmente soportada por este navegador. +pdfjs-printing-not-ready = Advertencia: El PDF no está completamente cargado para impresión. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Alternar barra lateral +pdfjs-toggle-sidebar-notification-button = + .title = Alternar barra lateral (el documento contiene esquemas/adjuntos/capas) +pdfjs-toggle-sidebar-button-label = Alternar barra lateral +pdfjs-document-outline-button = + .title = Mostrar esquema del documento (doble clic para expandir/colapsar todos los ítems) +pdfjs-document-outline-button-label = Esquema del documento +pdfjs-attachments-button = + .title = Mostrar adjuntos +pdfjs-attachments-button-label = Adjuntos +pdfjs-layers-button = + .title = Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado) +pdfjs-layers-button-label = Capas +pdfjs-thumbs-button = + .title = Mostrar miniaturas +pdfjs-thumbs-button-label = Miniaturas +pdfjs-current-outline-item-button = + .title = Buscar elemento de esquema actual +pdfjs-current-outline-item-button-label = Elemento de esquema actual +pdfjs-findbar-button = + .title = Buscar en documento +pdfjs-findbar-button-label = Buscar +pdfjs-additional-layers = Capas adicionales + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Página { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura de página { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Buscar + .placeholder = Buscar en documento… +pdfjs-find-previous-button = + .title = Buscar la aparición anterior de la frase +pdfjs-find-previous-button-label = Anterior +pdfjs-find-next-button = + .title = Buscar la siguiente aparición de la frase +pdfjs-find-next-button-label = Siguiente +pdfjs-find-highlight-checkbox = Resaltar todo +pdfjs-find-match-case-checkbox-label = Coincidir mayúsculas +pdfjs-find-match-diacritics-checkbox-label = Coincidir diacríticos +pdfjs-find-entire-word-checkbox-label = Palabras completas +pdfjs-find-reached-top = Inicio de documento alcanzado, continuando desde abajo +pdfjs-find-reached-bottom = Fin de documento alcanzando, continuando desde arriba +# 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 } de { $total } coincidencia + *[other] { $current } de { $total } coincidencias + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Más de { $limit } coincidencia + *[other] Más de { $limit } coincidencias + } +pdfjs-find-not-found = Frase no encontrada + +## Predefined zoom values + +pdfjs-page-scale-width = Ancho de página +pdfjs-page-scale-fit = Ajustar página +pdfjs-page-scale-auto = Zoom automático +pdfjs-page-scale-actual = Tamaño real +# 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 = Página { $page } + +## Loading indicator messages + +pdfjs-loading-error = Ocurrió un error al cargar el PDF. +pdfjs-invalid-file-error = Archivo PDF no válido o cocrrupto. +pdfjs-missing-file-error = Archivo PDF faltante. +pdfjs-unexpected-response-error = Respuesta del servidor inesperada. +pdfjs-rendering-error = Ocurrió un error al dibujar la página. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Anotación] + +## Password + +pdfjs-password-label = Ingrese la contraseña para abrir este archivo PDF +pdfjs-password-invalid = Contraseña inválida. Intente nuevamente. +pdfjs-password-ok-button = Aceptar +pdfjs-password-cancel-button = Cancelar +pdfjs-web-fonts-disabled = Tipografía web deshabilitada: no se pueden usar tipos incrustados en PDF. + +## Editing + +pdfjs-editor-free-text-button = + .title = Texto +pdfjs-editor-free-text-button-label = Texto +pdfjs-editor-ink-button = + .title = Dibujar +pdfjs-editor-ink-button-label = Dibujar +pdfjs-editor-stamp-button = + .title = Agregar o editar imágenes +pdfjs-editor-stamp-button-label = Agregar o editar imágenes +pdfjs-editor-highlight-button = + .title = Resaltar +pdfjs-editor-highlight-button-label = Resaltar +pdfjs-highlight-floating-button = + .title = Resaltar +pdfjs-highlight-floating-button1 = + .title = Resaltar + .aria-label = Resaltar +pdfjs-highlight-floating-button-label = Resaltar + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Eliminar dibujo +pdfjs-editor-remove-freetext-button = + .title = Eliminar texto +pdfjs-editor-remove-stamp-button = + .title = Eliminar imagen +pdfjs-editor-remove-highlight-button = + .title = Eliminar resaltado + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Color +pdfjs-editor-free-text-size-input = Tamaño +pdfjs-editor-ink-color-input = Color +pdfjs-editor-ink-thickness-input = Espesor +pdfjs-editor-ink-opacity-input = Opacidad +pdfjs-editor-stamp-add-image-button = + .title = Agregar una imagen +pdfjs-editor-stamp-add-image-button-label = Agregar una imagen +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Grosor +pdfjs-editor-free-highlight-thickness-title = + .title = Cambiar el grosor al resaltar elementos que no sean texto +pdfjs-free-text = + .aria-label = Editor de texto +pdfjs-free-text-default-content = Empezar a tipear… +pdfjs-ink = + .aria-label = Editor de dibujos +pdfjs-ink-canvas = + .aria-label = Imagen creada por el usuario + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Texto alternativo +pdfjs-editor-alt-text-edit-button-label = Editar el texto alternativo +pdfjs-editor-alt-text-dialog-label = Eligir una opción +pdfjs-editor-alt-text-dialog-description = El texto alternativo (texto alternativo) ayuda cuando las personas no pueden ver la imagen o cuando no se carga. +pdfjs-editor-alt-text-add-description-label = Agregar una descripción +pdfjs-editor-alt-text-add-description-description = Intente escribir 1 o 2 oraciones que describan el tema, el entorno o las acciones. +pdfjs-editor-alt-text-mark-decorative-label = Marcar como decorativo +pdfjs-editor-alt-text-mark-decorative-description = Esto se usa para imágenes ornamentales, como bordes o marcas de agua. +pdfjs-editor-alt-text-cancel-button = Cancelar +pdfjs-editor-alt-text-save-button = Guardar +pdfjs-editor-alt-text-decorative-tooltip = Marcado como decorativo +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Por ejemplo: “Un joven se sienta a la mesa a comer” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Esquina superior izquierda — cambiar el tamaño +pdfjs-editor-resizer-label-top-middle = Arriba en el medio — cambiar el tamaño +pdfjs-editor-resizer-label-top-right = Esquina superior derecha — cambiar el tamaño +pdfjs-editor-resizer-label-middle-right = Al centro a la derecha — cambiar el tamaño +pdfjs-editor-resizer-label-bottom-right = Esquina inferior derecha — cambiar el tamaño +pdfjs-editor-resizer-label-bottom-middle = Abajo en el medio — cambiar el tamaño +pdfjs-editor-resizer-label-bottom-left = Esquina inferior izquierda — cambiar el tamaño +pdfjs-editor-resizer-label-middle-left = Al centro a la izquierda — cambiar el tamaño + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Color de resaltado +pdfjs-editor-colorpicker-button = + .title = Cambiar el color +pdfjs-editor-colorpicker-dropdown = + .aria-label = Opciones de color +pdfjs-editor-colorpicker-yellow = + .title = Amarillo +pdfjs-editor-colorpicker-green = + .title = Verde +pdfjs-editor-colorpicker-blue = + .title = Azul +pdfjs-editor-colorpicker-pink = + .title = Rosado +pdfjs-editor-colorpicker-red = + .title = Rojo + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Mostrar todo +pdfjs-editor-highlight-show-all-button = + .title = Mostrar todo diff --git a/static/pdf.js/locale/es-AR/viewer.properties b/static/pdf.js/locale/es-AR/viewer.properties deleted file mode 100644 index 63bb5389..00000000 --- a/static/pdf.js/locale/es-AR/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Página anterior -previous_label=Anterior -next.title=Página siguiente -next_label=Siguiente - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Página -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=de {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=( {{pageNumber}} de {{pagesCount}} ) - -zoom_out.title=Alejar -zoom_out_label=Alejar -zoom_in.title=Acercar -zoom_in_label=Acercar -zoom.title=Zoom -presentation_mode.title=Cambiar a modo presentación -presentation_mode_label=Modo presentación -open_file.title=Abrir archivo -open_file_label=Abrir -print.title=Imprimir -print_label=Imprimir -save.title=Guardar -save_label=Guardar -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Descargar -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Descargar -bookmark1.title=Página actual (Ver URL de la página actual) -bookmark1_label=Página actual -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Abrir en la aplicación -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Abrir en la aplicación - -# Secondary toolbar and context menu -tools.title=Herramientas -tools_label=Herramientas -first_page.title=Ir a primera página -first_page_label=Ir a primera página -last_page.title=Ir a última página -last_page_label=Ir a última página -page_rotate_cw.title=Rotar horario -page_rotate_cw_label=Rotar horario -page_rotate_ccw.title=Rotar antihorario -page_rotate_ccw_label=Rotar antihorario - -cursor_text_select_tool.title=Habilitar herramienta de selección de texto -cursor_text_select_tool_label=Herramienta de selección de texto -cursor_hand_tool.title=Habilitar herramienta mano -cursor_hand_tool_label=Herramienta mano - -scroll_page.title=Usar desplazamiento de página -scroll_page_label=Desplazamiento de página -scroll_vertical.title=Usar desplazamiento vertical -scroll_vertical_label=Desplazamiento vertical -scroll_horizontal.title=Usar desplazamiento vertical -scroll_horizontal_label=Desplazamiento horizontal -scroll_wrapped.title=Usar desplazamiento encapsulado -scroll_wrapped_label=Desplazamiento encapsulado - -spread_none.title=No unir páginas dobles -spread_none_label=Sin dobles -spread_odd.title=Unir páginas dobles comenzando con las impares -spread_odd_label=Dobles impares -spread_even.title=Unir páginas dobles comenzando con las pares -spread_even_label=Dobles pares - -# Document properties dialog box -document_properties.title=Propiedades del documento… -document_properties_label=Propiedades del documento… -document_properties_file_name=Nombre de archivo: -document_properties_file_size=Tamaño de archovo: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Título: -document_properties_author=Autor: -document_properties_subject=Asunto: -document_properties_keywords=Palabras clave: -document_properties_creation_date=Fecha de creación: -document_properties_modification_date=Fecha de modificación: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Creador: -document_properties_producer=PDF Productor: -document_properties_version=Versión de PDF: -document_properties_page_count=Cantidad de páginas: -document_properties_page_size=Tamaño de página: -document_properties_page_size_unit_inches=en -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=normal -document_properties_page_size_orientation_landscape=apaisado -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Carta -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Vista rápida de la Web: -document_properties_linearized_yes=Sí -document_properties_linearized_no=No -document_properties_close=Cerrar - -print_progress_message=Preparando documento para imprimir… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Cancelar - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Alternar barra lateral -toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas) -toggle_sidebar_label=Alternar barra lateral -document_outline.title=Mostrar esquema del documento (doble clic para expandir/colapsar todos los ítems) -document_outline_label=Esquema del documento -attachments.title=Mostrar adjuntos -attachments_label=Adjuntos -layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado) -layers_label=Capas -thumbs.title=Mostrar miniaturas -thumbs_label=Miniaturas -current_outline_item.title=Buscar elemento de esquema actual -current_outline_item_label=Elemento de esquema actual -findbar.title=Buscar en documento -findbar_label=Buscar - -additional_layers=Capas adicionales -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Página {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Página {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura de página {{page}} - -# Find panel button title and messages -find_input.title=Buscar -find_input.placeholder=Buscar en documento… -find_previous.title=Buscar la aparición anterior de la frase -find_previous_label=Anterior -find_next.title=Buscar la siguiente aparición de la frase -find_next_label=Siguiente -find_highlight=Resaltar todo -find_match_case_label=Coincidir mayúsculas -find_match_diacritics_label=Coincidir diacríticos -find_entire_word_label=Palabras completas -find_reached_top=Inicio de documento alcanzado, continuando desde abajo -find_reached_bottom=Fin de documento alcanzando, continuando desde arriba -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} de {{total}} coincidencias -find_match_count[two]={{current}} de {{total}} coincidencias -find_match_count[few]={{current}} de {{total}} coincidencias -find_match_count[many]={{current}} de {{total}} coincidencias -find_match_count[other]={{current}} de {{total}} coincidencias -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Más de {{limit}} coincidencias -find_match_count_limit[one]=Más de {{limit}} coinciden -find_match_count_limit[two]=Más de {{limit}} coincidencias -find_match_count_limit[few]=Más de {{limit}} coincidencias -find_match_count_limit[many]=Más de {{limit}} coincidencias -find_match_count_limit[other]=Más de {{limit}} coincidencias -find_not_found=Frase no encontrada - -# Predefined zoom values -page_scale_width=Ancho de página -page_scale_fit=Ajustar página -page_scale_auto=Zoom automático -page_scale_actual=Tamaño real -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Ocurrió un error al cargar el PDF. -invalid_file_error=Archivo PDF no válido o cocrrupto. -missing_file_error=Archivo PDF faltante. -unexpected_response_error=Respuesta del servidor inesperada. -rendering_error=Ocurrió un error al dibujar la página. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Anotación] -password_label=Ingrese la contraseña para abrir este archivo PDF -password_invalid=Contraseña inválida. Intente nuevamente. -password_ok=Aceptar -password_cancel=Cancelar - -printing_not_supported=Advertencia: La impresión no está totalmente soportada por este navegador. -printing_not_ready=Advertencia: El PDF no está completamente cargado para impresión. -web_fonts_disabled=Tipografía web deshabilitada: no se pueden usar tipos incrustados en PDF. - -# Editor -editor_free_text2.title=Texto -editor_free_text2_label=Texto -editor_ink2.title=Dibujar -editor_ink2_label=Dibujar - -editor_stamp1.title=Agregar o editar imágenes -editor_stamp1_label=Agregar o editar imágenes - -free_text2_default_content=Empezar a tipear… - -# Editor Parameters -editor_free_text_color=Color -editor_free_text_size=Tamaño -editor_ink_color=Color -editor_ink_thickness=Espesor -editor_ink_opacity=Opacidad - -editor_stamp_add_image_label=Agregar una imagen -editor_stamp_add_image.title=Agregar una imagen - -# Editor aria -editor_free_text2_aria_label=Editor de texto -editor_ink2_aria_label=Editor de dibujos -editor_ink_canvas_aria_label=Imagen creada por el usuario - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Texto alternativo -editor_alt_text_edit_button_label=Editar el texto alternativo -editor_alt_text_dialog_label=Eligir una opción -editor_alt_text_dialog_description=El texto alternativo (texto alternativo) ayuda cuando las personas no pueden ver la imagen o cuando no se carga. -editor_alt_text_add_description_label=Agregar una descripción -editor_alt_text_add_description_description=Intente escribir 1 o 2 oraciones que describan el tema, el entorno o las acciones. -editor_alt_text_mark_decorative_label=Marcar como decorativo -editor_alt_text_mark_decorative_description=Esto se usa para imágenes ornamentales, como bordes o marcas de agua. -editor_alt_text_cancel_button=Cancelar -editor_alt_text_save_button=Guardar -editor_alt_text_decorative_tooltip=Marcado como decorativo -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=Por ejemplo: “Un joven se sienta a la mesa a comer” diff --git a/static/pdf.js/locale/es-CL/viewer.ftl b/static/pdf.js/locale/es-CL/viewer.ftl new file mode 100644 index 00000000..c4507a3f --- /dev/null +++ b/static/pdf.js/locale/es-CL/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Página anterior +pdfjs-previous-button-label = Anterior +pdfjs-next-button = + .title = Página siguiente +pdfjs-next-button-label = Siguiente +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Página +# 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 = de { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount }) +pdfjs-zoom-out-button = + .title = Alejar +pdfjs-zoom-out-button-label = Alejar +pdfjs-zoom-in-button = + .title = Acercar +pdfjs-zoom-in-button-label = Acercar +pdfjs-zoom-select = + .title = Ampliación +pdfjs-presentation-mode-button = + .title = Cambiar al modo de presentación +pdfjs-presentation-mode-button-label = Modo de presentación +pdfjs-open-file-button = + .title = Abrir archivo +pdfjs-open-file-button-label = Abrir +pdfjs-print-button = + .title = Imprimir +pdfjs-print-button-label = Imprimir +pdfjs-save-button = + .title = Guardar +pdfjs-save-button-label = Guardar +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Descargar +# 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 = Descargar +pdfjs-bookmark-button = + .title = Página actual (Ver URL de la página actual) +pdfjs-bookmark-button-label = Página actual +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Abrir en una aplicación +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Abrir en una aplicación + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Herramientas +pdfjs-tools-button-label = Herramientas +pdfjs-first-page-button = + .title = Ir a la primera página +pdfjs-first-page-button-label = Ir a la primera página +pdfjs-last-page-button = + .title = Ir a la última página +pdfjs-last-page-button-label = Ir a la última página +pdfjs-page-rotate-cw-button = + .title = Girar a la derecha +pdfjs-page-rotate-cw-button-label = Girar a la derecha +pdfjs-page-rotate-ccw-button = + .title = Girar a la izquierda +pdfjs-page-rotate-ccw-button-label = Girar a la izquierda +pdfjs-cursor-text-select-tool-button = + .title = Activar la herramienta de selección de texto +pdfjs-cursor-text-select-tool-button-label = Herramienta de selección de texto +pdfjs-cursor-hand-tool-button = + .title = Activar la herramienta de mano +pdfjs-cursor-hand-tool-button-label = Herramienta de mano +pdfjs-scroll-page-button = + .title = Usar desplazamiento de página +pdfjs-scroll-page-button-label = Desplazamiento de página +pdfjs-scroll-vertical-button = + .title = Usar desplazamiento vertical +pdfjs-scroll-vertical-button-label = Desplazamiento vertical +pdfjs-scroll-horizontal-button = + .title = Usar desplazamiento horizontal +pdfjs-scroll-horizontal-button-label = Desplazamiento horizontal +pdfjs-scroll-wrapped-button = + .title = Usar desplazamiento en bloque +pdfjs-scroll-wrapped-button-label = Desplazamiento en bloque +pdfjs-spread-none-button = + .title = No juntar páginas a modo de libro +pdfjs-spread-none-button-label = Vista de una página +pdfjs-spread-odd-button = + .title = Junta las páginas partiendo con una de número impar +pdfjs-spread-odd-button-label = Vista de libro impar +pdfjs-spread-even-button = + .title = Junta las páginas partiendo con una de número par +pdfjs-spread-even-button-label = Vista de libro par + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Propiedades del documento… +pdfjs-document-properties-button-label = Propiedades del documento… +pdfjs-document-properties-file-name = Nombre de archivo: +pdfjs-document-properties-file-size = Tamaño del archivo: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Título: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Asunto: +pdfjs-document-properties-keywords = Palabras clave: +pdfjs-document-properties-creation-date = Fecha de creación: +pdfjs-document-properties-modification-date = Fecha de modificación: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Creador: +pdfjs-document-properties-producer = Productor del PDF: +pdfjs-document-properties-version = Versión de PDF: +pdfjs-document-properties-page-count = Cantidad de páginas: +pdfjs-document-properties-page-size = Tamaño de la página: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = vertical +pdfjs-document-properties-page-size-orientation-landscape = horizontal +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 = Carta +pdfjs-document-properties-page-size-name-legal = Oficio + +## 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 = Vista rápida en Web: +pdfjs-document-properties-linearized-yes = Sí +pdfjs-document-properties-linearized-no = No +pdfjs-document-properties-close-button = Cerrar + +## Print + +pdfjs-print-progress-message = Preparando documento para impresión… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Cancelar +pdfjs-printing-not-supported = Advertencia: Imprimir no está soportado completamente por este navegador. +pdfjs-printing-not-ready = Advertencia: El PDF no está completamente cargado para ser impreso. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Barra lateral +pdfjs-toggle-sidebar-notification-button = + .title = Cambiar barra lateral (índice de contenidos del documento/adjuntos/capas) +pdfjs-toggle-sidebar-button-label = Mostrar u ocultar la barra lateral +pdfjs-document-outline-button = + .title = Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos) +pdfjs-document-outline-button-label = Esquema del documento +pdfjs-attachments-button = + .title = Mostrar adjuntos +pdfjs-attachments-button-label = Adjuntos +pdfjs-layers-button = + .title = Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado) +pdfjs-layers-button-label = Capas +pdfjs-thumbs-button = + .title = Mostrar miniaturas +pdfjs-thumbs-button-label = Miniaturas +pdfjs-current-outline-item-button = + .title = Buscar elemento de esquema actual +pdfjs-current-outline-item-button-label = Elemento de esquema actual +pdfjs-findbar-button = + .title = Buscar en el documento +pdfjs-findbar-button-label = Buscar +pdfjs-additional-layers = Capas adicionales + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Página { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura de la página { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Encontrar + .placeholder = Encontrar en el documento… +pdfjs-find-previous-button = + .title = Buscar la aparición anterior de la frase +pdfjs-find-previous-button-label = Previo +pdfjs-find-next-button = + .title = Buscar la siguiente aparición de la frase +pdfjs-find-next-button-label = Siguiente +pdfjs-find-highlight-checkbox = Destacar todos +pdfjs-find-match-case-checkbox-label = Coincidir mayús./minús. +pdfjs-find-match-diacritics-checkbox-label = Coincidir diacríticos +pdfjs-find-entire-word-checkbox-label = Palabras completas +pdfjs-find-reached-top = Se alcanzó el inicio del documento, continuando desde el final +pdfjs-find-reached-bottom = Se alcanzó el final del documento, continuando desde el inicio +# 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] Coincidencia { $current } de { $total } + *[other] Coincidencia { $current } de { $total } + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Más de { $limit } coincidencia + *[other] Más de { $limit } coincidencias + } +pdfjs-find-not-found = Frase no encontrada + +## Predefined zoom values + +pdfjs-page-scale-width = Ancho de página +pdfjs-page-scale-fit = Ajuste de página +pdfjs-page-scale-auto = Aumento automático +pdfjs-page-scale-actual = Tamaño 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 = Página { $page } + +## Loading indicator messages + +pdfjs-loading-error = Ocurrió un error al cargar el PDF. +pdfjs-invalid-file-error = Archivo PDF inválido o corrupto. +pdfjs-missing-file-error = Falta el archivo PDF. +pdfjs-unexpected-response-error = Respuesta del servidor inesperada. +pdfjs-rendering-error = Ocurrió un error al renderizar la página. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Anotación] + +## Password + +pdfjs-password-label = Ingrese la contraseña para abrir este archivo PDF. +pdfjs-password-invalid = Contraseña inválida. Por favor, vuelve a intentarlo. +pdfjs-password-ok-button = Aceptar +pdfjs-password-cancel-button = Cancelar +pdfjs-web-fonts-disabled = Las tipografías web están desactivadas: imposible usar las fuentes PDF embebidas. + +## Editing + +pdfjs-editor-free-text-button = + .title = Texto +pdfjs-editor-free-text-button-label = Texto +pdfjs-editor-ink-button = + .title = Dibujar +pdfjs-editor-ink-button-label = Dibujar +pdfjs-editor-stamp-button = + .title = Añadir o editar imágenes +pdfjs-editor-stamp-button-label = Añadir o editar imágenes +pdfjs-editor-highlight-button = + .title = Destacar +pdfjs-editor-highlight-button-label = Destacar +pdfjs-highlight-floating-button = + .title = Destacar +pdfjs-highlight-floating-button1 = + .title = Destacar + .aria-label = Destacar +pdfjs-highlight-floating-button-label = Destacar + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Eliminar dibujo +pdfjs-editor-remove-freetext-button = + .title = Eliminar texto +pdfjs-editor-remove-stamp-button = + .title = Eliminar imagen +pdfjs-editor-remove-highlight-button = + .title = Quitar resaltado + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Color +pdfjs-editor-free-text-size-input = Tamaño +pdfjs-editor-ink-color-input = Color +pdfjs-editor-ink-thickness-input = Grosor +pdfjs-editor-ink-opacity-input = Opacidad +pdfjs-editor-stamp-add-image-button = + .title = Añadir imagen +pdfjs-editor-stamp-add-image-button-label = Añadir imagen +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Grosor +pdfjs-editor-free-highlight-thickness-title = + .title = Cambia el grosor al resaltar elementos que no sean texto +pdfjs-free-text = + .aria-label = Editor de texto +pdfjs-free-text-default-content = Empieza a escribir… +pdfjs-ink = + .aria-label = Editor de dibujos +pdfjs-ink-canvas = + .aria-label = Imagen creada por el usuario + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Texto alternativo +pdfjs-editor-alt-text-edit-button-label = Editar texto alternativo +pdfjs-editor-alt-text-dialog-label = Elige una opción +pdfjs-editor-alt-text-dialog-description = El texto alternativo (alt text) ayuda cuando las personas no pueden ver la imagen o cuando no se carga. +pdfjs-editor-alt-text-add-description-label = Añade una descripción +pdfjs-editor-alt-text-add-description-description = Intenta escribir 1 o 2 oraciones que describan el tema, el ambiente o las acciones. +pdfjs-editor-alt-text-mark-decorative-label = Marcar como decorativa +pdfjs-editor-alt-text-mark-decorative-description = Se utiliza para imágenes ornamentales, como bordes o marcas de agua. +pdfjs-editor-alt-text-cancel-button = Cancelar +pdfjs-editor-alt-text-save-button = Guardar +pdfjs-editor-alt-text-decorative-tooltip = Marcada como decorativa +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Por ejemplo: “Un joven se sienta a la mesa a comer” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Esquina superior izquierda — cambiar el tamaño +pdfjs-editor-resizer-label-top-middle = Borde superior en el medio — cambiar el tamaño +pdfjs-editor-resizer-label-top-right = Esquina superior derecha — cambiar el tamaño +pdfjs-editor-resizer-label-middle-right = Borde derecho en el medio — cambiar el tamaño +pdfjs-editor-resizer-label-bottom-right = Esquina inferior derecha — cambiar el tamaño +pdfjs-editor-resizer-label-bottom-middle = Borde inferior en el medio — cambiar el tamaño +pdfjs-editor-resizer-label-bottom-left = Esquina inferior izquierda — cambiar el tamaño +pdfjs-editor-resizer-label-middle-left = Borde izquierdo en el medio — cambiar el tamaño + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Color de resaltado +pdfjs-editor-colorpicker-button = + .title = Cambiar color +pdfjs-editor-colorpicker-dropdown = + .aria-label = Opciones de color +pdfjs-editor-colorpicker-yellow = + .title = Amarillo +pdfjs-editor-colorpicker-green = + .title = Verde +pdfjs-editor-colorpicker-blue = + .title = Azul +pdfjs-editor-colorpicker-pink = + .title = Rosa +pdfjs-editor-colorpicker-red = + .title = Rojo + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Mostrar todo +pdfjs-editor-highlight-show-all-button = + .title = Mostrar todo diff --git a/static/pdf.js/locale/es-CL/viewer.properties b/static/pdf.js/locale/es-CL/viewer.properties deleted file mode 100644 index b7996bc9..00000000 --- a/static/pdf.js/locale/es-CL/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Página anterior -previous_label=Anterior -next.title=Página siguiente -next_label=Siguiente - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Página -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=de {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} de {{pagesCount}}) - -zoom_out.title=Alejar -zoom_out_label=Alejar -zoom_in.title=Acercar -zoom_in_label=Acercar -zoom.title=Ampliación -presentation_mode.title=Cambiar al modo de presentación -presentation_mode_label=Modo de presentación -open_file.title=Abrir archivo -open_file_label=Abrir -print.title=Imprimir -print_label=Imprimir -save.title=Guardar -save_label=Guardar -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Descargar -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Descargar -bookmark1.title=Página actual (Ver URL de la página actual) -bookmark1_label=Página actual -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Abrir en una aplicación -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Abrir en una aplicación - -# Secondary toolbar and context menu -tools.title=Herramientas -tools_label=Herramientas -first_page.title=Ir a la primera página -first_page_label=Ir a la primera página -last_page.title=Ir a la última página -last_page_label=Ir a la última página -page_rotate_cw.title=Girar a la derecha -page_rotate_cw_label=Girar a la derecha -page_rotate_ccw.title=Girar a la izquierda -page_rotate_ccw_label=Girar a la izquierda - -cursor_text_select_tool.title=Activar la herramienta de selección de texto -cursor_text_select_tool_label=Herramienta de selección de texto -cursor_hand_tool.title=Activar la herramienta de mano -cursor_hand_tool_label=Herramienta de mano - -scroll_page.title=Usar desplazamiento de página -scroll_page_label=Desplazamiento de página -scroll_vertical.title=Usar desplazamiento vertical -scroll_vertical_label=Desplazamiento vertical -scroll_horizontal.title=Usar desplazamiento horizontal -scroll_horizontal_label=Desplazamiento horizontal -scroll_wrapped.title=Usar desplazamiento en bloque -scroll_wrapped_label=Desplazamiento en bloque - -spread_none.title=No juntar páginas a modo de libro -spread_none_label=Vista de una página -spread_odd.title=Junta las páginas partiendo con una de número impar -spread_odd_label=Vista de libro impar -spread_even.title=Junta las páginas partiendo con una de número par -spread_even_label=Vista de libro par - -# Document properties dialog box -document_properties.title=Propiedades del documento… -document_properties_label=Propiedades del documento… -document_properties_file_name=Nombre de archivo: -document_properties_file_size=Tamaño del archivo: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Título: -document_properties_author=Autor: -document_properties_subject=Asunto: -document_properties_keywords=Palabras clave: -document_properties_creation_date=Fecha de creación: -document_properties_modification_date=Fecha de modificación: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Creador: -document_properties_producer=Productor del PDF: -document_properties_version=Versión de PDF: -document_properties_page_count=Cantidad de páginas: -document_properties_page_size=Tamaño de la página: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=vertical -document_properties_page_size_orientation_landscape=horizontal -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Carta -document_properties_page_size_name_legal=Oficio -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Vista rápida en Web: -document_properties_linearized_yes=Sí -document_properties_linearized_no=No -document_properties_close=Cerrar - -print_progress_message=Preparando documento para impresión… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Cancelar - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Barra lateral -toggle_sidebar_notification2.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos/capas) -toggle_sidebar_label=Mostrar u ocultar la barra lateral -document_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos) -document_outline_label=Esquema del documento -attachments.title=Mostrar adjuntos -attachments_label=Adjuntos -layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado) -layers_label=Capas -thumbs.title=Mostrar miniaturas -thumbs_label=Miniaturas -current_outline_item.title=Buscar elemento de esquema actual -current_outline_item_label=Elemento de esquema actual -findbar.title=Buscar en el documento -findbar_label=Buscar - -additional_layers=Capas adicionales -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Página {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Página {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura de la página {{page}} - -# Find panel button title and messages -find_input.title=Encontrar -find_input.placeholder=Encontrar en el documento… -find_previous.title=Buscar la aparición anterior de la frase -find_previous_label=Previo -find_next.title=Buscar la siguiente aparición de la frase -find_next_label=Siguiente -find_highlight=Destacar todos -find_match_case_label=Coincidir mayús./minús. -find_match_diacritics_label=Coincidir diacríticos -find_entire_word_label=Palabras completas -find_reached_top=Se alcanzó el inicio del documento, continuando desde el final -find_reached_bottom=Se alcanzó el final del documento, continuando desde el inicio -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]=Coincidencia {{current}} de {{total}} -find_match_count[two]=Coincidencia {{current}} de {{total}} -find_match_count[few]=Coincidencia {{current}} de {{total}} -find_match_count[many]=Coincidencia {{current}} de {{total}} -find_match_count[other]=Coincidencia {{current}} de {{total}} -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Más de {{limit}} coincidencias -find_match_count_limit[one]=Más de {{limit}} coincidencia -find_match_count_limit[two]=Más de {{limit}} coincidencias -find_match_count_limit[few]=Más de {{limit}} coincidencias -find_match_count_limit[many]=Más de {{limit}} coincidencias -find_match_count_limit[other]=Más de {{limit}} coincidencias -find_not_found=Frase no encontrada - -# Predefined zoom values -page_scale_width=Ancho de página -page_scale_fit=Ajuste de página -page_scale_auto=Aumento automático -page_scale_actual=Tamaño actual -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Ocurrió un error al cargar el PDF. -invalid_file_error=Archivo PDF inválido o corrupto. -missing_file_error=Falta el archivo PDF. -unexpected_response_error=Respuesta del servidor inesperada. -rendering_error=Ocurrió un error al renderizar la página. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Anotación] -password_label=Ingrese la contraseña para abrir este archivo PDF. -password_invalid=Contraseña inválida. Por favor, vuelve a intentarlo. -password_ok=Aceptar -password_cancel=Cancelar - -printing_not_supported=Advertencia: Imprimir no está soportado completamente por este navegador. -printing_not_ready=Advertencia: El PDF no está completamente cargado para ser impreso. -web_fonts_disabled=Las tipografías web están desactivadas: imposible usar las fuentes PDF embebidas. - -# Editor -editor_free_text2.title=Texto -editor_free_text2_label=Texto -editor_ink2.title=Dibujar -editor_ink2_label=Dibujar - -editor_stamp1.title=Añadir o editar imágenes -editor_stamp1_label=Añadir o editar imágenes - -free_text2_default_content=Empieza a escribir… - -# Editor Parameters -editor_free_text_color=Color -editor_free_text_size=Tamaño -editor_ink_color=Color -editor_ink_thickness=Grosor -editor_ink_opacity=Opacidad - -editor_stamp_add_image_label=Añadir imagen -editor_stamp_add_image.title=Añadir imagen - -# Editor aria -editor_free_text2_aria_label=Editor de texto -editor_ink2_aria_label=Editor de dibujos -editor_ink_canvas_aria_label=Imagen creada por el usuario - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Texto alternativo -editor_alt_text_edit_button_label=Editar texto alternativo -editor_alt_text_dialog_label=Elige una opción -editor_alt_text_dialog_description=El texto alternativo (alt text) ayuda cuando las personas no pueden ver la imagen o cuando no se carga. -editor_alt_text_add_description_label=Añade una descripción -editor_alt_text_add_description_description=Intenta escribir 1 o 2 oraciones que describan el tema, el ambiente o las acciones. -editor_alt_text_mark_decorative_label=Marcar como decorativa -editor_alt_text_mark_decorative_description=Se utiliza para imágenes ornamentales, como bordes o marcas de agua. -editor_alt_text_cancel_button=Cancelar -editor_alt_text_save_button=Guardar -editor_alt_text_decorative_tooltip=Marcada como decorativa -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=Por ejemplo: “Un joven se sienta a la mesa a comer” diff --git a/static/pdf.js/locale/es-ES/viewer.ftl b/static/pdf.js/locale/es-ES/viewer.ftl new file mode 100644 index 00000000..e3f87b47 --- /dev/null +++ b/static/pdf.js/locale/es-ES/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Página anterior +pdfjs-previous-button-label = Anterior +pdfjs-next-button = + .title = Página siguiente +pdfjs-next-button-label = Siguiente +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Página +# 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 = de { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount }) +pdfjs-zoom-out-button = + .title = Reducir +pdfjs-zoom-out-button-label = Reducir +pdfjs-zoom-in-button = + .title = Aumentar +pdfjs-zoom-in-button-label = Aumentar +pdfjs-zoom-select = + .title = Tamaño +pdfjs-presentation-mode-button = + .title = Cambiar al modo presentación +pdfjs-presentation-mode-button-label = Modo presentación +pdfjs-open-file-button = + .title = Abrir archivo +pdfjs-open-file-button-label = Abrir +pdfjs-print-button = + .title = Imprimir +pdfjs-print-button-label = Imprimir +pdfjs-save-button = + .title = Guardar +pdfjs-save-button-label = Guardar +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Descargar +# 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 = Descargar +pdfjs-bookmark-button = + .title = Página actual (Ver URL de la página actual) +pdfjs-bookmark-button-label = Página actual +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Abrir en aplicación +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Abrir en aplicación + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Herramientas +pdfjs-tools-button-label = Herramientas +pdfjs-first-page-button = + .title = Ir a la primera página +pdfjs-first-page-button-label = Ir a la primera página +pdfjs-last-page-button = + .title = Ir a la última página +pdfjs-last-page-button-label = Ir a la última página +pdfjs-page-rotate-cw-button = + .title = Rotar en sentido horario +pdfjs-page-rotate-cw-button-label = Rotar en sentido horario +pdfjs-page-rotate-ccw-button = + .title = Rotar en sentido antihorario +pdfjs-page-rotate-ccw-button-label = Rotar en sentido antihorario +pdfjs-cursor-text-select-tool-button = + .title = Activar herramienta de selección de texto +pdfjs-cursor-text-select-tool-button-label = Herramienta de selección de texto +pdfjs-cursor-hand-tool-button = + .title = Activar herramienta de mano +pdfjs-cursor-hand-tool-button-label = Herramienta de mano +pdfjs-scroll-page-button = + .title = Usar desplazamiento de página +pdfjs-scroll-page-button-label = Desplazamiento de página +pdfjs-scroll-vertical-button = + .title = Usar desplazamiento vertical +pdfjs-scroll-vertical-button-label = Desplazamiento vertical +pdfjs-scroll-horizontal-button = + .title = Usar desplazamiento horizontal +pdfjs-scroll-horizontal-button-label = Desplazamiento horizontal +pdfjs-scroll-wrapped-button = + .title = Usar desplazamiento en bloque +pdfjs-scroll-wrapped-button-label = Desplazamiento en bloque +pdfjs-spread-none-button = + .title = No juntar páginas en vista de libro +pdfjs-spread-none-button-label = Vista de libro +pdfjs-spread-odd-button = + .title = Juntar las páginas partiendo de una con número impar +pdfjs-spread-odd-button-label = Vista de libro impar +pdfjs-spread-even-button = + .title = Juntar las páginas partiendo de una con número par +pdfjs-spread-even-button-label = Vista de libro par + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Propiedades del documento… +pdfjs-document-properties-button-label = Propiedades del documento… +pdfjs-document-properties-file-name = Nombre de archivo: +pdfjs-document-properties-file-size = Tamaño de archivo: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Título: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Asunto: +pdfjs-document-properties-keywords = Palabras clave: +pdfjs-document-properties-creation-date = Fecha de creación: +pdfjs-document-properties-modification-date = Fecha de modificación: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Creador: +pdfjs-document-properties-producer = Productor PDF: +pdfjs-document-properties-version = Versión PDF: +pdfjs-document-properties-page-count = Número de páginas: +pdfjs-document-properties-page-size = Tamaño de la página: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = vertical +pdfjs-document-properties-page-size-orientation-landscape = horizontal +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 = Carta +pdfjs-document-properties-page-size-name-legal = 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 = Vista rápida de la web: +pdfjs-document-properties-linearized-yes = Sí +pdfjs-document-properties-linearized-no = No +pdfjs-document-properties-close-button = Cerrar + +## Print + +pdfjs-print-progress-message = Preparando documento para impresión… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Cancelar +pdfjs-printing-not-supported = Advertencia: Imprimir no está totalmente soportado por este navegador. +pdfjs-printing-not-ready = Advertencia: Este PDF no se ha cargado completamente para poder imprimirse. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Cambiar barra lateral +pdfjs-toggle-sidebar-notification-button = + .title = Alternar barra lateral (el documento contiene esquemas/adjuntos/capas) +pdfjs-toggle-sidebar-button-label = Cambiar barra lateral +pdfjs-document-outline-button = + .title = Mostrar resumen del documento (doble clic para expandir/contraer todos los elementos) +pdfjs-document-outline-button-label = Resumen de documento +pdfjs-attachments-button = + .title = Mostrar adjuntos +pdfjs-attachments-button-label = Adjuntos +pdfjs-layers-button = + .title = Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado) +pdfjs-layers-button-label = Capas +pdfjs-thumbs-button = + .title = Mostrar miniaturas +pdfjs-thumbs-button-label = Miniaturas +pdfjs-current-outline-item-button = + .title = Encontrar elemento de esquema actual +pdfjs-current-outline-item-button-label = Elemento de esquema actual +pdfjs-findbar-button = + .title = Buscar en el documento +pdfjs-findbar-button-label = Buscar +pdfjs-additional-layers = Capas adicionales + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Página { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura de la página { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Buscar + .placeholder = Buscar en el documento… +pdfjs-find-previous-button = + .title = Encontrar la anterior aparición de la frase +pdfjs-find-previous-button-label = Anterior +pdfjs-find-next-button = + .title = Encontrar la siguiente aparición de esta frase +pdfjs-find-next-button-label = Siguiente +pdfjs-find-highlight-checkbox = Resaltar todos +pdfjs-find-match-case-checkbox-label = Coincidencia de mayús./minús. +pdfjs-find-match-diacritics-checkbox-label = Coincidir diacríticos +pdfjs-find-entire-word-checkbox-label = Palabras completas +pdfjs-find-reached-top = Se alcanzó el inicio del documento, se continúa desde el final +pdfjs-find-reached-bottom = Se alcanzó el final del documento, se continúa desde el inicio +# 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 } de { $total } coincidencia + *[other] { $current } de { $total } coincidencias + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Más de { $limit } coincidencia + *[other] Más de { $limit } coincidencias + } +pdfjs-find-not-found = Frase no encontrada + +## Predefined zoom values + +pdfjs-page-scale-width = Anchura de la página +pdfjs-page-scale-fit = Ajuste de la página +pdfjs-page-scale-auto = Tamaño automático +pdfjs-page-scale-actual = Tamaño real +# 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 = Página { $page } + +## Loading indicator messages + +pdfjs-loading-error = Ocurrió un error al cargar el PDF. +pdfjs-invalid-file-error = Fichero PDF no válido o corrupto. +pdfjs-missing-file-error = No hay fichero PDF. +pdfjs-unexpected-response-error = Respuesta inesperada del servidor. +pdfjs-rendering-error = Ocurrió un error al renderizar la página. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Anotación { $type }] + +## Password + +pdfjs-password-label = Introduzca la contraseña para abrir este archivo PDF. +pdfjs-password-invalid = Contraseña no válida. Vuelva a intentarlo. +pdfjs-password-ok-button = Aceptar +pdfjs-password-cancel-button = Cancelar +pdfjs-web-fonts-disabled = Las tipografías web están desactivadas: es imposible usar las tipografías PDF embebidas. + +## Editing + +pdfjs-editor-free-text-button = + .title = Texto +pdfjs-editor-free-text-button-label = Texto +pdfjs-editor-ink-button = + .title = Dibujar +pdfjs-editor-ink-button-label = Dibujar +pdfjs-editor-stamp-button = + .title = Añadir o editar imágenes +pdfjs-editor-stamp-button-label = Añadir o editar imágenes +pdfjs-editor-highlight-button = + .title = Resaltar +pdfjs-editor-highlight-button-label = Resaltar +pdfjs-highlight-floating-button = + .title = Resaltar +pdfjs-highlight-floating-button1 = + .title = Resaltar + .aria-label = Resaltar +pdfjs-highlight-floating-button-label = Resaltar + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Eliminar dibujo +pdfjs-editor-remove-freetext-button = + .title = Eliminar texto +pdfjs-editor-remove-stamp-button = + .title = Eliminar imagen +pdfjs-editor-remove-highlight-button = + .title = Quitar resaltado + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Color +pdfjs-editor-free-text-size-input = Tamaño +pdfjs-editor-ink-color-input = Color +pdfjs-editor-ink-thickness-input = Grosor +pdfjs-editor-ink-opacity-input = Opacidad +pdfjs-editor-stamp-add-image-button = + .title = Añadir imagen +pdfjs-editor-stamp-add-image-button-label = Añadir imagen +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Grosor +pdfjs-editor-free-highlight-thickness-title = + .title = Cambiar el grosor al resaltar elementos que no sean texto +pdfjs-free-text = + .aria-label = Editor de texto +pdfjs-free-text-default-content = Empezar a escribir… +pdfjs-ink = + .aria-label = Editor de dibujos +pdfjs-ink-canvas = + .aria-label = Imagen creada por el usuario + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Texto alternativo +pdfjs-editor-alt-text-edit-button-label = Editar el texto alternativo +pdfjs-editor-alt-text-dialog-label = Eligir una opción +pdfjs-editor-alt-text-dialog-description = El texto alternativo (texto alternativo) ayuda cuando las personas no pueden ver la imagen o cuando no se carga. +pdfjs-editor-alt-text-add-description-label = Añadir una descripción +pdfjs-editor-alt-text-add-description-description = Intente escribir 1 o 2 frases que describan el tema, el entorno o las acciones. +pdfjs-editor-alt-text-mark-decorative-label = Marcar como decorativa +pdfjs-editor-alt-text-mark-decorative-description = Se utiliza para imágenes ornamentales, como bordes o marcas de agua. +pdfjs-editor-alt-text-cancel-button = Cancelar +pdfjs-editor-alt-text-save-button = Guardar +pdfjs-editor-alt-text-decorative-tooltip = Marcada como decorativa +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Por ejemplo: “Un joven se sienta a la mesa a comer” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Esquina superior izquierda — redimensionar +pdfjs-editor-resizer-label-top-middle = Borde superior en el medio — redimensionar +pdfjs-editor-resizer-label-top-right = Esquina superior derecha — redimensionar +pdfjs-editor-resizer-label-middle-right = Borde derecho en el medio — redimensionar +pdfjs-editor-resizer-label-bottom-right = Esquina inferior derecha — redimensionar +pdfjs-editor-resizer-label-bottom-middle = Borde inferior en el medio — redimensionar +pdfjs-editor-resizer-label-bottom-left = Esquina inferior izquierda — redimensionar +pdfjs-editor-resizer-label-middle-left = Borde izquierdo en el medio — redimensionar + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Color de resaltado +pdfjs-editor-colorpicker-button = + .title = Cambiar color +pdfjs-editor-colorpicker-dropdown = + .aria-label = Opciones de color +pdfjs-editor-colorpicker-yellow = + .title = Amarillo +pdfjs-editor-colorpicker-green = + .title = Verde +pdfjs-editor-colorpicker-blue = + .title = Azul +pdfjs-editor-colorpicker-pink = + .title = Rosa +pdfjs-editor-colorpicker-red = + .title = Rojo + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Mostrar todo +pdfjs-editor-highlight-show-all-button = + .title = Mostrar todo diff --git a/static/pdf.js/locale/es-ES/viewer.properties b/static/pdf.js/locale/es-ES/viewer.properties deleted file mode 100644 index 7435385b..00000000 --- a/static/pdf.js/locale/es-ES/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Página anterior -previous_label=Anterior -next.title=Página siguiente -next_label=Siguiente - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Página -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=de {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} de {{pagesCount}}) - -zoom_out.title=Reducir -zoom_out_label=Reducir -zoom_in.title=Aumentar -zoom_in_label=Aumentar -zoom.title=Tamaño -presentation_mode.title=Cambiar al modo presentación -presentation_mode_label=Modo presentación -open_file.title=Abrir archivo -open_file_label=Abrir -print.title=Imprimir -print_label=Imprimir -save.title=Guardar -save_label=Guardar -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Descargar -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Descargar -bookmark1.title=Página actual (Ver URL de la página actual) -bookmark1_label=Página actual -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Abrir en aplicación -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Abrir en aplicación - -# Secondary toolbar and context menu -tools.title=Herramientas -tools_label=Herramientas -first_page.title=Ir a la primera página -first_page_label=Ir a la primera página -last_page.title=Ir a la última página -last_page_label=Ir a la última página -page_rotate_cw.title=Rotar en sentido horario -page_rotate_cw_label=Rotar en sentido horario -page_rotate_ccw.title=Rotar en sentido antihorario -page_rotate_ccw_label=Rotar en sentido antihorario - -cursor_text_select_tool.title=Activar herramienta de selección de texto -cursor_text_select_tool_label=Herramienta de selección de texto -cursor_hand_tool.title=Activar herramienta de mano -cursor_hand_tool_label=Herramienta de mano - -scroll_page.title=Usar desplazamiento de página -scroll_page_label=Desplazamiento de página -scroll_vertical.title=Usar desplazamiento vertical -scroll_vertical_label=Desplazamiento vertical -scroll_horizontal.title=Usar desplazamiento horizontal -scroll_horizontal_label=Desplazamiento horizontal -scroll_wrapped.title=Usar desplazamiento en bloque -scroll_wrapped_label=Desplazamiento en bloque - -spread_none.title=No juntar páginas en vista de libro -spread_none_label=Vista de libro -spread_odd.title=Juntar las páginas partiendo de una con número impar -spread_odd_label=Vista de libro impar -spread_even.title=Juntar las páginas partiendo de una con número par -spread_even_label=Vista de libro par - -# Document properties dialog box -document_properties.title=Propiedades del documento… -document_properties_label=Propiedades del documento… -document_properties_file_name=Nombre de archivo: -document_properties_file_size=Tamaño de archivo: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Título: -document_properties_author=Autor: -document_properties_subject=Asunto: -document_properties_keywords=Palabras clave: -document_properties_creation_date=Fecha de creación: -document_properties_modification_date=Fecha de modificación: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Creador: -document_properties_producer=Productor PDF: -document_properties_version=Versión PDF: -document_properties_page_count=Número de páginas: -document_properties_page_size=Tamaño de la página: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=vertical -document_properties_page_size_orientation_landscape=horizontal -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Carta -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Vista rápida de la web: -document_properties_linearized_yes=Sí -document_properties_linearized_no=No -document_properties_close=Cerrar - -print_progress_message=Preparando documento para impresión… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Cancelar - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Cambiar barra lateral -toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas) -toggle_sidebar_label=Cambiar barra lateral -document_outline.title=Mostrar resumen del documento (doble clic para expandir/contraer todos los elementos) -document_outline_label=Resumen de documento -attachments.title=Mostrar adjuntos -attachments_label=Adjuntos -layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado) -layers_label=Capas -thumbs.title=Mostrar miniaturas -thumbs_label=Miniaturas -current_outline_item.title=Encontrar elemento de esquema actual -current_outline_item_label=Elemento de esquema actual -findbar.title=Buscar en el documento -findbar_label=Buscar - -additional_layers=Capas adicionales -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Página {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Página {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura de la página {{page}} - -# Find panel button title and messages -find_input.title=Buscar -find_input.placeholder=Buscar en el documento… -find_previous.title=Encontrar la anterior aparición de la frase -find_previous_label=Anterior -find_next.title=Encontrar la siguiente aparición de esta frase -find_next_label=Siguiente -find_highlight=Resaltar todos -find_match_case_label=Coincidencia de mayús./minús. -find_match_diacritics_label=Coincidir diacríticos -find_entire_word_label=Palabras completas -find_reached_top=Se alcanzó el inicio del documento, se continúa desde el final -find_reached_bottom=Se alcanzó el final del documento, se continúa desde el inicio -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} de {{total}} coincidencia -find_match_count[two]={{current}} de {{total}} coincidencias -find_match_count[few]={{current}} de {{total}} coincidencias -find_match_count[many]={{current}} de {{total}} coincidencias -find_match_count[other]={{current}} de {{total}} coincidencias -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Más de {{limit}} coincidencias -find_match_count_limit[one]=Más de {{limit}} coincidencia -find_match_count_limit[two]=Más de {{limit}} coincidencias -find_match_count_limit[few]=Más de {{limit}} coincidencias -find_match_count_limit[many]=Más de {{limit}} coincidencias -find_match_count_limit[other]=Más de {{limit}} coincidencias -find_not_found=Frase no encontrada - -# Predefined zoom values -page_scale_width=Anchura de la página -page_scale_fit=Ajuste de la página -page_scale_auto=Tamaño automático -page_scale_actual=Tamaño real -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Ocurrió un error al cargar el PDF. -invalid_file_error=Fichero PDF no válido o corrupto. -missing_file_error=No hay fichero PDF. -unexpected_response_error=Respuesta inesperada del servidor. -rendering_error=Ocurrió un error al renderizar la página. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Anotación {{type}}] -password_label=Introduzca la contraseña para abrir este archivo PDF. -password_invalid=Contraseña no válida. Vuelva a intentarlo. -password_ok=Aceptar -password_cancel=Cancelar - -printing_not_supported=Advertencia: Imprimir no está totalmente soportado por este navegador. -printing_not_ready=Advertencia: Este PDF no se ha cargado completamente para poder imprimirse. -web_fonts_disabled=Las tipografías web están desactivadas: es imposible usar las tipografías PDF embebidas. - -# Editor -editor_free_text2.title=Texto -editor_free_text2_label=Texto -editor_ink2.title=Dibujar -editor_ink2_label=Dibujar - -editor_stamp.title=Añadir una imagen -editor_stamp_label=Añadir una imagen - -editor_stamp1.title=Añadir o editar imágenes -editor_stamp1_label=Añadir o editar imágenes - -free_text2_default_content=Empezar a escribir… - -# Editor Parameters -editor_free_text_color=Color -editor_free_text_size=Tamaño -editor_ink_color=Color -editor_ink_thickness=Grosor -editor_ink_opacity=Opacidad - -editor_stamp_add_image_label=Añadir imagen -editor_stamp_add_image.title=Añadir imagen - -# Editor aria -editor_free_text2_aria_label=Editor de texto -editor_ink2_aria_label=Editor de dibujos -editor_ink_canvas_aria_label=Imagen creada por el usuario diff --git a/static/pdf.js/locale/es-MX/viewer.ftl b/static/pdf.js/locale/es-MX/viewer.ftl new file mode 100644 index 00000000..0069c6eb --- /dev/null +++ b/static/pdf.js/locale/es-MX/viewer.ftl @@ -0,0 +1,299 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Página anterior +pdfjs-previous-button-label = Anterior +pdfjs-next-button = + .title = Página siguiente +pdfjs-next-button-label = Siguiente +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Página +# 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 = de { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount }) +pdfjs-zoom-out-button = + .title = Reducir +pdfjs-zoom-out-button-label = Reducir +pdfjs-zoom-in-button = + .title = Aumentar +pdfjs-zoom-in-button-label = Aumentar +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Cambiar al modo presentación +pdfjs-presentation-mode-button-label = Modo presentación +pdfjs-open-file-button = + .title = Abrir archivo +pdfjs-open-file-button-label = Abrir +pdfjs-print-button = + .title = Imprimir +pdfjs-print-button-label = Imprimir +pdfjs-save-button = + .title = Guardar +pdfjs-save-button-label = Guardar +pdfjs-bookmark-button = + .title = Página actual (Ver URL de la página actual) +pdfjs-bookmark-button-label = Página actual +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Abrir en la aplicación +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Abrir en la aplicación + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Herramientas +pdfjs-tools-button-label = Herramientas +pdfjs-first-page-button = + .title = Ir a la primera página +pdfjs-first-page-button-label = Ir a la primera página +pdfjs-last-page-button = + .title = Ir a la última página +pdfjs-last-page-button-label = Ir a la última página +pdfjs-page-rotate-cw-button = + .title = Girar a la derecha +pdfjs-page-rotate-cw-button-label = Girar a la derecha +pdfjs-page-rotate-ccw-button = + .title = Girar a la izquierda +pdfjs-page-rotate-ccw-button-label = Girar a la izquierda +pdfjs-cursor-text-select-tool-button = + .title = Activar la herramienta de selección de texto +pdfjs-cursor-text-select-tool-button-label = Herramienta de selección de texto +pdfjs-cursor-hand-tool-button = + .title = Activar la herramienta de mano +pdfjs-cursor-hand-tool-button-label = Herramienta de mano +pdfjs-scroll-page-button = + .title = Usar desplazamiento de página +pdfjs-scroll-page-button-label = Desplazamiento de página +pdfjs-scroll-vertical-button = + .title = Usar desplazamiento vertical +pdfjs-scroll-vertical-button-label = Desplazamiento vertical +pdfjs-scroll-horizontal-button = + .title = Usar desplazamiento horizontal +pdfjs-scroll-horizontal-button-label = Desplazamiento horizontal +pdfjs-scroll-wrapped-button = + .title = Usar desplazamiento encapsulado +pdfjs-scroll-wrapped-button-label = Desplazamiento encapsulado +pdfjs-spread-none-button = + .title = No unir páginas separadas +pdfjs-spread-none-button-label = Vista de una página +pdfjs-spread-odd-button = + .title = Unir las páginas partiendo con una de número impar +pdfjs-spread-odd-button-label = Vista de libro impar +pdfjs-spread-even-button = + .title = Juntar las páginas partiendo con una de número par +pdfjs-spread-even-button-label = Vista de libro par + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Propiedades del documento… +pdfjs-document-properties-button-label = Propiedades del documento… +pdfjs-document-properties-file-name = Nombre del archivo: +pdfjs-document-properties-file-size = Tamaño del archivo: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Título: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Asunto: +pdfjs-document-properties-keywords = Palabras claves: +pdfjs-document-properties-creation-date = Fecha de creación: +pdfjs-document-properties-modification-date = Fecha de modificación: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Creador: +pdfjs-document-properties-producer = Productor PDF: +pdfjs-document-properties-version = Versión PDF: +pdfjs-document-properties-page-count = Número de páginas: +pdfjs-document-properties-page-size = Tamaño de la página: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = vertical +pdfjs-document-properties-page-size-orientation-landscape = horizontal +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 = Carta +pdfjs-document-properties-page-size-name-legal = Oficio + +## 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 = Vista rápida de la web: +pdfjs-document-properties-linearized-yes = Sí +pdfjs-document-properties-linearized-no = No +pdfjs-document-properties-close-button = Cerrar + +## Print + +pdfjs-print-progress-message = Preparando documento para impresión… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Cancelar +pdfjs-printing-not-supported = Advertencia: La impresión no esta completamente soportada por este navegador. +pdfjs-printing-not-ready = Advertencia: El PDF no cargo completamente para impresión. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Cambiar barra lateral +pdfjs-toggle-sidebar-notification-button = + .title = Alternar barra lateral (el documento contiene esquemas/adjuntos/capas) +pdfjs-toggle-sidebar-button-label = Cambiar barra lateral +pdfjs-document-outline-button = + .title = Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos) +pdfjs-document-outline-button-label = Esquema del documento +pdfjs-attachments-button = + .title = Mostrar adjuntos +pdfjs-attachments-button-label = Adjuntos +pdfjs-layers-button = + .title = Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado) +pdfjs-layers-button-label = Capas +pdfjs-thumbs-button = + .title = Mostrar miniaturas +pdfjs-thumbs-button-label = Miniaturas +pdfjs-current-outline-item-button = + .title = Buscar elemento de esquema actual +pdfjs-current-outline-item-button-label = Elemento de esquema actual +pdfjs-findbar-button = + .title = Buscar en el documento +pdfjs-findbar-button-label = Buscar +pdfjs-additional-layers = Capas adicionales + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Página { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura de la página { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Buscar + .placeholder = Buscar en el documento… +pdfjs-find-previous-button = + .title = Ir a la anterior frase encontrada +pdfjs-find-previous-button-label = Anterior +pdfjs-find-next-button = + .title = Ir a la siguiente frase encontrada +pdfjs-find-next-button-label = Siguiente +pdfjs-find-highlight-checkbox = Resaltar todo +pdfjs-find-match-case-checkbox-label = Coincidir con mayúsculas y minúsculas +pdfjs-find-match-diacritics-checkbox-label = Coincidir diacríticos +pdfjs-find-entire-word-checkbox-label = Palabras completas +pdfjs-find-reached-top = Se alcanzó el inicio del documento, se buscará al final +pdfjs-find-reached-bottom = Se alcanzó el final del documento, se buscará al inicio +pdfjs-find-not-found = No se encontró la frase + +## Predefined zoom values + +pdfjs-page-scale-width = Ancho de página +pdfjs-page-scale-fit = Ajustar página +pdfjs-page-scale-auto = Zoom automático +pdfjs-page-scale-actual = Tamaño real +# 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 = Página { $page } + +## Loading indicator messages + +pdfjs-loading-error = Un error ocurrió al cargar el PDF. +pdfjs-invalid-file-error = Archivo PDF invalido o dañado. +pdfjs-missing-file-error = Archivo PDF no encontrado. +pdfjs-unexpected-response-error = Respuesta inesperada del servidor. +pdfjs-rendering-error = Un error ocurrió al renderizar la página. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } anotación] + +## Password + +pdfjs-password-label = Ingresa la contraseña para abrir este archivo PDF. +pdfjs-password-invalid = Contraseña inválida. Por favor intenta de nuevo. +pdfjs-password-ok-button = Aceptar +pdfjs-password-cancel-button = Cancelar +pdfjs-web-fonts-disabled = Las fuentes web están desactivadas: es imposible usar las fuentes PDF embebidas. + +## Editing + +pdfjs-editor-free-text-button = + .title = Texto +pdfjs-editor-free-text-button-label = Texto +pdfjs-editor-ink-button = + .title = Dibujar +pdfjs-editor-ink-button-label = Dibujar +# Editor Parameters +pdfjs-editor-free-text-color-input = Color +pdfjs-editor-free-text-size-input = Tamaño +pdfjs-editor-ink-color-input = Color +pdfjs-editor-ink-thickness-input = Grossor +pdfjs-editor-ink-opacity-input = Opacidad +pdfjs-free-text = + .aria-label = Editor de texto +pdfjs-free-text-default-content = Empieza a escribir… +pdfjs-ink = + .aria-label = Editor de dibujo +pdfjs-ink-canvas = + .aria-label = Imagen creada por el usuario + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/es-MX/viewer.properties b/static/pdf.js/locale/es-MX/viewer.properties deleted file mode 100644 index 42bad414..00000000 --- a/static/pdf.js/locale/es-MX/viewer.properties +++ /dev/null @@ -1,257 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Página anterior -previous_label=Anterior -next.title=Página siguiente -next_label=Siguiente - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Página -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=de {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} de {{pagesCount}}) - -zoom_out.title=Reducir -zoom_out_label=Reducir -zoom_in.title=Aumentar -zoom_in_label=Aumentar -zoom.title=Zoom -presentation_mode.title=Cambiar al modo presentación -presentation_mode_label=Modo presentación -open_file.title=Abrir archivo -open_file_label=Abrir -print.title=Imprimir -print_label=Imprimir - -save.title=Guardar -save_label=Guardar -bookmark1.title=Página actual (Ver URL de la página actual) -bookmark1_label=Página actual - -open_in_app.title=Abrir en la aplicación -open_in_app_label=Abrir en la aplicación - -# Secondary toolbar and context menu -tools.title=Herramientas -tools_label=Herramientas -first_page.title=Ir a la primera página -first_page_label=Ir a la primera página -last_page.title=Ir a la última página -last_page_label=Ir a la última página -page_rotate_cw.title=Girar a la derecha -page_rotate_cw_label=Girar a la derecha -page_rotate_ccw.title=Girar a la izquierda -page_rotate_ccw_label=Girar a la izquierda - -cursor_text_select_tool.title=Activar la herramienta de selección de texto -cursor_text_select_tool_label=Herramienta de selección de texto -cursor_hand_tool.title=Activar la herramienta de mano -cursor_hand_tool_label=Herramienta de mano - -scroll_page.title=Usar desplazamiento de página -scroll_page_label=Desplazamiento de página -scroll_vertical.title=Usar desplazamiento vertical -scroll_vertical_label=Desplazamiento vertical -scroll_horizontal.title=Usar desplazamiento horizontal -scroll_horizontal_label=Desplazamiento horizontal -scroll_wrapped.title=Usar desplazamiento encapsulado -scroll_wrapped_label=Desplazamiento encapsulado - -spread_none.title=No unir páginas separadas -spread_none_label=Vista de una página -spread_odd.title=Unir las páginas partiendo con una de número impar -spread_odd_label=Vista de libro impar -spread_even.title=Juntar las páginas partiendo con una de número par -spread_even_label=Vista de libro par - -# Document properties dialog box -document_properties.title=Propiedades del documento… -document_properties_label=Propiedades del documento… -document_properties_file_name=Nombre del archivo: -document_properties_file_size=Tamaño del archivo: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Título: -document_properties_author=Autor: -document_properties_subject=Asunto: -document_properties_keywords=Palabras claves: -document_properties_creation_date=Fecha de creación: -document_properties_modification_date=Fecha de modificación: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Creador: -document_properties_producer=Productor PDF: -document_properties_version=Versión PDF: -document_properties_page_count=Número de páginas: -document_properties_page_size=Tamaño de la página: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=vertical -document_properties_page_size_orientation_landscape=horizontal -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Carta -document_properties_page_size_name_legal=Oficio -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Vista rápida de la web: -document_properties_linearized_yes=Sí -document_properties_linearized_no=No -document_properties_close=Cerrar - -print_progress_message=Preparando documento para impresión… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Cancelar - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Cambiar barra lateral -toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas) -toggle_sidebar_label=Cambiar barra lateral -document_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos) -document_outline_label=Esquema del documento -attachments.title=Mostrar adjuntos -attachments_label=Adjuntos -layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado) -layers_label=Capas -thumbs.title=Mostrar miniaturas -thumbs_label=Miniaturas -current_outline_item.title=Buscar elemento de esquema actual -current_outline_item_label=Elemento de esquema actual -findbar.title=Buscar en el documento -findbar_label=Buscar - -additional_layers=Capas adicionales -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Página {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Página {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura de la página {{page}} - -# Find panel button title and messages -find_input.title=Buscar -find_input.placeholder=Buscar en el documento… -find_previous.title=Ir a la anterior frase encontrada -find_previous_label=Anterior -find_next.title=Ir a la siguiente frase encontrada -find_next_label=Siguiente -find_highlight=Resaltar todo -find_match_case_label=Coincidir con mayúsculas y minúsculas -find_match_diacritics_label=Coincidir diacríticos -find_entire_word_label=Palabras completas -find_reached_top=Se alcanzó el inicio del documento, se buscará al final -find_reached_bottom=Se alcanzó el final del documento, se buscará al inicio -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} de {{total}} coincidencia -find_match_count[two]={{current}} de {{total}} coincidencias -find_match_count[few]={{current}} de {{total}} coincidencias -find_match_count[many]={{current}} de {{total}} coincidencias -find_match_count[other]={{current}} de {{total}} coincidencias -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Más de {{limit}} coincidencias -find_match_count_limit[one]=Más de {{limit}} coinciden -find_match_count_limit[two]=Más de {{limit}} coincidencias -find_match_count_limit[few]=Más de {{limit}} coincidencias -find_match_count_limit[many]=Más de {{limit}} coincidencias -find_match_count_limit[other]=Más de {{limit}} coincidencias -find_not_found=No se encontró la frase - -# Predefined zoom values -page_scale_width=Ancho de página -page_scale_fit=Ajustar página -page_scale_auto=Zoom automático -page_scale_actual=Tamaño real -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Un error ocurrió al cargar el PDF. -invalid_file_error=Archivo PDF invalido o dañado. -missing_file_error=Archivo PDF no encontrado. -unexpected_response_error=Respuesta inesperada del servidor. - -rendering_error=Un error ocurrió al renderizar la página. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} anotación] -password_label=Ingresa la contraseña para abrir este archivo PDF. -password_invalid=Contraseña inválida. Por favor intenta de nuevo. -password_ok=Aceptar -password_cancel=Cancelar - -printing_not_supported=Advertencia: La impresión no esta completamente soportada por este navegador. -printing_not_ready=Advertencia: El PDF no cargo completamente para impresión. -web_fonts_disabled=Las fuentes web están desactivadas: es imposible usar las fuentes PDF embebidas. - -# Editor -editor_free_text2.title=Texto -editor_free_text2_label=Texto -editor_ink2.title=Dibujar -editor_ink2_label=Dibujar - -free_text2_default_content=Empieza a escribir… - -# Editor Parameters -editor_free_text_color=Color -editor_free_text_size=Tamaño -editor_ink_color=Color -editor_ink_thickness=Grossor -editor_ink_opacity=Opacidad - -# Editor aria -editor_free_text2_aria_label=Editor de texto -editor_ink2_aria_label=Editor de dibujo -editor_ink_canvas_aria_label=Imagen creada por el usuario diff --git a/static/pdf.js/locale/et/viewer.ftl b/static/pdf.js/locale/et/viewer.ftl new file mode 100644 index 00000000..b28c6d50 --- /dev/null +++ b/static/pdf.js/locale/et/viewer.ftl @@ -0,0 +1,268 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Eelmine lehekülg +pdfjs-previous-button-label = Eelmine +pdfjs-next-button = + .title = Järgmine lehekülg +pdfjs-next-button-label = Järgmine +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Leht +# 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 = Vähenda +pdfjs-zoom-out-button-label = Vähenda +pdfjs-zoom-in-button = + .title = Suurenda +pdfjs-zoom-in-button-label = Suurenda +pdfjs-zoom-select = + .title = Suurendamine +pdfjs-presentation-mode-button = + .title = Lülitu esitlusrežiimi +pdfjs-presentation-mode-button-label = Esitlusrežiim +pdfjs-open-file-button = + .title = Ava fail +pdfjs-open-file-button-label = Ava +pdfjs-print-button = + .title = Prindi +pdfjs-print-button-label = Prindi + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Tööriistad +pdfjs-tools-button-label = Tööriistad +pdfjs-first-page-button = + .title = Mine esimesele leheküljele +pdfjs-first-page-button-label = Mine esimesele leheküljele +pdfjs-last-page-button = + .title = Mine viimasele leheküljele +pdfjs-last-page-button-label = Mine viimasele leheküljele +pdfjs-page-rotate-cw-button = + .title = Pööra päripäeva +pdfjs-page-rotate-cw-button-label = Pööra päripäeva +pdfjs-page-rotate-ccw-button = + .title = Pööra vastupäeva +pdfjs-page-rotate-ccw-button-label = Pööra vastupäeva +pdfjs-cursor-text-select-tool-button = + .title = Luba teksti valimise tööriist +pdfjs-cursor-text-select-tool-button-label = Teksti valimise tööriist +pdfjs-cursor-hand-tool-button = + .title = Luba sirvimistööriist +pdfjs-cursor-hand-tool-button-label = Sirvimistööriist +pdfjs-scroll-page-button = + .title = Kasutatakse lehe kaupa kerimist +pdfjs-scroll-page-button-label = Lehe kaupa kerimine +pdfjs-scroll-vertical-button = + .title = Kasuta vertikaalset kerimist +pdfjs-scroll-vertical-button-label = Vertikaalne kerimine +pdfjs-scroll-horizontal-button = + .title = Kasuta horisontaalset kerimist +pdfjs-scroll-horizontal-button-label = Horisontaalne kerimine +pdfjs-scroll-wrapped-button = + .title = Kasuta rohkem mahutavat kerimist +pdfjs-scroll-wrapped-button-label = Rohkem mahutav kerimine +pdfjs-spread-none-button = + .title = Ära kõrvuta lehekülgi +pdfjs-spread-none-button-label = Lehtede kõrvutamine puudub +pdfjs-spread-odd-button = + .title = Kõrvuta leheküljed, alustades paaritute numbritega lehekülgedega +pdfjs-spread-odd-button-label = Kõrvutamine paaritute numbritega alustades +pdfjs-spread-even-button = + .title = Kõrvuta leheküljed, alustades paarisnumbritega lehekülgedega +pdfjs-spread-even-button-label = Kõrvutamine paarisnumbritega alustades + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Dokumendi omadused… +pdfjs-document-properties-button-label = Dokumendi omadused… +pdfjs-document-properties-file-name = Faili nimi: +pdfjs-document-properties-file-size = Faili suurus: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KiB ({ $size_b } baiti) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MiB ({ $size_b } baiti) +pdfjs-document-properties-title = Pealkiri: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Teema: +pdfjs-document-properties-keywords = Märksõnad: +pdfjs-document-properties-creation-date = Loodud: +pdfjs-document-properties-modification-date = Muudetud: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date } { $time } +pdfjs-document-properties-creator = Looja: +pdfjs-document-properties-producer = Generaator: +pdfjs-document-properties-version = Generaatori versioon: +pdfjs-document-properties-page-count = Lehekülgi: +pdfjs-document-properties-page-size = Lehe suurus: +pdfjs-document-properties-page-size-unit-inches = tolli +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = vertikaalpaigutus +pdfjs-document-properties-page-size-orientation-landscape = rõhtpaigutus +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = "Fast Web View" tugi: +pdfjs-document-properties-linearized-yes = Jah +pdfjs-document-properties-linearized-no = Ei +pdfjs-document-properties-close-button = Sulge + +## Print + +pdfjs-print-progress-message = Dokumendi ettevalmistamine printimiseks… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Loobu +pdfjs-printing-not-supported = Hoiatus: printimine pole selle brauseri poolt täielikult toetatud. +pdfjs-printing-not-ready = Hoiatus: PDF pole printimiseks täielikult laaditud. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Näita külgriba +pdfjs-toggle-sidebar-notification-button = + .title = Näita külgriba (dokument sisaldab sisukorda/manuseid/kihte) +pdfjs-toggle-sidebar-button-label = Näita külgriba +pdfjs-document-outline-button = + .title = Näita sisukorda (kõigi punktide laiendamiseks/ahendamiseks topeltklõpsa) +pdfjs-document-outline-button-label = Näita sisukorda +pdfjs-attachments-button = + .title = Näita manuseid +pdfjs-attachments-button-label = Manused +pdfjs-layers-button = + .title = Näita kihte (kõikide kihtide vaikeolekusse lähtestamiseks topeltklõpsa) +pdfjs-layers-button-label = Kihid +pdfjs-thumbs-button = + .title = Näita pisipilte +pdfjs-thumbs-button-label = Pisipildid +pdfjs-current-outline-item-button = + .title = Otsi üles praegune kontuuriüksus +pdfjs-current-outline-item-button-label = Praegune kontuuriüksus +pdfjs-findbar-button = + .title = Otsi dokumendist +pdfjs-findbar-button-label = Otsi +pdfjs-additional-layers = Täiendavad kihid + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = { $page }. lehekülg +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = { $page }. lehekülje pisipilt + +## Find panel button title and messages + +pdfjs-find-input = + .title = Otsi + .placeholder = Otsi dokumendist… +pdfjs-find-previous-button = + .title = Otsi fraasi eelmine esinemiskoht +pdfjs-find-previous-button-label = Eelmine +pdfjs-find-next-button = + .title = Otsi fraasi järgmine esinemiskoht +pdfjs-find-next-button-label = Järgmine +pdfjs-find-highlight-checkbox = Too kõik esile +pdfjs-find-match-case-checkbox-label = Tõstutundlik +pdfjs-find-match-diacritics-checkbox-label = Otsitakse diakriitiliselt +pdfjs-find-entire-word-checkbox-label = Täissõnad +pdfjs-find-reached-top = Jõuti dokumendi algusesse, jätkati lõpust +pdfjs-find-reached-bottom = Jõuti dokumendi lõppu, jätkati algusest +pdfjs-find-not-found = Fraasi ei leitud + +## Predefined zoom values + +pdfjs-page-scale-width = Mahuta laiusele +pdfjs-page-scale-fit = Mahuta leheküljele +pdfjs-page-scale-auto = Automaatne suurendamine +pdfjs-page-scale-actual = Tegelik suurus +# 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 = Lehekülg { $page } + +## Loading indicator messages + +pdfjs-loading-error = PDFi laadimisel esines viga. +pdfjs-invalid-file-error = Vigane või rikutud PDF-fail. +pdfjs-missing-file-error = PDF-fail puudub. +pdfjs-unexpected-response-error = Ootamatu vastus serverilt. +pdfjs-rendering-error = Lehe renderdamisel esines viga. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date } { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Annotation] + +## Password + +pdfjs-password-label = PDF-faili avamiseks sisesta parool. +pdfjs-password-invalid = Vigane parool. Palun proovi uuesti. +pdfjs-password-ok-button = Sobib +pdfjs-password-cancel-button = Loobu +pdfjs-web-fonts-disabled = Veebifondid on keelatud: PDFiga kaasatud fonte pole võimalik kasutada. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/et/viewer.properties b/static/pdf.js/locale/et/viewer.properties deleted file mode 100644 index 12b2ce55..00000000 --- a/static/pdf.js/locale/et/viewer.properties +++ /dev/null @@ -1,229 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Eelmine lehekülg -previous_label=Eelmine -next.title=Järgmine lehekülg -next_label=Järgmine - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Leht -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=/ {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}}/{{pagesCount}}) - -zoom_out.title=Vähenda -zoom_out_label=Vähenda -zoom_in.title=Suurenda -zoom_in_label=Suurenda -zoom.title=Suurendamine -presentation_mode.title=Lülitu esitlusrežiimi -presentation_mode_label=Esitlusrežiim -open_file.title=Ava fail -open_file_label=Ava -print.title=Prindi -print_label=Prindi - -# Secondary toolbar and context menu -tools.title=Tööriistad -tools_label=Tööriistad -first_page.title=Mine esimesele leheküljele -first_page_label=Mine esimesele leheküljele -last_page.title=Mine viimasele leheküljele -last_page_label=Mine viimasele leheküljele -page_rotate_cw.title=Pööra päripäeva -page_rotate_cw_label=Pööra päripäeva -page_rotate_ccw.title=Pööra vastupäeva -page_rotate_ccw_label=Pööra vastupäeva - -cursor_text_select_tool.title=Luba teksti valimise tööriist -cursor_text_select_tool_label=Teksti valimise tööriist -cursor_hand_tool.title=Luba sirvimistööriist -cursor_hand_tool_label=Sirvimistööriist - -scroll_page.title=Kasutatakse lehe kaupa kerimist -scroll_page_label=Lehe kaupa kerimine -scroll_vertical.title=Kasuta vertikaalset kerimist -scroll_vertical_label=Vertikaalne kerimine -scroll_horizontal.title=Kasuta horisontaalset kerimist -scroll_horizontal_label=Horisontaalne kerimine -scroll_wrapped.title=Kasuta rohkem mahutavat kerimist -scroll_wrapped_label=Rohkem mahutav kerimine - -spread_none.title=Ära kõrvuta lehekülgi -spread_none_label=Lehtede kõrvutamine puudub -spread_odd.title=Kõrvuta leheküljed, alustades paaritute numbritega lehekülgedega -spread_odd_label=Kõrvutamine paaritute numbritega alustades -spread_even.title=Kõrvuta leheküljed, alustades paarisnumbritega lehekülgedega -spread_even_label=Kõrvutamine paarisnumbritega alustades - -# Document properties dialog box -document_properties.title=Dokumendi omadused… -document_properties_label=Dokumendi omadused… -document_properties_file_name=Faili nimi: -document_properties_file_size=Faili suurus: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KiB ({{size_b}} baiti) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MiB ({{size_b}} baiti) -document_properties_title=Pealkiri: -document_properties_author=Autor: -document_properties_subject=Teema: -document_properties_keywords=Märksõnad: -document_properties_creation_date=Loodud: -document_properties_modification_date=Muudetud: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}} {{time}} -document_properties_creator=Looja: -document_properties_producer=Generaator: -document_properties_version=Generaatori versioon: -document_properties_page_count=Lehekülgi: -document_properties_page_size=Lehe suurus: -document_properties_page_size_unit_inches=tolli -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=vertikaalpaigutus -document_properties_page_size_orientation_landscape=rõhtpaigutus -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized="Fast Web View" tugi: -document_properties_linearized_yes=Jah -document_properties_linearized_no=Ei -document_properties_close=Sulge - -print_progress_message=Dokumendi ettevalmistamine printimiseks… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Loobu - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Näita külgriba -toggle_sidebar_notification2.title=Näita külgriba (dokument sisaldab sisukorda/manuseid/kihte) -toggle_sidebar_label=Näita külgriba -document_outline.title=Näita sisukorda (kõigi punktide laiendamiseks/ahendamiseks topeltklõpsa) -document_outline_label=Näita sisukorda -attachments.title=Näita manuseid -attachments_label=Manused -layers.title=Näita kihte (kõikide kihtide vaikeolekusse lähtestamiseks topeltklõpsa) -layers_label=Kihid -thumbs.title=Näita pisipilte -thumbs_label=Pisipildid -current_outline_item.title=Otsi üles praegune kontuuriüksus -current_outline_item_label=Praegune kontuuriüksus -findbar.title=Otsi dokumendist -findbar_label=Otsi - -additional_layers=Täiendavad kihid -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Lehekülg {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title={{page}}. lehekülg -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas={{page}}. lehekülje pisipilt - -# Find panel button title and messages -find_input.title=Otsi -find_input.placeholder=Otsi dokumendist… -find_previous.title=Otsi fraasi eelmine esinemiskoht -find_previous_label=Eelmine -find_next.title=Otsi fraasi järgmine esinemiskoht -find_next_label=Järgmine -find_highlight=Too kõik esile -find_match_case_label=Tõstutundlik -find_match_diacritics_label=Otsitakse diakriitiliselt -find_entire_word_label=Täissõnad -find_reached_top=Jõuti dokumendi algusesse, jätkati lõpust -find_reached_bottom=Jõuti dokumendi lõppu, jätkati algusest -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]=vaste {{current}}/{{total}} -find_match_count[two]=vaste {{current}}/{{total}} -find_match_count[few]=vaste {{current}}/{{total}} -find_match_count[many]=vaste {{current}}/{{total}} -find_match_count[other]=vaste {{current}}/{{total}} -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Rohkem kui {{limit}} vastet -find_match_count_limit[one]=Rohkem kui {{limit}} vaste -find_match_count_limit[two]=Rohkem kui {{limit}} vastet -find_match_count_limit[few]=Rohkem kui {{limit}} vastet -find_match_count_limit[many]=Rohkem kui {{limit}} vastet -find_match_count_limit[other]=Rohkem kui {{limit}} vastet -find_not_found=Fraasi ei leitud - -# Predefined zoom values -page_scale_width=Mahuta laiusele -page_scale_fit=Mahuta leheküljele -page_scale_auto=Automaatne suurendamine -page_scale_actual=Tegelik suurus -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=PDFi laadimisel esines viga. -invalid_file_error=Vigane või rikutud PDF-fail. -missing_file_error=PDF-fail puudub. -unexpected_response_error=Ootamatu vastus serverilt. - -rendering_error=Lehe renderdamisel esines viga. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}} {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Annotation] -password_label=PDF-faili avamiseks sisesta parool. -password_invalid=Vigane parool. Palun proovi uuesti. -password_ok=Sobib -password_cancel=Loobu - -printing_not_supported=Hoiatus: printimine pole selle brauseri poolt täielikult toetatud. -printing_not_ready=Hoiatus: PDF pole printimiseks täielikult laaditud. -web_fonts_disabled=Veebifondid on keelatud: PDFiga kaasatud fonte pole võimalik kasutada. - diff --git a/static/pdf.js/locale/eu/viewer.ftl b/static/pdf.js/locale/eu/viewer.ftl new file mode 100644 index 00000000..1ed37397 --- /dev/null +++ b/static/pdf.js/locale/eu/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Aurreko orria +pdfjs-previous-button-label = Aurrekoa +pdfjs-next-button = + .title = Hurrengo orria +pdfjs-next-button-label = Hurrengoa +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Orria +# 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 = { $pagesCount }/{ $pageNumber } +pdfjs-zoom-out-button = + .title = Urrundu zooma +pdfjs-zoom-out-button-label = Urrundu zooma +pdfjs-zoom-in-button = + .title = Gerturatu zooma +pdfjs-zoom-in-button-label = Gerturatu zooma +pdfjs-zoom-select = + .title = Zooma +pdfjs-presentation-mode-button = + .title = Aldatu aurkezpen modura +pdfjs-presentation-mode-button-label = Arkezpen modua +pdfjs-open-file-button = + .title = Ireki fitxategia +pdfjs-open-file-button-label = Ireki +pdfjs-print-button = + .title = Inprimatu +pdfjs-print-button-label = Inprimatu +pdfjs-save-button = + .title = Gorde +pdfjs-save-button-label = Gorde +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Deskargatu +# 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 = Deskargatu +pdfjs-bookmark-button = + .title = Uneko orria (ikusi uneko orriaren URLa) +pdfjs-bookmark-button-label = Uneko orria +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Ireki aplikazioan +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Ireki aplikazioan + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Tresnak +pdfjs-tools-button-label = Tresnak +pdfjs-first-page-button = + .title = Joan lehen orrira +pdfjs-first-page-button-label = Joan lehen orrira +pdfjs-last-page-button = + .title = Joan azken orrira +pdfjs-last-page-button-label = Joan azken orrira +pdfjs-page-rotate-cw-button = + .title = Biratu erlojuaren norantzan +pdfjs-page-rotate-cw-button-label = Biratu erlojuaren norantzan +pdfjs-page-rotate-ccw-button = + .title = Biratu erlojuaren aurkako norantzan +pdfjs-page-rotate-ccw-button-label = Biratu erlojuaren aurkako norantzan +pdfjs-cursor-text-select-tool-button = + .title = Gaitu testuaren hautapen tresna +pdfjs-cursor-text-select-tool-button-label = Testuaren hautapen tresna +pdfjs-cursor-hand-tool-button = + .title = Gaitu eskuaren tresna +pdfjs-cursor-hand-tool-button-label = Eskuaren tresna +pdfjs-scroll-page-button = + .title = Erabili orriaren korritzea +pdfjs-scroll-page-button-label = Orriaren korritzea +pdfjs-scroll-vertical-button = + .title = Erabili korritze bertikala +pdfjs-scroll-vertical-button-label = Korritze bertikala +pdfjs-scroll-horizontal-button = + .title = Erabili korritze horizontala +pdfjs-scroll-horizontal-button-label = Korritze horizontala +pdfjs-scroll-wrapped-button = + .title = Erabili korritze egokitua +pdfjs-scroll-wrapped-button-label = Korritze egokitua +pdfjs-spread-none-button = + .title = Ez elkartu barreiatutako orriak +pdfjs-spread-none-button-label = Barreiatzerik ez +pdfjs-spread-odd-button = + .title = Elkartu barreiatutako orriak bakoiti zenbakidunekin hasita +pdfjs-spread-odd-button-label = Barreiatze bakoitia +pdfjs-spread-even-button = + .title = Elkartu barreiatutako orriak bikoiti zenbakidunekin hasita +pdfjs-spread-even-button-label = Barreiatze bikoitia + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Dokumentuaren propietateak… +pdfjs-document-properties-button-label = Dokumentuaren propietateak… +pdfjs-document-properties-file-name = Fitxategi-izena: +pdfjs-document-properties-file-size = Fitxategiaren tamaina: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } byte) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } byte) +pdfjs-document-properties-title = Izenburua: +pdfjs-document-properties-author = Egilea: +pdfjs-document-properties-subject = Gaia: +pdfjs-document-properties-keywords = Gako-hitzak: +pdfjs-document-properties-creation-date = Sortze-data: +pdfjs-document-properties-modification-date = Aldatze-data: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Sortzailea: +pdfjs-document-properties-producer = PDFaren ekoizlea: +pdfjs-document-properties-version = PDF bertsioa: +pdfjs-document-properties-page-count = Orrialde kopurua: +pdfjs-document-properties-page-size = Orriaren tamaina: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = bertikala +pdfjs-document-properties-page-size-orientation-landscape = horizontala +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 = Gutuna +pdfjs-document-properties-page-size-name-legal = Legala + +## 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 = Webeko ikuspegi bizkorra: +pdfjs-document-properties-linearized-yes = Bai +pdfjs-document-properties-linearized-no = Ez +pdfjs-document-properties-close-button = Itxi + +## Print + +pdfjs-print-progress-message = Dokumentua inprimatzeko prestatzen… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = %{ $progress } +pdfjs-print-progress-close-button = Utzi +pdfjs-printing-not-supported = Abisua: inprimatzeko euskarria ez da erabatekoa nabigatzaile honetan. +pdfjs-printing-not-ready = Abisua: PDFa ez dago erabat kargatuta inprimatzeko. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Txandakatu alboko barra +pdfjs-toggle-sidebar-notification-button = + .title = Txandakatu alboko barra (dokumentuak eskema/eranskinak/geruzak ditu) +pdfjs-toggle-sidebar-button-label = Txandakatu alboko barra +pdfjs-document-outline-button = + .title = Erakutsi dokumentuaren eskema (klik bikoitza elementu guztiak zabaltzeko/tolesteko) +pdfjs-document-outline-button-label = Dokumentuaren eskema +pdfjs-attachments-button = + .title = Erakutsi eranskinak +pdfjs-attachments-button-label = Eranskinak +pdfjs-layers-button = + .title = Erakutsi geruzak (klik bikoitza geruza guztiak egoera lehenetsira berrezartzeko) +pdfjs-layers-button-label = Geruzak +pdfjs-thumbs-button = + .title = Erakutsi koadro txikiak +pdfjs-thumbs-button-label = Koadro txikiak +pdfjs-current-outline-item-button = + .title = Bilatu uneko eskemaren elementua +pdfjs-current-outline-item-button-label = Uneko eskemaren elementua +pdfjs-findbar-button = + .title = Bilatu dokumentuan +pdfjs-findbar-button-label = Bilatu +pdfjs-additional-layers = Geruza gehigarriak + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = { $page }. orria +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = { $page }. orriaren koadro txikia + +## Find panel button title and messages + +pdfjs-find-input = + .title = Bilatu + .placeholder = Bilatu dokumentuan… +pdfjs-find-previous-button = + .title = Bilatu esaldiaren aurreko parekatzea +pdfjs-find-previous-button-label = Aurrekoa +pdfjs-find-next-button = + .title = Bilatu esaldiaren hurrengo parekatzea +pdfjs-find-next-button-label = Hurrengoa +pdfjs-find-highlight-checkbox = Nabarmendu guztia +pdfjs-find-match-case-checkbox-label = Bat etorri maiuskulekin/minuskulekin +pdfjs-find-match-diacritics-checkbox-label = Bereizi diakritikoak +pdfjs-find-entire-word-checkbox-label = Hitz osoak +pdfjs-find-reached-top = Dokumentuaren hasierara heldu da, bukaeratik jarraitzen +pdfjs-find-reached-bottom = Dokumentuaren bukaerara heldu da, hasieratik jarraitzen +# 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] { $total }/{ $current }. bat-etortzea + *[other] { $total }/{ $current }. bat-etortzea + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Bat datorren { $limit } baino gehiago + *[other] Bat datozen { $limit } baino gehiago + } +pdfjs-find-not-found = Esaldia ez da aurkitu + +## Predefined zoom values + +pdfjs-page-scale-width = Orriaren zabalera +pdfjs-page-scale-fit = Doitu orrira +pdfjs-page-scale-auto = Zoom automatikoa +pdfjs-page-scale-actual = Benetako tamaina +# 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 }. orria + +## Loading indicator messages + +pdfjs-loading-error = Errorea gertatu da PDFa kargatzean. +pdfjs-invalid-file-error = PDF fitxategi baliogabe edo hondatua. +pdfjs-missing-file-error = PDF fitxategia falta da. +pdfjs-unexpected-response-error = Espero gabeko zerbitzariaren erantzuna. +pdfjs-rendering-error = Errorea gertatu da orria errendatzean. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } ohartarazpena] + +## Password + +pdfjs-password-label = Idatzi PDF fitxategi hau irekitzeko pasahitza. +pdfjs-password-invalid = Pasahitz baliogabea. Saiatu berriro mesedez. +pdfjs-password-ok-button = Ados +pdfjs-password-cancel-button = Utzi +pdfjs-web-fonts-disabled = Webeko letra-tipoak desgaituta daude: ezin dira kapsulatutako PDF letra-tipoak erabili. + +## Editing + +pdfjs-editor-free-text-button = + .title = Testua +pdfjs-editor-free-text-button-label = Testua +pdfjs-editor-ink-button = + .title = Marrazkia +pdfjs-editor-ink-button-label = Marrazkia +pdfjs-editor-stamp-button = + .title = Gehitu edo editatu irudiak +pdfjs-editor-stamp-button-label = Gehitu edo editatu irudiak +pdfjs-editor-highlight-button = + .title = Nabarmendu +pdfjs-editor-highlight-button-label = Nabarmendu +pdfjs-highlight-floating-button = + .title = Nabarmendu +pdfjs-highlight-floating-button1 = + .title = Nabarmendu + .aria-label = Nabarmendu +pdfjs-highlight-floating-button-label = Nabarmendu + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Kendu marrazkia +pdfjs-editor-remove-freetext-button = + .title = Kendu testua +pdfjs-editor-remove-stamp-button = + .title = Kendu irudia +pdfjs-editor-remove-highlight-button = + .title = Kendu nabarmentzea + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Kolorea +pdfjs-editor-free-text-size-input = Tamaina +pdfjs-editor-ink-color-input = Kolorea +pdfjs-editor-ink-thickness-input = Loditasuna +pdfjs-editor-ink-opacity-input = Opakutasuna +pdfjs-editor-stamp-add-image-button = + .title = Gehitu irudia +pdfjs-editor-stamp-add-image-button-label = Gehitu irudia +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Loditasuna +pdfjs-editor-free-highlight-thickness-title = + .title = Aldatu loditasuna testua ez beste elementuak nabarmentzean +pdfjs-free-text = + .aria-label = Testu-editorea +pdfjs-free-text-default-content = Hasi idazten… +pdfjs-ink = + .aria-label = Marrazki-editorea +pdfjs-ink-canvas = + .aria-label = Erabiltzaileak sortutako irudia + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Testu alternatiboa +pdfjs-editor-alt-text-edit-button-label = Editatu testu alternatiboa +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-add-description-label = Gehitu azalpena +pdfjs-editor-alt-text-add-description-description = Saiatu idazten gaia, ezarpena edo ekintzak deskribatzen dituen esaldi 1 edo 2. +pdfjs-editor-alt-text-mark-decorative-label = Markatu apaingarri gisa +pdfjs-editor-alt-text-mark-decorative-description = Irudiak apaingarrientzat erabiltzen da, adibidez ertz edo ur-marketarako. +pdfjs-editor-alt-text-cancel-button = Utzi +pdfjs-editor-alt-text-save-button = Gorde +pdfjs-editor-alt-text-decorative-tooltip = Apaingarri gisa markatuta +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Adibidez, "gizon gaztea mahaian eserita dago bazkaltzeko" + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Goiko ezkerreko izkina — aldatu tamaina +pdfjs-editor-resizer-label-top-middle = Goian erdian — aldatu tamaina +pdfjs-editor-resizer-label-top-right = Goiko eskuineko izkina — aldatu tamaina +pdfjs-editor-resizer-label-middle-right = Erdian eskuinean — aldatu tamaina +pdfjs-editor-resizer-label-bottom-right = Beheko eskuineko izkina — aldatu tamaina +pdfjs-editor-resizer-label-bottom-middle = Behean erdian — aldatu tamaina +pdfjs-editor-resizer-label-bottom-left = Beheko ezkerreko izkina — aldatu tamaina +pdfjs-editor-resizer-label-middle-left = Erdian ezkerrean — aldatu tamaina + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Nabarmentze kolorea +pdfjs-editor-colorpicker-button = + .title = Aldatu kolorea +pdfjs-editor-colorpicker-dropdown = + .aria-label = Kolore-aukerak +pdfjs-editor-colorpicker-yellow = + .title = Horia +pdfjs-editor-colorpicker-green = + .title = Berdea +pdfjs-editor-colorpicker-blue = + .title = Urdina +pdfjs-editor-colorpicker-pink = + .title = Arrosa +pdfjs-editor-colorpicker-red = + .title = Gorria + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Erakutsi denak +pdfjs-editor-highlight-show-all-button = + .title = Erakutsi denak diff --git a/static/pdf.js/locale/eu/viewer.properties b/static/pdf.js/locale/eu/viewer.properties deleted file mode 100644 index 45ecd663..00000000 --- a/static/pdf.js/locale/eu/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Aurreko orria -previous_label=Aurrekoa -next.title=Hurrengo orria -next_label=Hurrengoa - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Orria -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=/ {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages={{pagesCount}}/{{pageNumber}} - -zoom_out.title=Urrundu zooma -zoom_out_label=Urrundu zooma -zoom_in.title=Gerturatu zooma -zoom_in_label=Gerturatu zooma -zoom.title=Zooma -presentation_mode.title=Aldatu aurkezpen modura -presentation_mode_label=Arkezpen modua -open_file.title=Ireki fitxategia -open_file_label=Ireki -print.title=Inprimatu -print_label=Inprimatu -save.title=Gorde -save_label=Gorde -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Deskargatu -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Deskargatu -bookmark1.title=Uneko orria (ikusi uneko orriaren URLa) -bookmark1_label=Uneko orria -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Ireki aplikazioan -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Ireki aplikazioan - -# Secondary toolbar and context menu -tools.title=Tresnak -tools_label=Tresnak -first_page.title=Joan lehen orrira -first_page_label=Joan lehen orrira -last_page.title=Joan azken orrira -last_page_label=Joan azken orrira -page_rotate_cw.title=Biratu erlojuaren norantzan -page_rotate_cw_label=Biratu erlojuaren norantzan -page_rotate_ccw.title=Biratu erlojuaren aurkako norantzan -page_rotate_ccw_label=Biratu erlojuaren aurkako norantzan - -cursor_text_select_tool.title=Gaitu testuaren hautapen tresna -cursor_text_select_tool_label=Testuaren hautapen tresna -cursor_hand_tool.title=Gaitu eskuaren tresna -cursor_hand_tool_label=Eskuaren tresna - -scroll_page.title=Erabili orriaren korritzea -scroll_page_label=Orriaren korritzea -scroll_vertical.title=Erabili korritze bertikala -scroll_vertical_label=Korritze bertikala -scroll_horizontal.title=Erabili korritze horizontala -scroll_horizontal_label=Korritze horizontala -scroll_wrapped.title=Erabili korritze egokitua -scroll_wrapped_label=Korritze egokitua - -spread_none.title=Ez elkartu barreiatutako orriak -spread_none_label=Barreiatzerik ez -spread_odd.title=Elkartu barreiatutako orriak bakoiti zenbakidunekin hasita -spread_odd_label=Barreiatze bakoitia -spread_even.title=Elkartu barreiatutako orriak bikoiti zenbakidunekin hasita -spread_even_label=Barreiatze bikoitia - -# Document properties dialog box -document_properties.title=Dokumentuaren propietateak… -document_properties_label=Dokumentuaren propietateak… -document_properties_file_name=Fitxategi-izena: -document_properties_file_size=Fitxategiaren tamaina: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} byte) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} byte) -document_properties_title=Izenburua: -document_properties_author=Egilea: -document_properties_subject=Gaia: -document_properties_keywords=Gako-hitzak: -document_properties_creation_date=Sortze-data: -document_properties_modification_date=Aldatze-data: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Sortzailea: -document_properties_producer=PDFaren ekoizlea: -document_properties_version=PDF bertsioa: -document_properties_page_count=Orrialde kopurua: -document_properties_page_size=Orriaren tamaina: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=bertikala -document_properties_page_size_orientation_landscape=horizontala -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Gutuna -document_properties_page_size_name_legal=Legala -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Webeko ikuspegi bizkorra: -document_properties_linearized_yes=Bai -document_properties_linearized_no=Ez -document_properties_close=Itxi - -print_progress_message=Dokumentua inprimatzeko prestatzen… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent=%{{progress}} -print_progress_close=Utzi - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Txandakatu alboko barra -toggle_sidebar_notification2.title=Txandakatu alboko barra (dokumentuak eskema/eranskinak/geruzak ditu) -toggle_sidebar_label=Txandakatu alboko barra -document_outline.title=Erakutsi dokumentuaren eskema (klik bikoitza elementu guztiak zabaltzeko/tolesteko) -document_outline_label=Dokumentuaren eskema -attachments.title=Erakutsi eranskinak -attachments_label=Eranskinak -layers.title=Erakutsi geruzak (klik bikoitza geruza guztiak egoera lehenetsira berrezartzeko) -layers_label=Geruzak -thumbs.title=Erakutsi koadro txikiak -thumbs_label=Koadro txikiak -current_outline_item.title=Bilatu uneko eskemaren elementua -current_outline_item_label=Uneko eskemaren elementua -findbar.title=Bilatu dokumentuan -findbar_label=Bilatu - -additional_layers=Geruza gehigarriak -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark={{page}}. orria -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title={{page}}. orria -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas={{page}}. orriaren koadro txikia - -# Find panel button title and messages -find_input.title=Bilatu -find_input.placeholder=Bilatu dokumentuan… -find_previous.title=Bilatu esaldiaren aurreko parekatzea -find_previous_label=Aurrekoa -find_next.title=Bilatu esaldiaren hurrengo parekatzea -find_next_label=Hurrengoa -find_highlight=Nabarmendu guztia -find_match_case_label=Bat etorri maiuskulekin/minuskulekin -find_match_diacritics_label=Bereizi diakritikoak -find_entire_word_label=Hitz osoak -find_reached_top=Dokumentuaren hasierara heldu da, bukaeratik jarraitzen -find_reached_bottom=Dokumentuaren bukaerara heldu da, hasieratik jarraitzen -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{total}}/{{current}}. bat etortzea -find_match_count[two]={{total}}/{{current}}. bat etortzea -find_match_count[few]={{total}}/{{current}}. bat etortzea -find_match_count[many]={{total}}/{{current}}. bat etortzea -find_match_count[other]={{total}}/{{current}}. bat etortzea -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]={{limit}} bat-etortze baino gehiago -find_match_count_limit[one]=Bat-etortze {{limit}} baino gehiago -find_match_count_limit[two]={{limit}} bat-etortze baino gehiago -find_match_count_limit[few]={{limit}} bat-etortze baino gehiago -find_match_count_limit[many]={{limit}} bat-etortze baino gehiago -find_match_count_limit[other]={{limit}} bat-etortze baino gehiago -find_not_found=Esaldia ez da aurkitu - -# Predefined zoom values -page_scale_width=Orriaren zabalera -page_scale_fit=Doitu orrira -page_scale_auto=Zoom automatikoa -page_scale_actual=Benetako tamaina -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent=%{{scale}} - -# Loading indicator messages -loading_error=Errorea gertatu da PDFa kargatzean. -invalid_file_error=PDF fitxategi baliogabe edo hondatua. -missing_file_error=PDF fitxategia falta da. -unexpected_response_error=Espero gabeko zerbitzariaren erantzuna. -rendering_error=Errorea gertatu da orria errendatzean. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} ohartarazpena] -password_label=Idatzi PDF fitxategi hau irekitzeko pasahitza. -password_invalid=Pasahitz baliogabea. Saiatu berriro mesedez. -password_ok=Ados -password_cancel=Utzi - -printing_not_supported=Abisua: inprimatzeko euskarria ez da erabatekoa nabigatzaile honetan. -printing_not_ready=Abisua: PDFa ez dago erabat kargatuta inprimatzeko. -web_fonts_disabled=Webeko letra-tipoak desgaituta daude: ezin dira kapsulatutako PDF letra-tipoak erabili. - -# Editor -editor_free_text2.title=Testua -editor_free_text2_label=Testua -editor_ink2.title=Marrazkia -editor_ink2_label=Marrazkia - -editor_stamp1.title=Gehitu edo editatu irudiak -editor_stamp1_label=Gehitu edo editatu irudiak - -free_text2_default_content=Hasi idazten… - -# Editor Parameters -editor_free_text_color=Kolorea -editor_free_text_size=Tamaina -editor_ink_color=Kolorea -editor_ink_thickness=Loditasuna -editor_ink_opacity=Opakutasuna - -editor_stamp_add_image_label=Gehitu irudia -editor_stamp_add_image.title=Gehitu irudia - -# Editor aria -editor_free_text2_aria_label=Testu-editorea -editor_ink2_aria_label=Marrazki-editorea -editor_ink_canvas_aria_label=Erabiltzaileak sortutako irudia - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Testu alternatiboa -editor_alt_text_edit_button_label=Editatu testu alternatiboa -editor_alt_text_dialog_label=Aukeratu aukera -editor_alt_text_dialog_description=Testu alternatiboak laguntzen du jendeak ezin duenean irudia ikusi edo ez denean kargatzen. -editor_alt_text_add_description_label=Gehitu azalpena -editor_alt_text_add_description_description=Saiatu idazten gaia, ezarpena edo ekintzak deskribatzen dituen esaldi 1 edo 2. -editor_alt_text_mark_decorative_label=Markatu apaingarri gisa -editor_alt_text_mark_decorative_description=Irudiak apaingarrientzat erabiltzen da, adibidez ertz edo ur-marketarako. -editor_alt_text_cancel_button=Utzi -editor_alt_text_save_button=Gorde -editor_alt_text_decorative_tooltip=Apaingarri gisa markatuta -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=Adibidez, "gizon gaztea mahaian eserita dago bazkaltzeko" diff --git a/static/pdf.js/locale/fa/viewer.ftl b/static/pdf.js/locale/fa/viewer.ftl new file mode 100644 index 00000000..f367e3c6 --- /dev/null +++ b/static/pdf.js/locale/fa/viewer.ftl @@ -0,0 +1,246 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = تغییر به حالت ارائه +pdfjs-presentation-mode-button-label = حالت ارائه +pdfjs-open-file-button = + .title = باز کردن پرونده +pdfjs-open-file-button-label = باز کردن +pdfjs-print-button = + .title = چاپ +pdfjs-print-button-label = چاپ +pdfjs-save-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-vertical-button = + .title = استفاده از پیمایش عمودی +pdfjs-scroll-vertical-button-label = پیمایش عمودی +pdfjs-scroll-horizontal-button = + .title = استفاده از پیمایش افقی +pdfjs-scroll-horizontal-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 = حجم پرونده: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } کیلوبایت ({ $size_b } بایت) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } مگابایت ({ $size_b } بایت) +pdfjs-document-properties-title = عنوان: +pdfjs-document-properties-author = نویسنده: +pdfjs-document-properties-subject = موضوع: +pdfjs-document-properties-keywords = کلیدواژه‌ها: +pdfjs-document-properties-creation-date = تاریخ ایجاد: +pdfjs-document-properties-modification-date = تاریخ ویرایش: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }، { $time } +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-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 }) + +## + +pdfjs-document-properties-linearized-yes = بله +pdfjs-document-properties-linearized-no = خیر +pdfjs-document-properties-close-button = بستن + +## Print + +pdfjs-print-progress-message = آماده سازی مدارک برای چاپ کردن… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = لغو +pdfjs-printing-not-supported = هشدار: قابلیت چاپ به‌طور کامل در این مرورگر پشتیبانی نمی‌شود. +pdfjs-printing-not-ready = اخطار: پرونده PDF بطور کامل بارگیری نشده و امکان چاپ وجود ندارد. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = باز و بسته کردن نوار کناری +pdfjs-toggle-sidebar-button-label = تغییرحالت نوارکناری +pdfjs-document-outline-button = + .title = نمایش رئوس مطالب مدارک(برای بازشدن/جمع شدن همه موارد دوبار کلیک کنید) +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 = پیدا کردن + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = صفحه { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = تصویر بند‌ انگشتی صفحه { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = پیدا کردن + .placeholder = پیدا کردن در سند… +pdfjs-find-previous-button = + .title = پیدا کردن رخداد قبلی عبارت +pdfjs-find-previous-button-label = قبلی +pdfjs-find-next-button = + .title = پیدا کردن رخداد بعدی عبارت +pdfjs-find-next-button-label = بعدی +pdfjs-find-highlight-checkbox = برجسته و هایلایت کردن همه موارد +pdfjs-find-match-case-checkbox-label = تطبیق کوچکی و بزرگی حروف +pdfjs-find-entire-word-checkbox-label = تمام کلمه‌ها +pdfjs-find-reached-top = به بالای صفحه رسیدیم، از پایین ادامه می‌دهیم +pdfjs-find-reached-bottom = به آخر صفحه رسیدیم، از بالا ادامه می‌دهیم +pdfjs-find-not-found = عبارت پیدا نشد + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = هنگام بارگیری پرونده PDF خطایی رخ داد. +pdfjs-invalid-file-error = پرونده PDF نامعتبر یامعیوب می‌باشد. +pdfjs-missing-file-error = پرونده PDF یافت نشد. +pdfjs-unexpected-response-error = پاسخ پیش بینی نشده سرور +pdfjs-rendering-error = هنگام بارگیری صفحه خطایی رخ داد. + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Annotation] + +## Password + +pdfjs-password-label = جهت باز کردن پرونده PDF گذرواژه را وارد نمائید. +pdfjs-password-invalid = گذرواژه نامعتبر. لطفا مجددا تلاش کنید. +pdfjs-password-ok-button = تأیید +pdfjs-password-cancel-button = لغو +pdfjs-web-fonts-disabled = فونت های تحت وب غیر فعال شده اند: امکان استفاده از نمایش دهنده داخلی PDF وجود ندارد. + +## Editing + +pdfjs-editor-free-text-button = + .title = متن +pdfjs-editor-free-text-button-label = متن +pdfjs-editor-ink-button = + .title = کشیدن +pdfjs-editor-ink-button-label = کشیدن +# Editor Parameters +pdfjs-editor-free-text-color-input = رنگ +pdfjs-editor-free-text-size-input = اندازه +pdfjs-editor-ink-color-input = رنگ + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/fa/viewer.properties b/static/pdf.js/locale/fa/viewer.properties deleted file mode 100644 index a78b022d..00000000 --- a/static/pdf.js/locale/fa/viewer.properties +++ /dev/null @@ -1,221 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=صفحهٔ قبلی -previous_label=قبلی -next.title=صفحهٔ بعدی -next_label=بعدی - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=صفحه -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=از {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}}از {{pagesCount}}) - -zoom_out.title=کوچک‌نمایی -zoom_out_label=کوچک‌نمایی -zoom_in.title=بزرگ‌نمایی -zoom_in_label=بزرگ‌نمایی -zoom.title=زوم -presentation_mode.title=تغییر به حالت ارائه -presentation_mode_label=حالت ارائه -open_file.title=باز کردن پرونده -open_file_label=باز کردن -print.title=چاپ -print_label=چاپ - -save_label=ذخیره - - -# Secondary toolbar and context menu -tools.title=ابزارها -tools_label=ابزارها -first_page.title=برو به اولین صفحه -first_page_label=برو به اولین صفحه -last_page.title=برو به آخرین صفحه -last_page_label=برو به آخرین صفحه -page_rotate_cw.title=چرخش ساعتگرد -page_rotate_cw_label=چرخش ساعتگرد -page_rotate_ccw.title=چرخش پاد ساعتگرد -page_rotate_ccw_label=چرخش پاد ساعتگرد - -cursor_text_select_tool.title=فعال کردن ابزارِ انتخابِ متن -cursor_text_select_tool_label=ابزارِ انتخابِ متن -cursor_hand_tool.title=فعال کردن ابزارِ دست -cursor_hand_tool_label=ابزار دست - -scroll_vertical.title=استفاده از پیمایش عمودی -scroll_vertical_label=پیمایش عمودی -scroll_horizontal.title=استفاده از پیمایش افقی -scroll_horizontal_label=پیمایش افقی - - -# Document properties dialog box -document_properties.title=خصوصیات سند... -document_properties_label=خصوصیات سند... -document_properties_file_name=نام فایل: -document_properties_file_size=حجم پرونده: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} کیلوبایت ({{size_b}} بایت) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} مگابایت ({{size_b}} بایت) -document_properties_title=عنوان: -document_properties_author=نویسنده: -document_properties_subject=موضوع: -document_properties_keywords=کلیدواژه‌ها: -document_properties_creation_date=تاریخ ایجاد: -document_properties_modification_date=تاریخ ویرایش: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}، {{time}} -document_properties_creator=ایجاد کننده: -document_properties_producer=ایجاد کننده PDF: -document_properties_version=نسخه PDF: -document_properties_page_count=تعداد صفحات: -document_properties_page_size=اندازه صفحه: -document_properties_page_size_unit_inches=اینچ -document_properties_page_size_unit_millimeters=میلی‌متر -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=نامه -document_properties_page_size_name_legal=حقوقی -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized_yes=بله -document_properties_linearized_no=خیر -document_properties_close=بستن - -print_progress_message=آماده سازی مدارک برای چاپ کردن… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=لغو - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=باز و بسته کردن نوار کناری -toggle_sidebar_label=تغییرحالت نوارکناری -document_outline.title=نمایش رئوس مطالب مدارک(برای بازشدن/جمع شدن همه موارد دوبار کلیک کنید) -document_outline_label=طرح نوشتار -attachments.title=نمایش پیوست‌ها -attachments_label=پیوست‌ها -layers_label=لایه‌ها -thumbs.title=نمایش تصاویر بندانگشتی -thumbs_label=تصاویر بندانگشتی -findbar.title=جستجو در سند -findbar_label=پیدا کردن - -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=صفحهٔ {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=صفحه {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=تصویر بند‌ انگشتی صفحه {{page}} - -# Find panel button title and messages -find_input.title=پیدا کردن -find_input.placeholder=پیدا کردن در سند… -find_previous.title=پیدا کردن رخداد قبلی عبارت -find_previous_label=قبلی -find_next.title=پیدا کردن رخداد بعدی عبارت -find_next_label=بعدی -find_highlight=برجسته و هایلایت کردن همه موارد -find_match_case_label=تطبیق کوچکی و بزرگی حروف -find_entire_word_label=تمام کلمه‌ها -find_reached_top=به بالای صفحه رسیدیم، از پایین ادامه می‌دهیم -find_reached_bottom=به آخر صفحه رسیدیم، از بالا ادامه می‌دهیم -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count[one]={{current}} از {{total}} مطابقت دارد -find_match_count[two]={{current}} از {{total}} مطابقت دارد -find_match_count[few]={{current}} از {{total}} مطابقت دارد -find_match_count[many]={{current}} از {{total}} مطابقت دارد -find_match_count[other]={{current}} از {{total}} مطابقت دارد -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_not_found=عبارت پیدا نشد - -# Predefined zoom values -page_scale_width=عرض صفحه -page_scale_fit=اندازه کردن صفحه -page_scale_auto=بزرگنمایی خودکار -page_scale_actual=اندازه واقعی‌ -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages - -# Loading indicator messages -loading_error=هنگام بارگیری پرونده PDF خطایی رخ داد. -invalid_file_error=پرونده PDF نامعتبر یامعیوب می‌باشد. -missing_file_error=پرونده PDF یافت نشد. -unexpected_response_error=پاسخ پیش بینی نشده سرور - -rendering_error=هنگام بارگیری صفحه خطایی رخ داد. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Annotation] -password_label=جهت باز کردن پرونده PDF گذرواژه را وارد نمائید. -password_invalid=گذرواژه نامعتبر. لطفا مجددا تلاش کنید. -password_ok=تأیید -password_cancel=لغو - -printing_not_supported=هشدار: قابلیت چاپ به‌طور کامل در این مرورگر پشتیبانی نمی‌شود. -printing_not_ready=اخطار: پرونده PDF بطور کامل بارگیری نشده و امکان چاپ وجود ندارد. -web_fonts_disabled=فونت های تحت وب غیر فعال شده اند: امکان استفاده از نمایش دهنده داخلی PDF وجود ندارد. - -# Editor -editor_free_text2.title=متن -editor_free_text2_label=متن -editor_ink2.title=کشیدن -editor_ink2_label=کشیدن - - -# Editor Parameters -editor_free_text_color=رنگ -editor_free_text_size=اندازه -editor_ink_color=رنگ - -# Editor aria - diff --git a/static/pdf.js/locale/ff/viewer.ftl b/static/pdf.js/locale/ff/viewer.ftl new file mode 100644 index 00000000..d1419f54 --- /dev/null +++ b/static/pdf.js/locale/ff/viewer.ftl @@ -0,0 +1,247 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Hello Ɓennungo +pdfjs-previous-button-label = Ɓennuɗo +pdfjs-next-button = + .title = Hello faango +pdfjs-next-button-label = Yeeso +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Hello +# 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 = e nder { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount }) +pdfjs-zoom-out-button = + .title = Lonngo Woɗɗa +pdfjs-zoom-out-button-label = Lonngo Woɗɗa +pdfjs-zoom-in-button = + .title = Lonngo Ara +pdfjs-zoom-in-button-label = Lonngo Ara +pdfjs-zoom-select = + .title = Lonngo +pdfjs-presentation-mode-button = + .title = Faytu to Presentation Mode +pdfjs-presentation-mode-button-label = Presentation Mode +pdfjs-open-file-button = + .title = Uddit Fiilde +pdfjs-open-file-button-label = Uddit +pdfjs-print-button = + .title = Winndito +pdfjs-print-button-label = Winndito + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Kuutorɗe +pdfjs-tools-button-label = Kuutorɗe +pdfjs-first-page-button = + .title = Yah to hello adanngo +pdfjs-first-page-button-label = Yah to hello adanngo +pdfjs-last-page-button = + .title = Yah to hello wattindiingo +pdfjs-last-page-button-label = Yah to hello wattindiingo +pdfjs-page-rotate-cw-button = + .title = Yiiltu Faya Ñaamo +pdfjs-page-rotate-cw-button-label = Yiiltu Faya Ñaamo +pdfjs-page-rotate-ccw-button = + .title = Yiiltu Faya Nano +pdfjs-page-rotate-ccw-button-label = Yiiltu Faya Nano +pdfjs-cursor-text-select-tool-button = + .title = Gollin kaɓirgel cuɓirgel binndi +pdfjs-cursor-text-select-tool-button-label = Kaɓirgel cuɓirgel binndi +pdfjs-cursor-hand-tool-button = + .title = Hurmin kuutorgal junngo +pdfjs-cursor-hand-tool-button-label = Kaɓirgel junngo +pdfjs-scroll-vertical-button = + .title = Huutoro gorwitol daringol +pdfjs-scroll-vertical-button-label = Gorwitol daringol +pdfjs-scroll-horizontal-button = + .title = Huutoro gorwitol lelingol +pdfjs-scroll-horizontal-button-label = Gorwitol daringol +pdfjs-scroll-wrapped-button = + .title = Huutoro gorwitol coomingol +pdfjs-scroll-wrapped-button-label = Gorwitol coomingol +pdfjs-spread-none-button = + .title = Hoto tawtu kelle kelle +pdfjs-spread-none-button-label = Alaa Spreads +pdfjs-spread-odd-button = + .title = Tawtu kelle puɗɗortooɗe kelle teelɗe +pdfjs-spread-odd-button-label = Kelle teelɗe +pdfjs-spread-even-button = + .title = Tawtu ɗereeji kelle puɗɗoriiɗi kelle teeltuɗe +pdfjs-spread-even-button-label = Kelle teeltuɗe + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Keeroraaɗi Winndannde… +pdfjs-document-properties-button-label = Keeroraaɗi Winndannde… +pdfjs-document-properties-file-name = Innde fiilde: +pdfjs-document-properties-file-size = Ɓetol fiilde: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bite) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bite) +pdfjs-document-properties-title = Tiitoonde: +pdfjs-document-properties-author = Binnduɗo: +pdfjs-document-properties-subject = Toɓɓere: +pdfjs-document-properties-keywords = Kelmekele jiytirɗe: +pdfjs-document-properties-creation-date = Ñalnde Sosaa: +pdfjs-document-properties-modification-date = Ñalnde Waylaa: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Cosɗo: +pdfjs-document-properties-producer = Paggiiɗo PDF: +pdfjs-document-properties-version = Yamre PDF: +pdfjs-document-properties-page-count = Limoore Kelle: +pdfjs-document-properties-page-size = Ɓeto Hello: +pdfjs-document-properties-page-size-unit-inches = nder +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = dariingo +pdfjs-document-properties-page-size-orientation-landscape = wertiingo +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 = Ɓataake +pdfjs-document-properties-page-size-name-legal = Laawol + +## 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 = Ɗisngo geese yaawngo: +pdfjs-document-properties-linearized-yes = Eey +pdfjs-document-properties-linearized-no = Alaa +pdfjs-document-properties-close-button = Uddu + +## Print + +pdfjs-print-progress-message = Nana heboo winnditaade fiilannde… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Haaytu +pdfjs-printing-not-supported = Reentino: Winnditagol tammbitaaka no feewi e ndee wanngorde. +pdfjs-printing-not-ready = Reentino: PDF oo loowaaki haa timmi ngam winnditagol. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Toggilo Palal Sawndo +pdfjs-toggle-sidebar-button-label = Toggilo Palal Sawndo +pdfjs-document-outline-button = + .title = Hollu Ƴiyal Fiilannde (dobdobo ngam wertude/taggude teme fof) +pdfjs-document-outline-button-label = Toɓɓe Fiilannde +pdfjs-attachments-button = + .title = Hollu Ɗisanɗe +pdfjs-attachments-button-label = Ɗisanɗe +pdfjs-thumbs-button = + .title = Hollu Dooɓe +pdfjs-thumbs-button-label = Dooɓe +pdfjs-findbar-button = + .title = Yiylo e fiilannde +pdfjs-findbar-button-label = Yiytu + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Hello { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Dooɓre Hello { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Yiytu + .placeholder = Yiylo nder dokimaa +pdfjs-find-previous-button = + .title = Yiylo cilol ɓennugol konngol ngol +pdfjs-find-previous-button-label = Ɓennuɗo +pdfjs-find-next-button = + .title = Yiylo cilol garowol konngol ngol +pdfjs-find-next-button-label = Yeeso +pdfjs-find-highlight-checkbox = Jalbin fof +pdfjs-find-match-case-checkbox-label = Jaaɓnu darnde +pdfjs-find-entire-word-checkbox-label = Kelme timmuɗe tan +pdfjs-find-reached-top = Heɓii fuɗɗorde fiilannde, jokku faya les +pdfjs-find-reached-bottom = Heɓii hoore fiilannde, jokku faya les +pdfjs-find-not-found = Konngi njiyataa + +## Predefined zoom values + +pdfjs-page-scale-width = Njaajeendi Hello +pdfjs-page-scale-fit = Keƴeendi Hello +pdfjs-page-scale-auto = Loongorde Jaajol +pdfjs-page-scale-actual = Ɓetol Jaati +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = Juumre waɗii tuma nde loowata PDF oo. +pdfjs-invalid-file-error = Fiilde PDF moƴƴaani walla jiibii. +pdfjs-missing-file-error = Fiilde PDF ena ŋakki. +pdfjs-unexpected-response-error = Jaabtol sarworde tijjinooka. +pdfjs-rendering-error = Juumre waɗii tuma nde yoŋkittoo hello. + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Siiftannde] + +## Password + +pdfjs-password-label = Naatu finnde ngam uddite ndee fiilde PDF. +pdfjs-password-invalid = Finnde moƴƴaani. Tiiɗno eto kadi. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Haaytu +pdfjs-web-fonts-disabled = Ponte geese ko daaƴaaɗe: horiima huutoraade ponte PDF coomtoraaɗe. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/ff/viewer.properties b/static/pdf.js/locale/ff/viewer.properties deleted file mode 100644 index bd984f55..00000000 --- a/static/pdf.js/locale/ff/viewer.properties +++ /dev/null @@ -1,214 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Hello Ɓennungo -previous_label=Ɓennuɗo -next.title=Hello faango -next_label=Yeeso - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Hello -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=e nder {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} of {{pagesCount}}) - -zoom_out.title=Lonngo Woɗɗa -zoom_out_label=Lonngo Woɗɗa -zoom_in.title=Lonngo Ara -zoom_in_label=Lonngo Ara -zoom.title=Lonngo -presentation_mode.title=Faytu to Presentation Mode -presentation_mode_label=Presentation Mode -open_file.title=Uddit Fiilde -open_file_label=Uddit -print.title=Winndito -print_label=Winndito - -# Secondary toolbar and context menu -tools.title=Kuutorɗe -tools_label=Kuutorɗe -first_page.title=Yah to hello adanngo -first_page_label=Yah to hello adanngo -last_page.title=Yah to hello wattindiingo -last_page_label=Yah to hello wattindiingo -page_rotate_cw.title=Yiiltu Faya Ñaamo -page_rotate_cw_label=Yiiltu Faya Ñaamo -page_rotate_ccw.title=Yiiltu Faya Nano -page_rotate_ccw_label=Yiiltu Faya Nano - -cursor_text_select_tool.title=Gollin kaɓirgel cuɓirgel binndi -cursor_text_select_tool_label=Kaɓirgel cuɓirgel binndi -cursor_hand_tool.title=Hurmin kuutorgal junngo -cursor_hand_tool_label=Kaɓirgel junngo - -scroll_vertical.title=Huutoro gorwitol daringol -scroll_vertical_label=Gorwitol daringol -scroll_horizontal.title=Huutoro gorwitol lelingol -scroll_horizontal_label=Gorwitol daringol -scroll_wrapped.title=Huutoro gorwitol coomingol -scroll_wrapped_label=Gorwitol coomingol - -spread_none.title=Hoto tawtu kelle kelle -spread_none_label=Alaa Spreads -spread_odd.title=Tawtu kelle puɗɗortooɗe kelle teelɗe -spread_odd_label=Kelle teelɗe -spread_even.title=Tawtu ɗereeji kelle puɗɗoriiɗi kelle teeltuɗe -spread_even_label=Kelle teeltuɗe - -# Document properties dialog box -document_properties.title=Keeroraaɗi Winndannde… -document_properties_label=Keeroraaɗi Winndannde… -document_properties_file_name=Innde fiilde: -document_properties_file_size=Ɓetol fiilde: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bite) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bite) -document_properties_title=Tiitoonde: -document_properties_author=Binnduɗo: -document_properties_subject=Toɓɓere: -document_properties_keywords=Kelmekele jiytirɗe: -document_properties_creation_date=Ñalnde Sosaa: -document_properties_modification_date=Ñalnde Waylaa: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Cosɗo: -document_properties_producer=Paggiiɗo PDF: -document_properties_version=Yamre PDF: -document_properties_page_count=Limoore Kelle: -document_properties_page_size=Ɓeto Hello: -document_properties_page_size_unit_inches=nder -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=dariingo -document_properties_page_size_orientation_landscape=wertiingo -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Ɓataake -document_properties_page_size_name_legal=Laawol -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Ɗisngo geese yaawngo: -document_properties_linearized_yes=Eey -document_properties_linearized_no=Alaa -document_properties_close=Uddu - -print_progress_message=Nana heboo winnditaade fiilannde… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Haaytu - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Toggilo Palal Sawndo -toggle_sidebar_label=Toggilo Palal Sawndo -document_outline.title=Hollu Ƴiyal Fiilannde (dobdobo ngam wertude/taggude teme fof) -document_outline_label=Toɓɓe Fiilannde -attachments.title=Hollu Ɗisanɗe -attachments_label=Ɗisanɗe -thumbs.title=Hollu Dooɓe -thumbs_label=Dooɓe -findbar.title=Yiylo e fiilannde -findbar_label=Yiytu - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Hello {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Dooɓre Hello {{page}} - -# Find panel button title and messages -find_input.title=Yiytu -find_input.placeholder=Yiylo nder dokimaa -find_previous.title=Yiylo cilol ɓennugol konngol ngol -find_previous_label=Ɓennuɗo -find_next.title=Yiylo cilol garowol konngol ngol -find_next_label=Yeeso -find_highlight=Jalbin fof -find_match_case_label=Jaaɓnu darnde -find_entire_word_label=Kelme timmuɗe tan -find_reached_top=Heɓii fuɗɗorde fiilannde, jokku faya les -find_reached_bottom=Heɓii hoore fiilannde, jokku faya les -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} wonande laabi {{total}} -find_match_count[two]={{current}} wonande laabi {{total}} -find_match_count[few]={{current}} wonande laabi {{total}} -find_match_count[many]={{current}} wonande laabi {{total}} -find_match_count[other]={{current}} wonande laabi {{total}} -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Ko ɓuri laabi {{limit}} -find_match_count_limit[one]=Ko ɓuri laani {{limit}} -find_match_count_limit[two]=Ko ɓuri laabi {{limit}} -find_match_count_limit[few]=Ko ɓuri laabi {{limit}} -find_match_count_limit[many]=Ko ɓuri laabi {{limit}} -find_match_count_limit[other]=Ko ɓuri laabi {{limit}} -find_not_found=Konngi njiyataa - -# Predefined zoom values -page_scale_width=Njaajeendi Hello -page_scale_fit=Keƴeendi Hello -page_scale_auto=Loongorde Jaajol -page_scale_actual=Ɓetol Jaati -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=Juumre waɗii tuma nde loowata PDF oo. -invalid_file_error=Fiilde PDF moƴƴaani walla jiibii. -missing_file_error=Fiilde PDF ena ŋakki. -unexpected_response_error=Jaabtol sarworde tijjinooka. - -rendering_error=Juumre waɗii tuma nde yoŋkittoo hello. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Siiftannde] -password_label=Naatu finnde ngam uddite ndee fiilde PDF. -password_invalid=Finnde moƴƴaani. Tiiɗno eto kadi. -password_ok=OK -password_cancel=Haaytu - -printing_not_supported=Reentino: Winnditagol tammbitaaka no feewi e ndee wanngorde. -printing_not_ready=Reentino: PDF oo loowaaki haa timmi ngam winnditagol. -web_fonts_disabled=Ponte geese ko daaƴaaɗe: horiima huutoraade ponte PDF coomtoraaɗe. - diff --git a/static/pdf.js/locale/fi/viewer.ftl b/static/pdf.js/locale/fi/viewer.ftl new file mode 100644 index 00000000..51667837 --- /dev/null +++ b/static/pdf.js/locale/fi/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Edellinen sivu +pdfjs-previous-button-label = Edellinen +pdfjs-next-button = + .title = Seuraava sivu +pdfjs-next-button-label = Seuraava +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Sivu +# 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 = Loitonna +pdfjs-zoom-out-button-label = Loitonna +pdfjs-zoom-in-button = + .title = Lähennä +pdfjs-zoom-in-button-label = Lähennä +pdfjs-zoom-select = + .title = Suurennus +pdfjs-presentation-mode-button = + .title = Siirry esitystilaan +pdfjs-presentation-mode-button-label = Esitystila +pdfjs-open-file-button = + .title = Avaa tiedosto +pdfjs-open-file-button-label = Avaa +pdfjs-print-button = + .title = Tulosta +pdfjs-print-button-label = Tulosta +pdfjs-save-button = + .title = Tallenna +pdfjs-save-button-label = Tallenna +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Lataa +# 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 = Lataa +pdfjs-bookmark-button = + .title = Nykyinen sivu (Näytä URL-osoite nykyiseltä sivulta) +pdfjs-bookmark-button-label = Nykyinen sivu +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Avaa sovelluksessa +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Avaa sovelluksessa + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Tools +pdfjs-tools-button-label = Tools +pdfjs-first-page-button = + .title = Siirry ensimmäiselle sivulle +pdfjs-first-page-button-label = Siirry ensimmäiselle sivulle +pdfjs-last-page-button = + .title = Siirry viimeiselle sivulle +pdfjs-last-page-button-label = Siirry viimeiselle sivulle +pdfjs-page-rotate-cw-button = + .title = Kierrä oikealle +pdfjs-page-rotate-cw-button-label = Kierrä oikealle +pdfjs-page-rotate-ccw-button = + .title = Kierrä vasemmalle +pdfjs-page-rotate-ccw-button-label = Kierrä vasemmalle +pdfjs-cursor-text-select-tool-button = + .title = Käytä tekstinvalintatyökalua +pdfjs-cursor-text-select-tool-button-label = Tekstinvalintatyökalu +pdfjs-cursor-hand-tool-button = + .title = Käytä käsityökalua +pdfjs-cursor-hand-tool-button-label = Käsityökalu +pdfjs-scroll-page-button = + .title = Käytä sivun vieritystä +pdfjs-scroll-page-button-label = Sivun vieritys +pdfjs-scroll-vertical-button = + .title = Käytä pystysuuntaista vieritystä +pdfjs-scroll-vertical-button-label = Pystysuuntainen vieritys +pdfjs-scroll-horizontal-button = + .title = Käytä vaakasuuntaista vieritystä +pdfjs-scroll-horizontal-button-label = Vaakasuuntainen vieritys +pdfjs-scroll-wrapped-button = + .title = Käytä rivittyvää vieritystä +pdfjs-scroll-wrapped-button-label = Rivittyvä vieritys +pdfjs-spread-none-button = + .title = Älä yhdistä sivuja aukeamiksi +pdfjs-spread-none-button-label = Ei aukeamia +pdfjs-spread-odd-button = + .title = Yhdistä sivut aukeamiksi alkaen parittomalta sivulta +pdfjs-spread-odd-button-label = Parittomalta alkavat aukeamat +pdfjs-spread-even-button = + .title = Yhdistä sivut aukeamiksi alkaen parilliselta sivulta +pdfjs-spread-even-button-label = Parilliselta alkavat aukeamat + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Dokumentin ominaisuudet… +pdfjs-document-properties-button-label = Dokumentin ominaisuudet… +pdfjs-document-properties-file-name = Tiedoston nimi: +pdfjs-document-properties-file-size = Tiedoston koko: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } kt ({ $size_b } tavua) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } Mt ({ $size_b } tavua) +pdfjs-document-properties-title = Otsikko: +pdfjs-document-properties-author = Tekijä: +pdfjs-document-properties-subject = Aihe: +pdfjs-document-properties-keywords = Avainsanat: +pdfjs-document-properties-creation-date = Luomispäivämäärä: +pdfjs-document-properties-modification-date = Muokkauspäivämäärä: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Luoja: +pdfjs-document-properties-producer = PDF-tuottaja: +pdfjs-document-properties-version = PDF-versio: +pdfjs-document-properties-page-count = Sivujen määrä: +pdfjs-document-properties-page-size = Sivun koko: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = pysty +pdfjs-document-properties-page-size-orientation-landscape = vaaka +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Nopea web-katselu: +pdfjs-document-properties-linearized-yes = Kyllä +pdfjs-document-properties-linearized-no = Ei +pdfjs-document-properties-close-button = Sulje + +## Print + +pdfjs-print-progress-message = Valmistellaan dokumenttia tulostamista varten… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress } % +pdfjs-print-progress-close-button = Peruuta +pdfjs-printing-not-supported = Varoitus: Selain ei tue kaikkia tulostustapoja. +pdfjs-printing-not-ready = Varoitus: PDF-tiedosto ei ole vielä latautunut kokonaan, eikä sitä voi vielä tulostaa. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Näytä/piilota sivupaneeli +pdfjs-toggle-sidebar-notification-button = + .title = Näytä/piilota sivupaneeli (dokumentissa on sisällys/liitteitä/tasoja) +pdfjs-toggle-sidebar-button-label = Näytä/piilota sivupaneeli +pdfjs-document-outline-button = + .title = Näytä dokumentin sisällys (laajenna tai kutista kohdat kaksoisnapsauttamalla) +pdfjs-document-outline-button-label = Dokumentin sisällys +pdfjs-attachments-button = + .title = Näytä liitteet +pdfjs-attachments-button-label = Liitteet +pdfjs-layers-button = + .title = Näytä tasot (kaksoisnapsauta palauttaaksesi kaikki tasot oletustilaan) +pdfjs-layers-button-label = Tasot +pdfjs-thumbs-button = + .title = Näytä pienoiskuvat +pdfjs-thumbs-button-label = Pienoiskuvat +pdfjs-current-outline-item-button = + .title = Etsi nykyinen sisällyksen kohta +pdfjs-current-outline-item-button-label = Nykyinen sisällyksen kohta +pdfjs-findbar-button = + .title = Etsi dokumentista +pdfjs-findbar-button-label = Etsi +pdfjs-additional-layers = Lisätasot + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Sivu { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Pienoiskuva sivusta { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Etsi + .placeholder = Etsi dokumentista… +pdfjs-find-previous-button = + .title = Etsi hakusanan edellinen osuma +pdfjs-find-previous-button-label = Edellinen +pdfjs-find-next-button = + .title = Etsi hakusanan seuraava osuma +pdfjs-find-next-button-label = Seuraava +pdfjs-find-highlight-checkbox = Korosta kaikki +pdfjs-find-match-case-checkbox-label = Huomioi kirjainkoko +pdfjs-find-match-diacritics-checkbox-label = Erota tarkkeet +pdfjs-find-entire-word-checkbox-label = Kokonaiset sanat +pdfjs-find-reached-top = Päästiin dokumentin alkuun, jatketaan lopusta +pdfjs-find-reached-bottom = Päästiin dokumentin loppuun, jatketaan alusta +# 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 } / { $total } osuma + *[other] { $current } / { $total } osumaa + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Yli { $limit } osuma + *[other] Yli { $limit } osumaa + } +pdfjs-find-not-found = Hakusanaa ei löytynyt + +## Predefined zoom values + +pdfjs-page-scale-width = Sivun leveys +pdfjs-page-scale-fit = Koko sivu +pdfjs-page-scale-auto = Automaattinen suurennus +pdfjs-page-scale-actual = Todellinen koko +# 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 = Sivu { $page } + +## Loading indicator messages + +pdfjs-loading-error = Tapahtui virhe ladattaessa PDF-tiedostoa. +pdfjs-invalid-file-error = Virheellinen tai vioittunut PDF-tiedosto. +pdfjs-missing-file-error = Puuttuva PDF-tiedosto. +pdfjs-unexpected-response-error = Odottamaton vastaus palvelimelta. +pdfjs-rendering-error = Tapahtui virhe piirrettäessä sivua. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type }-merkintä] + +## Password + +pdfjs-password-label = Kirjoita PDF-tiedoston salasana. +pdfjs-password-invalid = Virheellinen salasana. Yritä uudestaan. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Peruuta +pdfjs-web-fonts-disabled = Verkkosivujen omat kirjasinlajit on estetty: ei voida käyttää upotettuja PDF-kirjasinlajeja. + +## Editing + +pdfjs-editor-free-text-button = + .title = Teksti +pdfjs-editor-free-text-button-label = Teksti +pdfjs-editor-ink-button = + .title = Piirros +pdfjs-editor-ink-button-label = Piirros +pdfjs-editor-stamp-button = + .title = Lisää tai muokkaa kuvia +pdfjs-editor-stamp-button-label = Lisää tai muokkaa kuvia +pdfjs-editor-highlight-button = + .title = Korostus +pdfjs-editor-highlight-button-label = Korostus +pdfjs-highlight-floating-button = + .title = Korostus +pdfjs-highlight-floating-button1 = + .title = Korostus + .aria-label = Korostus +pdfjs-highlight-floating-button-label = Korostus + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Poista piirros +pdfjs-editor-remove-freetext-button = + .title = Poista teksti +pdfjs-editor-remove-stamp-button = + .title = Poista kuva +pdfjs-editor-remove-highlight-button = + .title = Poista korostus + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Väri +pdfjs-editor-free-text-size-input = Koko +pdfjs-editor-ink-color-input = Väri +pdfjs-editor-ink-thickness-input = Paksuus +pdfjs-editor-ink-opacity-input = Peittävyys +pdfjs-editor-stamp-add-image-button = + .title = Lisää kuva +pdfjs-editor-stamp-add-image-button-label = Lisää kuva +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Paksuus +pdfjs-editor-free-highlight-thickness-title = + .title = Muuta paksuutta korostaessasi muita kohteita kuin tekstiä +pdfjs-free-text = + .aria-label = Tekstimuokkain +pdfjs-free-text-default-content = Aloita kirjoittaminen… +pdfjs-ink = + .aria-label = Piirrustusmuokkain +pdfjs-ink-canvas = + .aria-label = Käyttäjän luoma kuva + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Vaihtoehtoinen teksti +pdfjs-editor-alt-text-edit-button-label = Muokkaa vaihtoehtoista tekstiä +pdfjs-editor-alt-text-dialog-label = Valitse vaihtoehto +pdfjs-editor-alt-text-dialog-description = Vaihtoehtoinen teksti ("alt-teksti") auttaa ihmisiä, jotka eivät näe kuvaa tai kun kuva ei lataudu. +pdfjs-editor-alt-text-add-description-label = Lisää kuvaus +pdfjs-editor-alt-text-add-description-description = Pyri 1-2 lauseeseen, jotka kuvaavat aihetta, ympäristöä tai toimintaa. +pdfjs-editor-alt-text-mark-decorative-label = Merkitse koristeelliseksi +pdfjs-editor-alt-text-mark-decorative-description = Tätä käytetään koristekuville, kuten reunuksille tai vesileimoille. +pdfjs-editor-alt-text-cancel-button = Peruuta +pdfjs-editor-alt-text-save-button = Tallenna +pdfjs-editor-alt-text-decorative-tooltip = Merkitty koristeelliseksi +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Esimerkiksi "Nuori mies istuu pöytään syömään aterian" + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Vasen yläkulma - muuta kokoa +pdfjs-editor-resizer-label-top-middle = Ylhäällä keskellä - muuta kokoa +pdfjs-editor-resizer-label-top-right = Oikea yläkulma - muuta kokoa +pdfjs-editor-resizer-label-middle-right = Keskellä oikealla - muuta kokoa +pdfjs-editor-resizer-label-bottom-right = Oikea alakulma - muuta kokoa +pdfjs-editor-resizer-label-bottom-middle = Alhaalla keskellä - muuta kokoa +pdfjs-editor-resizer-label-bottom-left = Vasen alakulma - muuta kokoa +pdfjs-editor-resizer-label-middle-left = Keskellä vasemmalla - muuta kokoa + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Korostusväri +pdfjs-editor-colorpicker-button = + .title = Vaihda väri +pdfjs-editor-colorpicker-dropdown = + .aria-label = Värivalinnat +pdfjs-editor-colorpicker-yellow = + .title = Keltainen +pdfjs-editor-colorpicker-green = + .title = Vihreä +pdfjs-editor-colorpicker-blue = + .title = Sininen +pdfjs-editor-colorpicker-pink = + .title = Pinkki +pdfjs-editor-colorpicker-red = + .title = Punainen + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Näytä kaikki +pdfjs-editor-highlight-show-all-button = + .title = Näytä kaikki diff --git a/static/pdf.js/locale/fi/viewer.properties b/static/pdf.js/locale/fi/viewer.properties deleted file mode 100644 index e03e6a7c..00000000 --- a/static/pdf.js/locale/fi/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Edellinen sivu -previous_label=Edellinen -next.title=Seuraava sivu -next_label=Seuraava - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Sivu -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=/ {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} / {{pagesCount}}) - -zoom_out.title=Loitonna -zoom_out_label=Loitonna -zoom_in.title=Lähennä -zoom_in_label=Lähennä -zoom.title=Suurennus -presentation_mode.title=Siirry esitystilaan -presentation_mode_label=Esitystila -open_file.title=Avaa tiedosto -open_file_label=Avaa -print.title=Tulosta -print_label=Tulosta -save.title=Tallenna -save_label=Tallenna -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Lataa -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Lataa -bookmark1.title=Nykyinen sivu (Näytä URL-osoite nykyiseltä sivulta) -bookmark1_label=Nykyinen sivu -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Avaa sovelluksessa -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Avaa sovelluksessa - -# Secondary toolbar and context menu -tools.title=Tools -tools_label=Tools -first_page.title=Siirry ensimmäiselle sivulle -first_page_label=Siirry ensimmäiselle sivulle -last_page.title=Siirry viimeiselle sivulle -last_page_label=Siirry viimeiselle sivulle -page_rotate_cw.title=Kierrä oikealle -page_rotate_cw_label=Kierrä oikealle -page_rotate_ccw.title=Kierrä vasemmalle -page_rotate_ccw_label=Kierrä vasemmalle - -cursor_text_select_tool.title=Käytä tekstinvalintatyökalua -cursor_text_select_tool_label=Tekstinvalintatyökalu -cursor_hand_tool.title=Käytä käsityökalua -cursor_hand_tool_label=Käsityökalu - -scroll_page.title=Käytä sivun vieritystä -scroll_page_label=Sivun vieritys -scroll_vertical.title=Käytä pystysuuntaista vieritystä -scroll_vertical_label=Pystysuuntainen vieritys -scroll_horizontal.title=Käytä vaakasuuntaista vieritystä -scroll_horizontal_label=Vaakasuuntainen vieritys -scroll_wrapped.title=Käytä rivittyvää vieritystä -scroll_wrapped_label=Rivittyvä vieritys - -spread_none.title=Älä yhdistä sivuja aukeamiksi -spread_none_label=Ei aukeamia -spread_odd.title=Yhdistä sivut aukeamiksi alkaen parittomalta sivulta -spread_odd_label=Parittomalta alkavat aukeamat -spread_even.title=Yhdistä sivut aukeamiksi alkaen parilliselta sivulta -spread_even_label=Parilliselta alkavat aukeamat - -# Document properties dialog box -document_properties.title=Dokumentin ominaisuudet… -document_properties_label=Dokumentin ominaisuudet… -document_properties_file_name=Tiedoston nimi: -document_properties_file_size=Tiedoston koko: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} kt ({{size_b}} tavua) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} Mt ({{size_b}} tavua) -document_properties_title=Otsikko: -document_properties_author=Tekijä: -document_properties_subject=Aihe: -document_properties_keywords=Avainsanat: -document_properties_creation_date=Luomispäivämäärä: -document_properties_modification_date=Muokkauspäivämäärä: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Luoja: -document_properties_producer=PDF-tuottaja: -document_properties_version=PDF-versio: -document_properties_page_count=Sivujen määrä: -document_properties_page_size=Sivun koko: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=pysty -document_properties_page_size_orientation_landscape=vaaka -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Nopea web-katselu: -document_properties_linearized_yes=Kyllä -document_properties_linearized_no=Ei -document_properties_close=Sulje - -print_progress_message=Valmistellaan dokumenttia tulostamista varten… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}} % -print_progress_close=Peruuta - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Näytä/piilota sivupaneeli -toggle_sidebar_notification2.title=Näytä/piilota sivupaneeli (dokumentissa on sisällys/liitteitä/tasoja) -toggle_sidebar_label=Näytä/piilota sivupaneeli -document_outline.title=Näytä dokumentin sisällys (laajenna tai kutista kohdat kaksoisnapsauttamalla) -document_outline_label=Dokumentin sisällys -attachments.title=Näytä liitteet -attachments_label=Liitteet -layers.title=Näytä tasot (kaksoisnapsauta palauttaaksesi kaikki tasot oletustilaan) -layers_label=Tasot -thumbs.title=Näytä pienoiskuvat -thumbs_label=Pienoiskuvat -current_outline_item.title=Etsi nykyinen sisällyksen kohta -current_outline_item_label=Nykyinen sisällyksen kohta -findbar.title=Etsi dokumentista -findbar_label=Etsi - -additional_layers=Lisätasot -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Sivu {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Sivu {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Pienoiskuva sivusta {{page}} - -# Find panel button title and messages -find_input.title=Etsi -find_input.placeholder=Etsi dokumentista… -find_previous.title=Etsi hakusanan edellinen osuma -find_previous_label=Edellinen -find_next.title=Etsi hakusanan seuraava osuma -find_next_label=Seuraava -find_highlight=Korosta kaikki -find_match_case_label=Huomioi kirjainkoko -find_match_diacritics_label=Erota tarkkeet -find_entire_word_label=Kokonaiset sanat -find_reached_top=Päästiin dokumentin alkuun, jatketaan lopusta -find_reached_bottom=Päästiin dokumentin loppuun, jatketaan alusta -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} / {{total}} osuma -find_match_count[two]={{current}} / {{total}} osumaa -find_match_count[few]={{current}} / {{total}} osumaa -find_match_count[many]={{current}} / {{total}} osumaa -find_match_count[other]={{current}} / {{total}} osumaa -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Enemmän kuin {{limit}} osumaa -find_match_count_limit[one]=Enemmän kuin {{limit}} osuma -find_match_count_limit[two]=Enemmän kuin {{limit}} osumaa -find_match_count_limit[few]=Enemmän kuin {{limit}} osumaa -find_match_count_limit[many]=Enemmän kuin {{limit}} osumaa -find_match_count_limit[other]=Enemmän kuin {{limit}} osumaa -find_not_found=Hakusanaa ei löytynyt - -# Predefined zoom values -page_scale_width=Sivun leveys -page_scale_fit=Koko sivu -page_scale_auto=Automaattinen suurennus -page_scale_actual=Todellinen koko -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}} % - -# Loading indicator messages -loading_error=Tapahtui virhe ladattaessa PDF-tiedostoa. -invalid_file_error=Virheellinen tai vioittunut PDF-tiedosto. -missing_file_error=Puuttuva PDF-tiedosto. -unexpected_response_error=Odottamaton vastaus palvelimelta. -rendering_error=Tapahtui virhe piirrettäessä sivua. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}}-merkintä] -password_label=Kirjoita PDF-tiedoston salasana. -password_invalid=Virheellinen salasana. Yritä uudestaan. -password_ok=OK -password_cancel=Peruuta - -printing_not_supported=Varoitus: Selain ei tue kaikkia tulostustapoja. -printing_not_ready=Varoitus: PDF-tiedosto ei ole vielä latautunut kokonaan, eikä sitä voi vielä tulostaa. -web_fonts_disabled=Verkkosivujen omat kirjasinlajit on estetty: ei voida käyttää upotettuja PDF-kirjasinlajeja. - -# Editor -editor_free_text2.title=Teksti -editor_free_text2_label=Teksti -editor_ink2.title=Piirros -editor_ink2_label=Piirros - -editor_stamp.title=Lisää kuva -editor_stamp_label=Lisää kuva - -editor_stamp1.title=Lisää tai muokkaa kuvia -editor_stamp1_label=Lisää tai muokkaa kuvia - -free_text2_default_content=Aloita kirjoittaminen… - -# Editor Parameters -editor_free_text_color=Väri -editor_free_text_size=Koko -editor_ink_color=Väri -editor_ink_thickness=Paksuus -editor_ink_opacity=Peittävyys - -editor_stamp_add_image_label=Lisää kuva -editor_stamp_add_image.title=Lisää kuva - -# Editor aria -editor_free_text2_aria_label=Tekstimuokkain -editor_ink2_aria_label=Piirrustusmuokkain -editor_ink_canvas_aria_label=Käyttäjän luoma kuva diff --git a/static/pdf.js/locale/fr/viewer.ftl b/static/pdf.js/locale/fr/viewer.ftl new file mode 100644 index 00000000..54c06c22 --- /dev/null +++ b/static/pdf.js/locale/fr/viewer.ftl @@ -0,0 +1,398 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Page précédente +pdfjs-previous-button-label = Précédent +pdfjs-next-button = + .title = Page suivante +pdfjs-next-button-label = Suivant +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Page +# 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 = sur { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } sur { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zoom arrière +pdfjs-zoom-out-button-label = Zoom arrière +pdfjs-zoom-in-button = + .title = Zoom avant +pdfjs-zoom-in-button-label = Zoom avant +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Basculer en mode présentation +pdfjs-presentation-mode-button-label = Mode présentation +pdfjs-open-file-button = + .title = Ouvrir le fichier +pdfjs-open-file-button-label = Ouvrir le fichier +pdfjs-print-button = + .title = Imprimer +pdfjs-print-button-label = Imprimer +pdfjs-save-button = + .title = Enregistrer +pdfjs-save-button-label = Enregistrer +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Télécharger +# 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 = Télécharger +pdfjs-bookmark-button = + .title = Page courante (montrer l’adresse de la page courante) +pdfjs-bookmark-button-label = Page courante +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Ouvrir dans une application +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Ouvrir dans une application + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Outils +pdfjs-tools-button-label = Outils +pdfjs-first-page-button = + .title = Aller à la première page +pdfjs-first-page-button-label = Aller à la première page +pdfjs-last-page-button = + .title = Aller à la dernière page +pdfjs-last-page-button-label = Aller à la dernière page +pdfjs-page-rotate-cw-button = + .title = Rotation horaire +pdfjs-page-rotate-cw-button-label = Rotation horaire +pdfjs-page-rotate-ccw-button = + .title = Rotation antihoraire +pdfjs-page-rotate-ccw-button-label = Rotation antihoraire +pdfjs-cursor-text-select-tool-button = + .title = Activer l’outil de sélection de texte +pdfjs-cursor-text-select-tool-button-label = Outil de sélection de texte +pdfjs-cursor-hand-tool-button = + .title = Activer l’outil main +pdfjs-cursor-hand-tool-button-label = Outil main +pdfjs-scroll-page-button = + .title = Utiliser le défilement par page +pdfjs-scroll-page-button-label = Défilement par page +pdfjs-scroll-vertical-button = + .title = Utiliser le défilement vertical +pdfjs-scroll-vertical-button-label = Défilement vertical +pdfjs-scroll-horizontal-button = + .title = Utiliser le défilement horizontal +pdfjs-scroll-horizontal-button-label = Défilement horizontal +pdfjs-scroll-wrapped-button = + .title = Utiliser le défilement par bloc +pdfjs-scroll-wrapped-button-label = Défilement par bloc +pdfjs-spread-none-button = + .title = Ne pas afficher les pages deux à deux +pdfjs-spread-none-button-label = Pas de double affichage +pdfjs-spread-odd-button = + .title = Afficher les pages par deux, impaires à gauche +pdfjs-spread-odd-button-label = Doubles pages, impaires à gauche +pdfjs-spread-even-button = + .title = Afficher les pages par deux, paires à gauche +pdfjs-spread-even-button-label = Doubles pages, paires à gauche + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Propriétés du document… +pdfjs-document-properties-button-label = Propriétés du document… +pdfjs-document-properties-file-name = Nom du fichier : +pdfjs-document-properties-file-size = Taille du fichier : +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } Ko ({ $size_b } octets) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } Mo ({ $size_b } octets) +pdfjs-document-properties-title = Titre : +pdfjs-document-properties-author = Auteur : +pdfjs-document-properties-subject = Sujet : +pdfjs-document-properties-keywords = Mots-clés : +pdfjs-document-properties-creation-date = Date de création : +pdfjs-document-properties-modification-date = Modifié le : +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date } à { $time } +pdfjs-document-properties-creator = Créé par : +pdfjs-document-properties-producer = Outil de conversion PDF : +pdfjs-document-properties-version = Version PDF : +pdfjs-document-properties-page-count = Nombre de pages : +pdfjs-document-properties-page-size = Taille de la page : +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = portrait +pdfjs-document-properties-page-size-orientation-landscape = paysage +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 = lettre +pdfjs-document-properties-page-size-name-legal = document juridique + +## 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 = Affichage rapide des pages web : +pdfjs-document-properties-linearized-yes = Oui +pdfjs-document-properties-linearized-no = Non +pdfjs-document-properties-close-button = Fermer + +## Print + +pdfjs-print-progress-message = Préparation du document pour l’impression… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress } % +pdfjs-print-progress-close-button = Annuler +pdfjs-printing-not-supported = Attention : l’impression n’est pas totalement prise en charge par ce navigateur. +pdfjs-printing-not-ready = Attention : le PDF n’est pas entièrement chargé pour pouvoir l’imprimer. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Afficher/Masquer le panneau latéral +pdfjs-toggle-sidebar-notification-button = + .title = Afficher/Masquer le panneau latéral (le document contient des signets/pièces jointes/calques) +pdfjs-toggle-sidebar-button-label = Afficher/Masquer le panneau latéral +pdfjs-document-outline-button = + .title = Afficher les signets du document (double-cliquer pour développer/réduire tous les éléments) +pdfjs-document-outline-button-label = Signets du document +pdfjs-attachments-button = + .title = Afficher les pièces jointes +pdfjs-attachments-button-label = Pièces jointes +pdfjs-layers-button = + .title = Afficher les calques (double-cliquer pour réinitialiser tous les calques à l’état par défaut) +pdfjs-layers-button-label = Calques +pdfjs-thumbs-button = + .title = Afficher les vignettes +pdfjs-thumbs-button-label = Vignettes +pdfjs-current-outline-item-button = + .title = Trouver l’élément de plan actuel +pdfjs-current-outline-item-button-label = Élément de plan actuel +pdfjs-findbar-button = + .title = Rechercher dans le document +pdfjs-findbar-button-label = Rechercher +pdfjs-additional-layers = Calques additionnels + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Page { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Vignette de la page { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Rechercher + .placeholder = Rechercher dans le document… +pdfjs-find-previous-button = + .title = Trouver l’occurrence précédente de l’expression +pdfjs-find-previous-button-label = Précédent +pdfjs-find-next-button = + .title = Trouver la prochaine occurrence de l’expression +pdfjs-find-next-button-label = Suivant +pdfjs-find-highlight-checkbox = Tout surligner +pdfjs-find-match-case-checkbox-label = Respecter la casse +pdfjs-find-match-diacritics-checkbox-label = Respecter les accents et diacritiques +pdfjs-find-entire-word-checkbox-label = Mots entiers +pdfjs-find-reached-top = Haut de la page atteint, poursuite depuis la fin +pdfjs-find-reached-bottom = Bas de la page atteint, poursuite au début +# 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 = Occurrence { $current } sur { $total } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Plus d’{ $limit } occurrence + *[other] Plus de { $limit } occurrences + } +pdfjs-find-not-found = Expression non trouvée + +## Predefined zoom values + +pdfjs-page-scale-width = Pleine largeur +pdfjs-page-scale-fit = Page entière +pdfjs-page-scale-auto = Zoom automatique +pdfjs-page-scale-actual = Taille réelle +# 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 { $page } + +## Loading indicator messages + +pdfjs-loading-error = Une erreur s’est produite lors du chargement du fichier PDF. +pdfjs-invalid-file-error = Fichier PDF invalide ou corrompu. +pdfjs-missing-file-error = Fichier PDF manquant. +pdfjs-unexpected-response-error = Réponse inattendue du serveur. +pdfjs-rendering-error = Une erreur s’est produite lors de l’affichage de la page. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date } à { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Annotation { $type }] + +## Password + +pdfjs-password-label = Veuillez saisir le mot de passe pour ouvrir ce fichier PDF. +pdfjs-password-invalid = Mot de passe incorrect. Veuillez réessayer. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Annuler +pdfjs-web-fonts-disabled = Les polices web sont désactivées : impossible d’utiliser les polices intégrées au PDF. + +## Editing + +pdfjs-editor-free-text-button = + .title = Texte +pdfjs-editor-free-text-button-label = Texte +pdfjs-editor-ink-button = + .title = Dessiner +pdfjs-editor-ink-button-label = Dessiner +pdfjs-editor-stamp-button = + .title = Ajouter ou modifier des images +pdfjs-editor-stamp-button-label = Ajouter ou modifier des images +pdfjs-editor-highlight-button = + .title = Surligner +pdfjs-editor-highlight-button-label = Surligner +pdfjs-highlight-floating-button = + .title = Surligner +pdfjs-highlight-floating-button1 = + .title = Surligner + .aria-label = Surligner +pdfjs-highlight-floating-button-label = Surligner + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Supprimer le dessin +pdfjs-editor-remove-freetext-button = + .title = Supprimer le texte +pdfjs-editor-remove-stamp-button = + .title = Supprimer l’image +pdfjs-editor-remove-highlight-button = + .title = Supprimer le surlignage + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Couleur +pdfjs-editor-free-text-size-input = Taille +pdfjs-editor-ink-color-input = Couleur +pdfjs-editor-ink-thickness-input = Épaisseur +pdfjs-editor-ink-opacity-input = Opacité +pdfjs-editor-stamp-add-image-button = + .title = Ajouter une image +pdfjs-editor-stamp-add-image-button-label = Ajouter une image +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Épaisseur +pdfjs-editor-free-highlight-thickness-title = + .title = Modifier l’épaisseur pour le surlignage d’éléments non textuels +pdfjs-free-text = + .aria-label = Éditeur de texte +pdfjs-free-text-default-content = Commencer à écrire… +pdfjs-ink = + .aria-label = Éditeur de dessin +pdfjs-ink-canvas = + .aria-label = Image créée par l’utilisateur·trice + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Texte alternatif +pdfjs-editor-alt-text-edit-button-label = Modifier le texte alternatif +pdfjs-editor-alt-text-dialog-label = Sélectionnez une option +pdfjs-editor-alt-text-dialog-description = Le texte alternatif est utile lorsque des personnes ne peuvent pas voir l’image ou que l’image ne se charge pas. +pdfjs-editor-alt-text-add-description-label = Ajouter une description +pdfjs-editor-alt-text-add-description-description = Il est conseillé de rédiger une ou deux phrases décrivant le sujet, le cadre ou les actions. +pdfjs-editor-alt-text-mark-decorative-label = Marquer comme décorative +pdfjs-editor-alt-text-mark-decorative-description = Cette option est utilisée pour les images décoratives, comme les bordures ou les filigranes. +pdfjs-editor-alt-text-cancel-button = Annuler +pdfjs-editor-alt-text-save-button = Enregistrer +pdfjs-editor-alt-text-decorative-tooltip = Marquée comme décorative +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Par exemple, « Un jeune homme est assis à une table pour prendre un repas » + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Coin supérieur gauche — redimensionner +pdfjs-editor-resizer-label-top-middle = Milieu haut — redimensionner +pdfjs-editor-resizer-label-top-right = Coin supérieur droit — redimensionner +pdfjs-editor-resizer-label-middle-right = Milieu droit — redimensionner +pdfjs-editor-resizer-label-bottom-right = Coin inférieur droit — redimensionner +pdfjs-editor-resizer-label-bottom-middle = Centre bas — redimensionner +pdfjs-editor-resizer-label-bottom-left = Coin inférieur gauche — redimensionner +pdfjs-editor-resizer-label-middle-left = Milieu gauche — redimensionner + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Couleur de surlignage +pdfjs-editor-colorpicker-button = + .title = Changer de couleur +pdfjs-editor-colorpicker-dropdown = + .aria-label = Choix de couleurs +pdfjs-editor-colorpicker-yellow = + .title = Jaune +pdfjs-editor-colorpicker-green = + .title = Vert +pdfjs-editor-colorpicker-blue = + .title = Bleu +pdfjs-editor-colorpicker-pink = + .title = Rose +pdfjs-editor-colorpicker-red = + .title = Rouge + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Tout afficher +pdfjs-editor-highlight-show-all-button = + .title = Tout afficher diff --git a/static/pdf.js/locale/fr/viewer.properties b/static/pdf.js/locale/fr/viewer.properties deleted file mode 100644 index 70146b92..00000000 --- a/static/pdf.js/locale/fr/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Page précédente -previous_label=Précédent -next.title=Page suivante -next_label=Suivant - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Page -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=sur {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} sur {{pagesCount}}) - -zoom_out.title=Zoom arrière -zoom_out_label=Zoom arrière -zoom_in.title=Zoom avant -zoom_in_label=Zoom avant -zoom.title=Zoom -presentation_mode.title=Basculer en mode présentation -presentation_mode_label=Mode présentation -open_file.title=Ouvrir le fichier -open_file_label=Ouvrir le fichier -print.title=Imprimer -print_label=Imprimer -save.title=Enregistrer -save_label=Enregistrer -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Télécharger -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Télécharger -bookmark1.title=Page courante (montrer l’adresse de la page courante) -bookmark1_label=Page courante -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Ouvrir dans une application -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Ouvrir dans une application - -# Secondary toolbar and context menu -tools.title=Outils -tools_label=Outils -first_page.title=Aller à la première page -first_page_label=Aller à la première page -last_page.title=Aller à la dernière page -last_page_label=Aller à la dernière page -page_rotate_cw.title=Rotation horaire -page_rotate_cw_label=Rotation horaire -page_rotate_ccw.title=Rotation antihoraire -page_rotate_ccw_label=Rotation antihoraire - -cursor_text_select_tool.title=Activer l’outil de sélection de texte -cursor_text_select_tool_label=Outil de sélection de texte -cursor_hand_tool.title=Activer l’outil main -cursor_hand_tool_label=Outil main - -scroll_page.title=Utiliser le défilement par page -scroll_page_label=Défilement par page -scroll_vertical.title=Utiliser le défilement vertical -scroll_vertical_label=Défilement vertical -scroll_horizontal.title=Utiliser le défilement horizontal -scroll_horizontal_label=Défilement horizontal -scroll_wrapped.title=Utiliser le défilement par bloc -scroll_wrapped_label=Défilement par bloc - -spread_none.title=Ne pas afficher les pages deux à deux -spread_none_label=Pas de double affichage -spread_odd.title=Afficher les pages par deux, impaires à gauche -spread_odd_label=Doubles pages, impaires à gauche -spread_even.title=Afficher les pages par deux, paires à gauche -spread_even_label=Doubles pages, paires à gauche - -# Document properties dialog box -document_properties.title=Propriétés du document… -document_properties_label=Propriétés du document… -document_properties_file_name=Nom du fichier : -document_properties_file_size=Taille du fichier : -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} Ko ({{size_b}} octets) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} Mo ({{size_b}} octets) -document_properties_title=Titre : -document_properties_author=Auteur : -document_properties_subject=Sujet : -document_properties_keywords=Mots-clés : -document_properties_creation_date=Date de création : -document_properties_modification_date=Modifié le : -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}} à {{time}} -document_properties_creator=Créé par : -document_properties_producer=Outil de conversion PDF : -document_properties_version=Version PDF : -document_properties_page_count=Nombre de pages : -document_properties_page_size=Taille de la page : -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=portrait -document_properties_page_size_orientation_landscape=paysage -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=lettre -document_properties_page_size_name_legal=document juridique -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Affichage rapide des pages web : -document_properties_linearized_yes=Oui -document_properties_linearized_no=Non -document_properties_close=Fermer - -print_progress_message=Préparation du document pour l’impression… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}} % -print_progress_close=Annuler - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Afficher/Masquer le panneau latéral -toggle_sidebar_notification2.title=Afficher/Masquer le panneau latéral (le document contient des signets/pièces jointes/calques) -toggle_sidebar_label=Afficher/Masquer le panneau latéral -document_outline.title=Afficher les signets du document (double-cliquer pour développer/réduire tous les éléments) -document_outline_label=Signets du document -attachments.title=Afficher les pièces jointes -attachments_label=Pièces jointes -layers.title=Afficher les calques (double-cliquer pour réinitialiser tous les calques à l’état par défaut) -layers_label=Calques -thumbs.title=Afficher les vignettes -thumbs_label=Vignettes -current_outline_item.title=Trouver l’élément de plan actuel -current_outline_item_label=Élément de plan actuel -findbar.title=Rechercher dans le document -findbar_label=Rechercher - -additional_layers=Calques additionnels -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Page {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Page {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Vignette de la page {{page}} - -# Find panel button title and messages -find_input.title=Rechercher -find_input.placeholder=Rechercher dans le document… -find_previous.title=Trouver l’occurrence précédente de l’expression -find_previous_label=Précédent -find_next.title=Trouver la prochaine occurrence de l’expression -find_next_label=Suivant -find_highlight=Tout surligner -find_match_case_label=Respecter la casse -find_match_diacritics_label=Respecter les accents et diacritiques -find_entire_word_label=Mots entiers -find_reached_top=Haut de la page atteint, poursuite depuis la fin -find_reached_bottom=Bas de la page atteint, poursuite au début -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]=Occurrence {{current}} sur {{total}} -find_match_count[two]=Occurrence {{current}} sur {{total}} -find_match_count[few]=Occurrence {{current}} sur {{total}} -find_match_count[many]=Occurrence {{current}} sur {{total}} -find_match_count[other]=Occurrence {{current}} sur {{total}} -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Plus de {{limit}} correspondances -find_match_count_limit[one]=Plus de {{limit}} correspondance -find_match_count_limit[two]=Plus de {{limit}} correspondances -find_match_count_limit[few]=Plus de {{limit}} correspondances -find_match_count_limit[many]=Plus de {{limit}} correspondances -find_match_count_limit[other]=Plus de {{limit}} correspondances -find_not_found=Expression non trouvée - -# Predefined zoom values -page_scale_width=Pleine largeur -page_scale_fit=Page entière -page_scale_auto=Zoom automatique -page_scale_actual=Taille réelle -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}} % - -# Loading indicator messages -loading_error=Une erreur s’est produite lors du chargement du fichier PDF. -invalid_file_error=Fichier PDF invalide ou corrompu. -missing_file_error=Fichier PDF manquant. -unexpected_response_error=Réponse inattendue du serveur. -rendering_error=Une erreur s’est produite lors de l’affichage de la page. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}} à {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Annotation {{type}}] -password_label=Veuillez saisir le mot de passe pour ouvrir ce fichier PDF. -password_invalid=Mot de passe incorrect. Veuillez réessayer. -password_ok=OK -password_cancel=Annuler - -printing_not_supported=Attention : l’impression n’est pas totalement prise en charge par ce navigateur. -printing_not_ready=Attention : le PDF n’est pas entièrement chargé pour pouvoir l’imprimer. -web_fonts_disabled=Les polices web sont désactivées : impossible d’utiliser les polices intégrées au PDF. - -# Editor -editor_free_text2.title=Texte -editor_free_text2_label=Texte -editor_ink2.title=Dessiner -editor_ink2_label=Dessiner - -editor_stamp.title=Ajouter une image -editor_stamp_label=Ajouter une image - -editor_stamp1.title=Ajouter ou modifier des images -editor_stamp1_label=Ajouter ou modifier des images - -free_text2_default_content=Commencer à écrire… - -# Editor Parameters -editor_free_text_color=Couleur -editor_free_text_size=Taille -editor_ink_color=Couleur -editor_ink_thickness=Épaisseur -editor_ink_opacity=Opacité - -editor_stamp_add_image_label=Ajouter une image -editor_stamp_add_image.title=Ajouter une image - -# Editor aria -editor_free_text2_aria_label=Éditeur de texte -editor_ink2_aria_label=Éditeur de dessin -editor_ink_canvas_aria_label=Image créée par l’utilisateur·trice diff --git a/static/pdf.js/locale/fur/viewer.ftl b/static/pdf.js/locale/fur/viewer.ftl new file mode 100644 index 00000000..8e8c8a01 --- /dev/null +++ b/static/pdf.js/locale/fur/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Pagjine precedente +pdfjs-previous-button-label = Indaûr +pdfjs-next-button = + .title = Prossime pagjine +pdfjs-next-button-label = Indevant +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Pagjine +# 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 = di { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } di { $pagesCount }) +pdfjs-zoom-out-button = + .title = Impiçulìs +pdfjs-zoom-out-button-label = Impiçulìs +pdfjs-zoom-in-button = + .title = Ingrandìs +pdfjs-zoom-in-button-label = Ingrandìs +pdfjs-zoom-select = + .title = Ingrandiment +pdfjs-presentation-mode-button = + .title = Passe ae modalitât presentazion +pdfjs-presentation-mode-button-label = Modalitât presentazion +pdfjs-open-file-button = + .title = Vierç un file +pdfjs-open-file-button-label = Vierç +pdfjs-print-button = + .title = Stampe +pdfjs-print-button-label = Stampe +pdfjs-save-button = + .title = Salve +pdfjs-save-button-label = Salve +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Discjame +# 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 = Discjame +pdfjs-bookmark-button = + .title = Pagjine corinte (mostre URL de pagjine atuâl) +pdfjs-bookmark-button-label = Pagjine corinte +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Vierç te aplicazion +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Vierç te aplicazion + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Struments +pdfjs-tools-button-label = Struments +pdfjs-first-page-button = + .title = Va ae prime pagjine +pdfjs-first-page-button-label = Va ae prime pagjine +pdfjs-last-page-button = + .title = Va ae ultime pagjine +pdfjs-last-page-button-label = Va ae ultime pagjine +pdfjs-page-rotate-cw-button = + .title = Zire in sens orari +pdfjs-page-rotate-cw-button-label = Zire in sens orari +pdfjs-page-rotate-ccw-button = + .title = Zire in sens antiorari +pdfjs-page-rotate-ccw-button-label = Zire in sens antiorari +pdfjs-cursor-text-select-tool-button = + .title = Ative il strument di selezion dal test +pdfjs-cursor-text-select-tool-button-label = Strument di selezion dal test +pdfjs-cursor-hand-tool-button = + .title = Ative il strument manute +pdfjs-cursor-hand-tool-button-label = Strument manute +pdfjs-scroll-page-button = + .title = Dopre il scoriment des pagjinis +pdfjs-scroll-page-button-label = Scoriment pagjinis +pdfjs-scroll-vertical-button = + .title = Dopre scoriment verticâl +pdfjs-scroll-vertical-button-label = Scoriment verticâl +pdfjs-scroll-horizontal-button = + .title = Dopre scoriment orizontâl +pdfjs-scroll-horizontal-button-label = Scoriment orizontâl +pdfjs-scroll-wrapped-button = + .title = Dopre scoriment par blocs +pdfjs-scroll-wrapped-button-label = Scoriment par blocs +pdfjs-spread-none-button = + .title = No sta meti dongje pagjinis in cubie +pdfjs-spread-none-button-label = No cubiis di pagjinis +pdfjs-spread-odd-button = + .title = Met dongje cubiis di pagjinis scomençant des pagjinis dispar +pdfjs-spread-odd-button-label = Cubiis di pagjinis, dispar a çampe +pdfjs-spread-even-button = + .title = Met dongje cubiis di pagjinis scomençant des pagjinis pâr +pdfjs-spread-even-button-label = Cubiis di pagjinis, pâr a çampe + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Proprietâts dal document… +pdfjs-document-properties-button-label = Proprietâts dal document… +pdfjs-document-properties-file-name = Non dal file: +pdfjs-document-properties-file-size = Dimension dal file: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Titul: +pdfjs-document-properties-author = Autôr: +pdfjs-document-properties-subject = Ogjet: +pdfjs-document-properties-keywords = Peraulis clâf: +pdfjs-document-properties-creation-date = Date di creazion: +pdfjs-document-properties-modification-date = Date di modifiche: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Creatôr +pdfjs-document-properties-producer = Gjeneradôr PDF: +pdfjs-document-properties-version = Version PDF: +pdfjs-document-properties-page-count = Numar di pagjinis: +pdfjs-document-properties-page-size = Dimension de pagjine: +pdfjs-document-properties-page-size-unit-inches = oncis +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = verticâl +pdfjs-document-properties-page-size-orientation-landscape = orizontâl +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 = Letare +pdfjs-document-properties-page-size-name-legal = Legâl + +## 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 = Visualizazion web svelte: +pdfjs-document-properties-linearized-yes = Sì +pdfjs-document-properties-linearized-no = No +pdfjs-document-properties-close-button = Siere + +## Print + +pdfjs-print-progress-message = Daûr a prontâ il document pe stampe… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Anule +pdfjs-printing-not-supported = Atenzion: la stampe no je supuartade ad implen di chest navigadôr. +pdfjs-printing-not-ready = Atenzion: il PDF nol è stât cjamât dal dut pe stampe. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Ative/Disative sbare laterâl +pdfjs-toggle-sidebar-notification-button = + .title = Ative/Disative sbare laterâl (il document al conten struture/zontis/strâts) +pdfjs-toggle-sidebar-button-label = Ative/Disative sbare laterâl +pdfjs-document-outline-button = + .title = Mostre la struture dal document (dopli clic par slargjâ/strenzi ducj i elements) +pdfjs-document-outline-button-label = Struture dal document +pdfjs-attachments-button = + .title = Mostre lis zontis +pdfjs-attachments-button-label = Zontis +pdfjs-layers-button = + .title = Mostre i strâts (dopli clic par ristabilî ducj i strâts al stât predefinît) +pdfjs-layers-button-label = Strâts +pdfjs-thumbs-button = + .title = Mostre miniaturis +pdfjs-thumbs-button-label = Miniaturis +pdfjs-current-outline-item-button = + .title = Cjate l'element de struture atuâl +pdfjs-current-outline-item-button-label = Element de struture atuâl +pdfjs-findbar-button = + .title = Cjate tal document +pdfjs-findbar-button-label = Cjate +pdfjs-additional-layers = Strâts adizionâi + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Pagjine { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniature de pagjine { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Cjate + .placeholder = Cjate tal document… +pdfjs-find-previous-button = + .title = Cjate il câs precedent dal test +pdfjs-find-previous-button-label = Precedent +pdfjs-find-next-button = + .title = Cjate il câs sucessîf dal test +pdfjs-find-next-button-label = Sucessîf +pdfjs-find-highlight-checkbox = Evidenzie dut +pdfjs-find-match-case-checkbox-label = Fâs distinzion tra maiusculis e minusculis +pdfjs-find-match-diacritics-checkbox-label = Corispondence diacritiche +pdfjs-find-entire-word-checkbox-label = Peraulis interiis +pdfjs-find-reached-top = Si è rivâts al inizi dal document e si à continuât de fin +pdfjs-find-reached-bottom = Si è rivât ae fin dal document e si à continuât dal inizi +# 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 } di { $total } corispondence + *[other] { $current } di { $total } corispondencis + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Plui di { $limit } corispondence + *[other] Plui di { $limit } corispondencis + } +pdfjs-find-not-found = Test no cjatât + +## Predefined zoom values + +pdfjs-page-scale-width = Largjece de pagjine +pdfjs-page-scale-fit = Pagjine interie +pdfjs-page-scale-auto = Ingrandiment automatic +pdfjs-page-scale-actual = Dimension reâl +# 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 = Pagjine { $page } + +## Loading indicator messages + +pdfjs-loading-error = Al è vignût fûr un erôr intant che si cjariave il PDF. +pdfjs-invalid-file-error = File PDF no valit o ruvinât. +pdfjs-missing-file-error = Al mancje il file PDF. +pdfjs-unexpected-response-error = Rispueste dal servidôr inspietade. +pdfjs-rendering-error = Al è vignût fûr un erôr tal realizâ la visualizazion de pagjine. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Anotazion { $type }] + +## Password + +pdfjs-password-label = Inserìs la password par vierzi chest file PDF. +pdfjs-password-invalid = Password no valide. Par plasê torne prove. +pdfjs-password-ok-button = Va ben +pdfjs-password-cancel-button = Anule +pdfjs-web-fonts-disabled = I caratars dal Web a son disativâts: Impussibil doprâ i caratars PDF incorporâts. + +## Editing + +pdfjs-editor-free-text-button = + .title = Test +pdfjs-editor-free-text-button-label = Test +pdfjs-editor-ink-button = + .title = Dissen +pdfjs-editor-ink-button-label = Dissen +pdfjs-editor-stamp-button = + .title = Zonte o modifiche imagjins +pdfjs-editor-stamp-button-label = Zonte o modifiche imagjins +pdfjs-editor-highlight-button = + .title = Evidenzie +pdfjs-editor-highlight-button-label = Evidenzie +pdfjs-highlight-floating-button = + .title = Evidenzie +pdfjs-highlight-floating-button1 = + .title = Evidenzie + .aria-label = Evidenzie +pdfjs-highlight-floating-button-label = Evidenzie + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Gjave dissen +pdfjs-editor-remove-freetext-button = + .title = Gjave test +pdfjs-editor-remove-stamp-button = + .title = Gjave imagjin +pdfjs-editor-remove-highlight-button = + .title = Gjave evidenziazion + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Colôr +pdfjs-editor-free-text-size-input = Dimension +pdfjs-editor-ink-color-input = Colôr +pdfjs-editor-ink-thickness-input = Spessôr +pdfjs-editor-ink-opacity-input = Opacitât +pdfjs-editor-stamp-add-image-button = + .title = Zonte imagjin +pdfjs-editor-stamp-add-image-button-label = Zonte imagjin +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Spessôr +pdfjs-editor-free-highlight-thickness-title = + .title = Modifiche il spessôr de selezion pai elements che no son testuâi +pdfjs-free-text = + .aria-label = Editôr di test +pdfjs-free-text-default-content = Scomence a scrivi… +pdfjs-ink = + .aria-label = Editôr dissens +pdfjs-ink-canvas = + .aria-label = Imagjin creade dal utent + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Test alternatîf +pdfjs-editor-alt-text-edit-button-label = Modifiche test alternatîf +pdfjs-editor-alt-text-dialog-label = Sielç une opzion +pdfjs-editor-alt-text-dialog-description = Il test alternatîf (“alt text”) al jude cuant che lis personis no puedin viodi la imagjin o cuant che la imagjine no ven cjariade. +pdfjs-editor-alt-text-add-description-label = Zonte une descrizion +pdfjs-editor-alt-text-add-description-description = Ponte a une o dôs frasis che a descrivin l’argoment, la ambientazion o lis azions. +pdfjs-editor-alt-text-mark-decorative-label = Segne come decorative +pdfjs-editor-alt-text-mark-decorative-description = Chest al ven doprât pes imagjins ornamentâls, come i ôrs o lis filigranis. +pdfjs-editor-alt-text-cancel-button = Anule +pdfjs-editor-alt-text-save-button = Salve +pdfjs-editor-alt-text-decorative-tooltip = Segnade come decorative +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Par esempli, “Un zovin si sente a taule par mangjâ” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Cjanton in alt a çampe — ridimensione +pdfjs-editor-resizer-label-top-middle = Bande superiôr tal mieç — ridimensione +pdfjs-editor-resizer-label-top-right = Cjanton in alt a diestre — ridimensione +pdfjs-editor-resizer-label-middle-right = Bande diestre tal mieç — ridimensione +pdfjs-editor-resizer-label-bottom-right = Cjanton in bas a diestre — ridimensione +pdfjs-editor-resizer-label-bottom-middle = Bande inferiôr tal mieç — ridimensione +pdfjs-editor-resizer-label-bottom-left = Cjanton in bas a çampe — ridimensione +pdfjs-editor-resizer-label-middle-left = Bande di çampe tal mieç — ridimensione + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Colôr par evidenziâ +pdfjs-editor-colorpicker-button = + .title = Cambie colôr +pdfjs-editor-colorpicker-dropdown = + .aria-label = Sieltis di colôr +pdfjs-editor-colorpicker-yellow = + .title = Zâl +pdfjs-editor-colorpicker-green = + .title = Vert +pdfjs-editor-colorpicker-blue = + .title = Blu +pdfjs-editor-colorpicker-pink = + .title = Rose +pdfjs-editor-colorpicker-red = + .title = Ros + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Mostre dut +pdfjs-editor-highlight-show-all-button = + .title = Mostre dut diff --git a/static/pdf.js/locale/fur/viewer.properties b/static/pdf.js/locale/fur/viewer.properties deleted file mode 100644 index 9bc87cd5..00000000 --- a/static/pdf.js/locale/fur/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Pagjine precedente -previous_label=Indaûr -next.title=Prossime pagjine -next_label=Indevant - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Pagjine -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=di {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} di {{pagesCount}}) - -zoom_out.title=Impiçulìs -zoom_out_label=Impiçulìs -zoom_in.title=Ingrandìs -zoom_in_label=Ingrandìs -zoom.title=Ingrandiment -presentation_mode.title=Passe ae modalitât presentazion -presentation_mode_label=Modalitât presentazion -open_file.title=Vierç un file -open_file_label=Vierç -print.title=Stampe -print_label=Stampe -save.title=Salve -save_label=Salve -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Discjame -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Discjame -bookmark1.title=Pagjine corinte (mostre URL de pagjine atuâl) -bookmark1_label=Pagjine corinte -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Vierç te aplicazion -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Vierç te aplicazion - -# Secondary toolbar and context menu -tools.title=Struments -tools_label=Struments -first_page.title=Va ae prime pagjine -first_page_label=Va ae prime pagjine -last_page.title=Va ae ultime pagjine -last_page_label=Va ae ultime pagjine -page_rotate_cw.title=Zire in sens orari -page_rotate_cw_label=Zire in sens orari -page_rotate_ccw.title=Zire in sens antiorari -page_rotate_ccw_label=Zire in sens antiorari - -cursor_text_select_tool.title=Ative il strument di selezion dal test -cursor_text_select_tool_label=Strument di selezion dal test -cursor_hand_tool.title=Ative il strument manute -cursor_hand_tool_label=Strument manute - -scroll_page.title=Dopre il scoriment des pagjinis -scroll_page_label=Scoriment pagjinis -scroll_vertical.title=Dopre scoriment verticâl -scroll_vertical_label=Scoriment verticâl -scroll_horizontal.title=Dopre scoriment orizontâl -scroll_horizontal_label=Scoriment orizontâl -scroll_wrapped.title=Dopre scoriment par blocs -scroll_wrapped_label=Scoriment par blocs - -spread_none.title=No sta meti dongje pagjinis in cubie -spread_none_label=No cubiis di pagjinis -spread_odd.title=Met dongje cubiis di pagjinis scomençant des pagjinis dispar -spread_odd_label=Cubiis di pagjinis, dispar a çampe -spread_even.title=Met dongje cubiis di pagjinis scomençant des pagjinis pâr -spread_even_label=Cubiis di pagjinis, pâr a çampe - -# Document properties dialog box -document_properties.title=Proprietâts dal document… -document_properties_label=Proprietâts dal document… -document_properties_file_name=Non dal file: -document_properties_file_size=Dimension dal file: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Titul: -document_properties_author=Autôr: -document_properties_subject=Ogjet: -document_properties_keywords=Peraulis clâf: -document_properties_creation_date=Date di creazion: -document_properties_modification_date=Date di modifiche: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Creatôr -document_properties_producer=Gjeneradôr PDF: -document_properties_version=Version PDF: -document_properties_page_count=Numar di pagjinis: -document_properties_page_size=Dimension de pagjine: -document_properties_page_size_unit_inches=oncis -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=verticâl -document_properties_page_size_orientation_landscape=orizontâl -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letare -document_properties_page_size_name_legal=Legâl -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Visualizazion web svelte: -document_properties_linearized_yes=Sì -document_properties_linearized_no=No -document_properties_close=Siere - -print_progress_message=Daûr a prontâ il document pe stampe… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Anule - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Ative/Disative sbare laterâl -toggle_sidebar_notification2.title=Ative/Disative sbare laterâl (il document al conten struture/zontis/strâts) -toggle_sidebar_label=Ative/Disative sbare laterâl -document_outline.title=Mostre la struture dal document (dopli clic par slargjâ/strenzi ducj i elements) -document_outline_label=Struture dal document -attachments.title=Mostre lis zontis -attachments_label=Zontis -layers.title=Mostre i strâts (dopli clic par ristabilî ducj i strâts al stât predefinît) -layers_label=Strâts -thumbs.title=Mostre miniaturis -thumbs_label=Miniaturis -current_outline_item.title=Cjate l'element de struture atuâl -current_outline_item_label=Element de struture atuâl -findbar.title=Cjate tal document -findbar_label=Cjate - -additional_layers=Strâts adizionâi -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Pagjine {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Pagjine {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniature de pagjine {{page}} - -# Find panel button title and messages -find_input.title=Cjate -find_input.placeholder=Cjate tal document… -find_previous.title=Cjate il câs precedent dal test -find_previous_label=Precedent -find_next.title=Cjate il câs sucessîf dal test -find_next_label=Sucessîf -find_highlight=Evidenzie dut -find_match_case_label=Fâs distinzion tra maiusculis e minusculis -find_match_diacritics_label=Corispondence diacritiche -find_entire_word_label=Peraulis interiis -find_reached_top=Si è rivâts al inizi dal document e si à continuât de fin -find_reached_bottom=Si è rivât ae fin dal document e si à continuât dal inizi -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} di {{total}} corispondence -find_match_count[two]={{current}} di {{total}} corispondencis -find_match_count[few]={{current}} di {{total}} corispondencis -find_match_count[many]={{current}} di {{total}} corispondencis -find_match_count[other]={{current}} di {{total}} corispondencis -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Plui di {{limit}} corispondencis -find_match_count_limit[one]=Plui di {{limit}} corispondence -find_match_count_limit[two]=Plui di {{limit}} corispondencis -find_match_count_limit[few]=Plui di {{limit}} corispondencis -find_match_count_limit[many]=Plui di {{limit}} corispondencis -find_match_count_limit[other]=Plui di {{limit}} corispondencis -find_not_found=Test no cjatât - -# Predefined zoom values -page_scale_width=Largjece de pagjine -page_scale_fit=Pagjine interie -page_scale_auto=Ingrandiment automatic -page_scale_actual=Dimension reâl -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Al è vignût fûr un erôr intant che si cjariave il PDF. -invalid_file_error=File PDF no valit o ruvinât. -missing_file_error=Al mancje il file PDF. -unexpected_response_error=Rispueste dal servidôr inspietade. -rendering_error=Al è vignût fûr un erôr tal realizâ la visualizazion de pagjine. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Anotazion {{type}}] -password_label=Inserìs la password par vierzi chest file PDF. -password_invalid=Password no valide. Par plasê torne prove. -password_ok=Va ben -password_cancel=Anule - -printing_not_supported=Atenzion: la stampe no je supuartade ad implen di chest navigadôr. -printing_not_ready=Atenzion: il PDF nol è stât cjamât dal dut pe stampe. -web_fonts_disabled=I caratars dal Web a son disativâts: Impussibil doprâ i caratars PDF incorporâts. - -# Editor -editor_free_text2.title=Test -editor_free_text2_label=Test -editor_ink2.title=Dissen -editor_ink2_label=Dissen - -editor_stamp.title=Zonte une imagjin -editor_stamp_label=Zonte une imagjin - -editor_stamp1.title=Zonte o modifiche imagjins -editor_stamp1_label=Zonte o modifiche imagjins - -free_text2_default_content=Scomence a scrivi… - -# Editor Parameters -editor_free_text_color=Colôr -editor_free_text_size=Dimension -editor_ink_color=Colôr -editor_ink_thickness=Spessôr -editor_ink_opacity=Opacitât - -editor_stamp_add_image_label=Zonte imagjin -editor_stamp_add_image.title=Zonte imagjin - -# Editor aria -editor_free_text2_aria_label=Editôr di test -editor_ink2_aria_label=Editôr dissens -editor_ink_canvas_aria_label=Imagjin creade dal utent diff --git a/static/pdf.js/locale/fy-NL/viewer.ftl b/static/pdf.js/locale/fy-NL/viewer.ftl new file mode 100644 index 00000000..a67f9b9d --- /dev/null +++ b/static/pdf.js/locale/fy-NL/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Foarige side +pdfjs-previous-button-label = Foarige +pdfjs-next-button = + .title = Folgjende side +pdfjs-next-button-label = Folgjende +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Side +# 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 = fan { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } fan { $pagesCount }) +pdfjs-zoom-out-button = + .title = Utzoome +pdfjs-zoom-out-button-label = Utzoome +pdfjs-zoom-in-button = + .title = Ynzoome +pdfjs-zoom-in-button-label = Ynzoome +pdfjs-zoom-select = + .title = Zoome +pdfjs-presentation-mode-button = + .title = Wikselje nei presintaasjemodus +pdfjs-presentation-mode-button-label = Presintaasjemodus +pdfjs-open-file-button = + .title = Bestân iepenje +pdfjs-open-file-button-label = Iepenje +pdfjs-print-button = + .title = Ofdrukke +pdfjs-print-button-label = Ofdrukke +pdfjs-save-button = + .title = Bewarje +pdfjs-save-button-label = Bewarje +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Downloade +# 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 = Downloade +pdfjs-bookmark-button = + .title = Aktuele side (URL fan aktuele side besjen) +pdfjs-bookmark-button-label = Aktuele side +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Iepenje yn app +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Iepenje yn app + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Ark +pdfjs-tools-button-label = Ark +pdfjs-first-page-button = + .title = Gean nei earste side +pdfjs-first-page-button-label = Gean nei earste side +pdfjs-last-page-button = + .title = Gean nei lêste side +pdfjs-last-page-button-label = Gean nei lêste side +pdfjs-page-rotate-cw-button = + .title = Rjochtsom draaie +pdfjs-page-rotate-cw-button-label = Rjochtsom draaie +pdfjs-page-rotate-ccw-button = + .title = Linksom draaie +pdfjs-page-rotate-ccw-button-label = Linksom draaie +pdfjs-cursor-text-select-tool-button = + .title = Tekstseleksjehelpmiddel ynskeakelje +pdfjs-cursor-text-select-tool-button-label = Tekstseleksjehelpmiddel +pdfjs-cursor-hand-tool-button = + .title = Hânhelpmiddel ynskeakelje +pdfjs-cursor-hand-tool-button-label = Hânhelpmiddel +pdfjs-scroll-page-button = + .title = Sideskowen brûke +pdfjs-scroll-page-button-label = Sideskowen +pdfjs-scroll-vertical-button = + .title = Fertikaal skowe brûke +pdfjs-scroll-vertical-button-label = Fertikaal skowe +pdfjs-scroll-horizontal-button = + .title = Horizontaal skowe brûke +pdfjs-scroll-horizontal-button-label = Horizontaal skowe +pdfjs-scroll-wrapped-button = + .title = Skowe mei oersjoch brûke +pdfjs-scroll-wrapped-button-label = Skowe mei oersjoch +pdfjs-spread-none-button = + .title = Sidesprieding net gearfetsje +pdfjs-spread-none-button-label = Gjin sprieding +pdfjs-spread-odd-button = + .title = Sidesprieding gearfetsje te starten mei ûneven nûmers +pdfjs-spread-odd-button-label = Uneven sprieding +pdfjs-spread-even-button = + .title = Sidesprieding gearfetsje te starten mei even nûmers +pdfjs-spread-even-button-label = Even sprieding + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Dokuminteigenskippen… +pdfjs-document-properties-button-label = Dokuminteigenskippen… +pdfjs-document-properties-file-name = Bestânsnamme: +pdfjs-document-properties-file-size = Bestânsgrutte: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Titel: +pdfjs-document-properties-author = Auteur: +pdfjs-document-properties-subject = Underwerp: +pdfjs-document-properties-keywords = Kaaiwurden: +pdfjs-document-properties-creation-date = Oanmaakdatum: +pdfjs-document-properties-modification-date = Bewurkingsdatum: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Makker: +pdfjs-document-properties-producer = PDF-makker: +pdfjs-document-properties-version = PDF-ferzje: +pdfjs-document-properties-page-count = Siden: +pdfjs-document-properties-page-size = Sideformaat: +pdfjs-document-properties-page-size-unit-inches = yn +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = steand +pdfjs-document-properties-page-size-orientation-landscape = lizzend +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Juridysk + +## 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 = Flugge webwerjefte: +pdfjs-document-properties-linearized-yes = Ja +pdfjs-document-properties-linearized-no = Nee +pdfjs-document-properties-close-button = Slute + +## Print + +pdfjs-print-progress-message = Dokumint tariede oar ôfdrukken… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Annulearje +pdfjs-printing-not-supported = Warning: Printen is net folslein stipe troch dizze browser. +pdfjs-printing-not-ready = Warning: PDF is net folslein laden om ôf te drukken. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Sidebalke yn-/útskeakelje +pdfjs-toggle-sidebar-notification-button = + .title = Sidebalke yn-/útskeakelje (dokumint befettet oersjoch/bylagen/lagen) +pdfjs-toggle-sidebar-button-label = Sidebalke yn-/útskeakelje +pdfjs-document-outline-button = + .title = Dokumintoersjoch toane (dûbelklik om alle items út/yn te klappen) +pdfjs-document-outline-button-label = Dokumintoersjoch +pdfjs-attachments-button = + .title = Bylagen toane +pdfjs-attachments-button-label = Bylagen +pdfjs-layers-button = + .title = Lagen toane (dûbelklik om alle lagen nei de standertsteat werom te setten) +pdfjs-layers-button-label = Lagen +pdfjs-thumbs-button = + .title = Foarbylden toane +pdfjs-thumbs-button-label = Foarbylden +pdfjs-current-outline-item-button = + .title = Aktueel item yn ynhâldsopjefte sykje +pdfjs-current-outline-item-button-label = Aktueel item yn ynhâldsopjefte +pdfjs-findbar-button = + .title = Sykje yn dokumint +pdfjs-findbar-button-label = Sykje +pdfjs-additional-layers = Oanfoljende lagen + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Side { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Foarbyld fan side { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Sykje + .placeholder = Sykje yn dokumint… +pdfjs-find-previous-button = + .title = It foarige foarkommen fan de tekst sykje +pdfjs-find-previous-button-label = Foarige +pdfjs-find-next-button = + .title = It folgjende foarkommen fan de tekst sykje +pdfjs-find-next-button-label = Folgjende +pdfjs-find-highlight-checkbox = Alles markearje +pdfjs-find-match-case-checkbox-label = Haadlettergefoelich +pdfjs-find-match-diacritics-checkbox-label = Diakrityske tekens brûke +pdfjs-find-entire-word-checkbox-label = Hiele wurden +pdfjs-find-reached-top = Boppekant fan dokumint berikt, trochgien fan ûnder ôf +pdfjs-find-reached-bottom = Ein fan dokumint berikt, trochgien fan boppe ôf +# 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 } fan { $total } oerienkomst + *[other] { $current } fan { $total } oerienkomsten + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Mear as { $limit } oerienkomst + *[other] Mear as { $limit } oerienkomsten + } +pdfjs-find-not-found = Tekst net fûn + +## Predefined zoom values + +pdfjs-page-scale-width = Sidebreedte +pdfjs-page-scale-fit = Hiele side +pdfjs-page-scale-auto = Automatysk zoome +pdfjs-page-scale-actual = Werklike grutte +# 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 = Side { $page } + +## Loading indicator messages + +pdfjs-loading-error = Der is in flater bard by it laden fan de PDF. +pdfjs-invalid-file-error = Ynfalide of korruptearre PDF-bestân. +pdfjs-missing-file-error = PDF-bestân ûntbrekt. +pdfjs-unexpected-response-error = Unferwacht serverantwurd. +pdfjs-rendering-error = Der is in flater bard by it renderjen fan de side. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type }-annotaasje] + +## Password + +pdfjs-password-label = Jou it wachtwurd om dit PDF-bestân te iepenjen. +pdfjs-password-invalid = Ferkeard wachtwurd. Probearje opnij. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Annulearje +pdfjs-web-fonts-disabled = Weblettertypen binne útskeakele: gebrûk fan ynsluten PDF-lettertypen is net mooglik. + +## Editing + +pdfjs-editor-free-text-button = + .title = Tekst +pdfjs-editor-free-text-button-label = Tekst +pdfjs-editor-ink-button = + .title = Tekenje +pdfjs-editor-ink-button-label = Tekenje +pdfjs-editor-stamp-button = + .title = Ofbyldingen tafoegje of bewurkje +pdfjs-editor-stamp-button-label = Ofbyldingen tafoegje of bewurkje +pdfjs-editor-highlight-button = + .title = Markearje +pdfjs-editor-highlight-button-label = Markearje +pdfjs-highlight-floating-button = + .title = Markearje +pdfjs-highlight-floating-button1 = + .title = Markearje + .aria-label = Markearje +pdfjs-highlight-floating-button-label = Markearje + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Tekening fuortsmite +pdfjs-editor-remove-freetext-button = + .title = Tekst fuortsmite +pdfjs-editor-remove-stamp-button = + .title = Ofbylding fuortsmite +pdfjs-editor-remove-highlight-button = + .title = Markearring fuortsmite + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Kleur +pdfjs-editor-free-text-size-input = Grutte +pdfjs-editor-ink-color-input = Kleur +pdfjs-editor-ink-thickness-input = Tsjokte +pdfjs-editor-ink-opacity-input = Transparânsje +pdfjs-editor-stamp-add-image-button = + .title = Ofbylding tafoegje +pdfjs-editor-stamp-add-image-button-label = Ofbylding tafoegje +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Tsjokte +pdfjs-editor-free-highlight-thickness-title = + .title = Tsjokte wizigje by aksintuearring fan oare items as tekst +pdfjs-free-text = + .aria-label = Tekstbewurker +pdfjs-free-text-default-content = Begjin mei typen… +pdfjs-ink = + .aria-label = Tekeningbewurker +pdfjs-ink-canvas = + .aria-label = Troch brûker makke ôfbylding + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alternative tekst +pdfjs-editor-alt-text-edit-button-label = Alternative tekst bewurkje +pdfjs-editor-alt-text-dialog-label = Kies in opsje +pdfjs-editor-alt-text-dialog-description = Alternative tekst helpt wannear’t minsken de ôfbylding net sjen kinne of wannear’t dizze net laden wurdt. +pdfjs-editor-alt-text-add-description-label = Foegje in beskriuwing ta +pdfjs-editor-alt-text-add-description-description = Stribje nei 1-2 sinnen dy’t it ûnderwerp, de omjouwing of de aksjes beskriuwe. +pdfjs-editor-alt-text-mark-decorative-label = As dekoratyf markearje +pdfjs-editor-alt-text-mark-decorative-description = Dit wurdt brûkt foar sierlike ôfbyldingen, lykas rânen of wettermerken. +pdfjs-editor-alt-text-cancel-button = Annulearje +pdfjs-editor-alt-text-save-button = Bewarje +pdfjs-editor-alt-text-decorative-tooltip = As dekoratyf markearre +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Bygelyks, ‘In jonge man sit oan in tafel om te iten’ + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Linkerboppehoek – formaat wizigje +pdfjs-editor-resizer-label-top-middle = Midden boppe – formaat wizigje +pdfjs-editor-resizer-label-top-right = Rjochterboppehoek – formaat wizigje +pdfjs-editor-resizer-label-middle-right = Midden rjochts – formaat wizigje +pdfjs-editor-resizer-label-bottom-right = Rjochterûnderhoek – formaat wizigje +pdfjs-editor-resizer-label-bottom-middle = Midden ûnder – formaat wizigje +pdfjs-editor-resizer-label-bottom-left = Linkerûnderhoek – formaat wizigje +pdfjs-editor-resizer-label-middle-left = Links midden – formaat wizigje + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Markearringskleur +pdfjs-editor-colorpicker-button = + .title = Kleur wizigje +pdfjs-editor-colorpicker-dropdown = + .aria-label = Kleurkarren +pdfjs-editor-colorpicker-yellow = + .title = Giel +pdfjs-editor-colorpicker-green = + .title = Grien +pdfjs-editor-colorpicker-blue = + .title = Blau +pdfjs-editor-colorpicker-pink = + .title = Roze +pdfjs-editor-colorpicker-red = + .title = Read + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Alles toane +pdfjs-editor-highlight-show-all-button = + .title = Alles toane diff --git a/static/pdf.js/locale/fy-NL/viewer.properties b/static/pdf.js/locale/fy-NL/viewer.properties deleted file mode 100644 index 003102ba..00000000 --- a/static/pdf.js/locale/fy-NL/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Foarige side -previous_label=Foarige -next.title=Folgjende side -next_label=Folgjende - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Side -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=fan {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} fan {{pagesCount}}) - -zoom_out.title=Utzoome -zoom_out_label=Utzoome -zoom_in.title=Ynzoome -zoom_in_label=Ynzoome -zoom.title=Zoome -presentation_mode.title=Wikselje nei presintaasjemodus -presentation_mode_label=Presintaasjemodus -open_file.title=Bestân iepenje -open_file_label=Iepenje -print.title=Ofdrukke -print_label=Ofdrukke -save.title=Bewarje -save_label=Bewarje -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Downloade -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Downloade -bookmark1.title=Aktuele side (URL fan aktuele side besjen) -bookmark1_label=Aktuele side -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Iepenje yn app -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Iepenje yn app - -# Secondary toolbar and context menu -tools.title=Ark -tools_label=Ark -first_page.title=Gean nei earste side -first_page_label=Gean nei earste side -last_page.title=Gean nei lêste side -last_page_label=Gean nei lêste side -page_rotate_cw.title=Rjochtsom draaie -page_rotate_cw_label=Rjochtsom draaie -page_rotate_ccw.title=Linksom draaie -page_rotate_ccw_label=Linksom draaie - -cursor_text_select_tool.title=Tekstseleksjehelpmiddel ynskeakelje -cursor_text_select_tool_label=Tekstseleksjehelpmiddel -cursor_hand_tool.title=Hânhelpmiddel ynskeakelje -cursor_hand_tool_label=Hânhelpmiddel - -scroll_page.title=Sideskowen brûke -scroll_page_label=Sideskowen -scroll_vertical.title=Fertikaal skowe brûke -scroll_vertical_label=Fertikaal skowe -scroll_horizontal.title=Horizontaal skowe brûke -scroll_horizontal_label=Horizontaal skowe -scroll_wrapped.title=Skowe mei oersjoch brûke -scroll_wrapped_label=Skowe mei oersjoch - -spread_none.title=Sidesprieding net gearfetsje -spread_none_label=Gjin sprieding -spread_odd.title=Sidesprieding gearfetsje te starten mei ûneven nûmers -spread_odd_label=Uneven sprieding -spread_even.title=Sidesprieding gearfetsje te starten mei even nûmers -spread_even_label=Even sprieding - -# Document properties dialog box -document_properties.title=Dokuminteigenskippen… -document_properties_label=Dokuminteigenskippen… -document_properties_file_name=Bestânsnamme: -document_properties_file_size=Bestânsgrutte: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Titel: -document_properties_author=Auteur: -document_properties_subject=Underwerp: -document_properties_keywords=Kaaiwurden: -document_properties_creation_date=Oanmaakdatum: -document_properties_modification_date=Bewurkingsdatum: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Makker: -document_properties_producer=PDF-makker: -document_properties_version=PDF-ferzje: -document_properties_page_count=Siden: -document_properties_page_size=Sideformaat: -document_properties_page_size_unit_inches=yn -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=steand -document_properties_page_size_orientation_landscape=lizzend -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Juridysk -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Flugge webwerjefte: -document_properties_linearized_yes=Ja -document_properties_linearized_no=Nee -document_properties_close=Slute - -print_progress_message=Dokumint tariede oar ôfdrukken… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Annulearje - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Sidebalke yn-/útskeakelje -toggle_sidebar_notification2.title=Sidebalke yn-/útskeakelje (dokumint befettet oersjoch/bylagen/lagen) -toggle_sidebar_label=Sidebalke yn-/útskeakelje -document_outline.title=Dokumintoersjoch toane (dûbelklik om alle items út/yn te klappen) -document_outline_label=Dokumintoersjoch -attachments.title=Bylagen toane -attachments_label=Bylagen -layers.title=Lagen toane (dûbelklik om alle lagen nei de standertsteat werom te setten) -layers_label=Lagen -thumbs.title=Foarbylden toane -thumbs_label=Foarbylden -current_outline_item.title=Aktueel item yn ynhâldsopjefte sykje -current_outline_item_label=Aktueel item yn ynhâldsopjefte -findbar.title=Sykje yn dokumint -findbar_label=Sykje - -additional_layers=Oanfoljende lagen -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Side {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Side {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Foarbyld fan side {{page}} - -# Find panel button title and messages -find_input.title=Sykje -find_input.placeholder=Sykje yn dokumint… -find_previous.title=It foarige foarkommen fan de tekst sykje -find_previous_label=Foarige -find_next.title=It folgjende foarkommen fan de tekst sykje -find_next_label=Folgjende -find_highlight=Alles markearje -find_match_case_label=Haadlettergefoelich -find_match_diacritics_label=Diakrityske tekens brûke -find_entire_word_label=Hiele wurden -find_reached_top=Boppekant fan dokumint berikt, trochgien fan ûnder ôf -find_reached_bottom=Ein fan dokumint berikt, trochgien fan boppe ôf -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} fan {{total}} oerienkomst -find_match_count[two]={{current}} fan {{total}} oerienkomsten -find_match_count[few]={{current}} fan {{total}} oerienkomsten -find_match_count[many]={{current}} fan {{total}} oerienkomsten -find_match_count[other]={{current}} fan {{total}} oerienkomsten -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Mear as {{limit}} oerienkomsten -find_match_count_limit[one]=Mear as {{limit}} oerienkomst -find_match_count_limit[two]=Mear as {{limit}} oerienkomsten -find_match_count_limit[few]=Mear as {{limit}} oerienkomsten -find_match_count_limit[many]=Mear as {{limit}} oerienkomsten -find_match_count_limit[other]=Mear as {{limit}} oerienkomsten -find_not_found=Tekst net fûn - -# Predefined zoom values -page_scale_width=Sidebreedte -page_scale_fit=Hiele side -page_scale_auto=Automatysk zoome -page_scale_actual=Werklike grutte -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Der is in flater bard by it laden fan de PDF. -invalid_file_error=Ynfalide of korruptearre PDF-bestân. -missing_file_error=PDF-bestân ûntbrekt. -unexpected_response_error=Unferwacht serverantwurd. -rendering_error=Der is in flater bard by it renderjen fan de side. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}}-annotaasje] -password_label=Jou it wachtwurd om dit PDF-bestân te iepenjen. -password_invalid=Ferkeard wachtwurd. Probearje opnij. -password_ok=OK -password_cancel=Annulearje - -printing_not_supported=Warning: Printen is net folslein stipe troch dizze browser. -printing_not_ready=Warning: PDF is net folslein laden om ôf te drukken. -web_fonts_disabled=Weblettertypen binne útskeakele: gebrûk fan ynsluten PDF-lettertypen is net mooglik. - -# Editor -editor_free_text2.title=Tekst -editor_free_text2_label=Tekst -editor_ink2.title=Tekenje -editor_ink2_label=Tekenje - -editor_stamp.title=Ofbylding tafoegje -editor_stamp_label=Ofbylding tafoegje - -editor_stamp1.title=Ofbyldingen tafoegje of bewurkje -editor_stamp1_label=Ofbyldingen tafoegje of bewurkje - -free_text2_default_content=Begjin mei typen… - -# Editor Parameters -editor_free_text_color=Kleur -editor_free_text_size=Grutte -editor_ink_color=Kleur -editor_ink_thickness=Tsjokte -editor_ink_opacity=Transparânsje - -editor_stamp_add_image_label=Ofbylding tafoegje -editor_stamp_add_image.title=Ofbylding tafoegje - -# Editor aria -editor_free_text2_aria_label=Tekstbewurker -editor_ink2_aria_label=Tekeningbewurker -editor_ink_canvas_aria_label=Troch brûker makke ôfbylding diff --git a/static/pdf.js/locale/ga-IE/viewer.ftl b/static/pdf.js/locale/ga-IE/viewer.ftl new file mode 100644 index 00000000..cb593089 --- /dev/null +++ b/static/pdf.js/locale/ga-IE/viewer.ftl @@ -0,0 +1,213 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = An Leathanach Roimhe Seo +pdfjs-previous-button-label = Roimhe Seo +pdfjs-next-button = + .title = An Chéad Leathanach Eile +pdfjs-next-button-label = Ar Aghaidh +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Leathanach +# 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 = as { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } as { $pagesCount }) +pdfjs-zoom-out-button = + .title = Súmáil Amach +pdfjs-zoom-out-button-label = Súmáil Amach +pdfjs-zoom-in-button = + .title = Súmáil Isteach +pdfjs-zoom-in-button-label = Súmáil Isteach +pdfjs-zoom-select = + .title = Súmáil +pdfjs-presentation-mode-button = + .title = Úsáid an Mód Láithreoireachta +pdfjs-presentation-mode-button-label = Mód Láithreoireachta +pdfjs-open-file-button = + .title = Oscail Comhad +pdfjs-open-file-button-label = Oscail +pdfjs-print-button = + .title = Priontáil +pdfjs-print-button-label = Priontáil + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Uirlisí +pdfjs-tools-button-label = Uirlisí +pdfjs-first-page-button = + .title = Go dtí an chéad leathanach +pdfjs-first-page-button-label = Go dtí an chéad leathanach +pdfjs-last-page-button = + .title = Go dtí an leathanach deiridh +pdfjs-last-page-button-label = Go dtí an leathanach deiridh +pdfjs-page-rotate-cw-button = + .title = Rothlaigh ar deiseal +pdfjs-page-rotate-cw-button-label = Rothlaigh ar deiseal +pdfjs-page-rotate-ccw-button = + .title = Rothlaigh ar tuathal +pdfjs-page-rotate-ccw-button-label = Rothlaigh ar tuathal +pdfjs-cursor-text-select-tool-button = + .title = Cumasaigh an Uirlis Roghnaithe Téacs +pdfjs-cursor-text-select-tool-button-label = Uirlis Roghnaithe Téacs +pdfjs-cursor-hand-tool-button = + .title = Cumasaigh an Uirlis Láimhe +pdfjs-cursor-hand-tool-button-label = Uirlis Láimhe + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Airíonna na Cáipéise… +pdfjs-document-properties-button-label = Airíonna na Cáipéise… +pdfjs-document-properties-file-name = Ainm an chomhaid: +pdfjs-document-properties-file-size = Méid an chomhaid: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } kB ({ $size_b } beart) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } beart) +pdfjs-document-properties-title = Teideal: +pdfjs-document-properties-author = Údar: +pdfjs-document-properties-subject = Ábhar: +pdfjs-document-properties-keywords = Eochairfhocail: +pdfjs-document-properties-creation-date = Dáta Cruthaithe: +pdfjs-document-properties-modification-date = Dáta Athraithe: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Cruthaitheoir: +pdfjs-document-properties-producer = Cruthaitheoir an PDF: +pdfjs-document-properties-version = Leagan PDF: +pdfjs-document-properties-page-count = Líon Leathanach: + +## 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-close-button = Dún + +## Print + +pdfjs-print-progress-message = Cáipéis á hullmhú le priontáil… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Cealaigh +pdfjs-printing-not-supported = Rabhadh: Ní thacaíonn an brabhsálaí le priontáil go hiomlán. +pdfjs-printing-not-ready = Rabhadh: Ní féidir an PDF a phriontáil go dtí go mbeidh an cháipéis iomlán lódáilte. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Scoránaigh an Barra Taoibh +pdfjs-toggle-sidebar-button-label = Scoránaigh an Barra Taoibh +pdfjs-document-outline-button = + .title = Taispeáin Imlíne na Cáipéise (déchliceáil chun chuile rud a leathnú nó a laghdú) +pdfjs-document-outline-button-label = Creatlach na Cáipéise +pdfjs-attachments-button = + .title = Taispeáin Iatáin +pdfjs-attachments-button-label = Iatáin +pdfjs-thumbs-button = + .title = Taispeáin Mionsamhlacha +pdfjs-thumbs-button-label = Mionsamhlacha +pdfjs-findbar-button = + .title = Aimsigh sa Cháipéis +pdfjs-findbar-button-label = Aimsigh + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Leathanach { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Mionsamhail Leathanaigh { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Aimsigh + .placeholder = Aimsigh sa cháipéis… +pdfjs-find-previous-button = + .title = Aimsigh an sampla roimhe seo den nath seo +pdfjs-find-previous-button-label = Roimhe seo +pdfjs-find-next-button = + .title = Aimsigh an chéad sampla eile den nath sin +pdfjs-find-next-button-label = Ar aghaidh +pdfjs-find-highlight-checkbox = Aibhsigh uile +pdfjs-find-match-case-checkbox-label = Cásíogair +pdfjs-find-entire-word-checkbox-label = Focail iomlána +pdfjs-find-reached-top = Ag barr na cáipéise, ag leanúint ón mbun +pdfjs-find-reached-bottom = Ag bun na cáipéise, ag leanúint ón mbarr +pdfjs-find-not-found = Frása gan aimsiú + +## Predefined zoom values + +pdfjs-page-scale-width = Leithead Leathanaigh +pdfjs-page-scale-fit = Laghdaigh go dtí an Leathanach +pdfjs-page-scale-auto = Súmáil Uathoibríoch +pdfjs-page-scale-actual = Fíormhéid +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = Tharla earráid agus an cháipéis PDF á lódáil. +pdfjs-invalid-file-error = Comhad neamhbhailí nó truaillithe PDF. +pdfjs-missing-file-error = Comhad PDF ar iarraidh. +pdfjs-unexpected-response-error = Freagra ón bhfreastalaí nach rabhthas ag súil leis. +pdfjs-rendering-error = Tharla earráid agus an leathanach á leagan amach. + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Anótáil { $type }] + +## Password + +pdfjs-password-label = Cuir an focal faire isteach chun an comhad PDF seo a oscailt. +pdfjs-password-invalid = Focal faire mícheart. Déan iarracht eile. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Cealaigh +pdfjs-web-fonts-disabled = Tá clófhoirne Gréasáin díchumasaithe: ní féidir clófhoirne leabaithe PDF a úsáid. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/ga-IE/viewer.properties b/static/pdf.js/locale/ga-IE/viewer.properties deleted file mode 100644 index 8a1dc4de..00000000 --- a/static/pdf.js/locale/ga-IE/viewer.properties +++ /dev/null @@ -1,181 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=An Leathanach Roimhe Seo -previous_label=Roimhe Seo -next.title=An Chéad Leathanach Eile -next_label=Ar Aghaidh - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Leathanach -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=as {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} as {{pagesCount}}) - -zoom_out.title=Súmáil Amach -zoom_out_label=Súmáil Amach -zoom_in.title=Súmáil Isteach -zoom_in_label=Súmáil Isteach -zoom.title=Súmáil -presentation_mode.title=Úsáid an Mód Láithreoireachta -presentation_mode_label=Mód Láithreoireachta -open_file.title=Oscail Comhad -open_file_label=Oscail -print.title=Priontáil -print_label=Priontáil - -# Secondary toolbar and context menu -tools.title=Uirlisí -tools_label=Uirlisí -first_page.title=Go dtí an chéad leathanach -first_page_label=Go dtí an chéad leathanach -last_page.title=Go dtí an leathanach deiridh -last_page_label=Go dtí an leathanach deiridh -page_rotate_cw.title=Rothlaigh ar deiseal -page_rotate_cw_label=Rothlaigh ar deiseal -page_rotate_ccw.title=Rothlaigh ar tuathal -page_rotate_ccw_label=Rothlaigh ar tuathal - -cursor_text_select_tool.title=Cumasaigh an Uirlis Roghnaithe Téacs -cursor_text_select_tool_label=Uirlis Roghnaithe Téacs -cursor_hand_tool.title=Cumasaigh an Uirlis Láimhe -cursor_hand_tool_label=Uirlis Láimhe - - - -# Document properties dialog box -document_properties.title=Airíonna na Cáipéise… -document_properties_label=Airíonna na Cáipéise… -document_properties_file_name=Ainm an chomhaid: -document_properties_file_size=Méid an chomhaid: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} kB ({{size_b}} beart) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} beart) -document_properties_title=Teideal: -document_properties_author=Údar: -document_properties_subject=Ábhar: -document_properties_keywords=Eochairfhocail: -document_properties_creation_date=Dáta Cruthaithe: -document_properties_modification_date=Dáta Athraithe: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Cruthaitheoir: -document_properties_producer=Cruthaitheoir an PDF: -document_properties_version=Leagan PDF: -document_properties_page_count=Líon Leathanach: -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_close=Dún - -print_progress_message=Cáipéis á hullmhú le priontáil… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Cealaigh - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Scoránaigh an Barra Taoibh -toggle_sidebar_label=Scoránaigh an Barra Taoibh -document_outline.title=Taispeáin Imlíne na Cáipéise (déchliceáil chun chuile rud a leathnú nó a laghdú) -document_outline_label=Creatlach na Cáipéise -attachments.title=Taispeáin Iatáin -attachments_label=Iatáin -thumbs.title=Taispeáin Mionsamhlacha -thumbs_label=Mionsamhlacha -findbar.title=Aimsigh sa Cháipéis -findbar_label=Aimsigh - -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Leathanach {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Mionsamhail Leathanaigh {{page}} - -# Find panel button title and messages -find_input.title=Aimsigh -find_input.placeholder=Aimsigh sa cháipéis… -find_previous.title=Aimsigh an sampla roimhe seo den nath seo -find_previous_label=Roimhe seo -find_next.title=Aimsigh an chéad sampla eile den nath sin -find_next_label=Ar aghaidh -find_highlight=Aibhsigh uile -find_match_case_label=Cásíogair -find_entire_word_label=Focail iomlána -find_reached_top=Ag barr na cáipéise, ag leanúint ón mbun -find_reached_bottom=Ag bun na cáipéise, ag leanúint ón mbarr -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_not_found=Frása gan aimsiú - -# Predefined zoom values -page_scale_width=Leithead Leathanaigh -page_scale_fit=Laghdaigh go dtí an Leathanach -page_scale_auto=Súmáil Uathoibríoch -page_scale_actual=Fíormhéid -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Tharla earráid agus an cháipéis PDF á lódáil. -invalid_file_error=Comhad neamhbhailí nó truaillithe PDF. -missing_file_error=Comhad PDF ar iarraidh. -unexpected_response_error=Freagra ón bhfreastalaí nach rabhthas ag súil leis. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. - -rendering_error=Tharla earráid agus an leathanach á leagan amach. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Anótáil {{type}}] -password_label=Cuir an focal faire isteach chun an comhad PDF seo a oscailt. -password_invalid=Focal faire mícheart. Déan iarracht eile. -password_ok=OK -password_cancel=Cealaigh - -printing_not_supported=Rabhadh: Ní thacaíonn an brabhsálaí le priontáil go hiomlán. -printing_not_ready=Rabhadh: Ní féidir an PDF a phriontáil go dtí go mbeidh an cháipéis iomlán lódáilte. -web_fonts_disabled=Tá clófhoirne Gréasáin díchumasaithe: ní féidir clófhoirne leabaithe PDF a úsáid. - diff --git a/static/pdf.js/locale/gd/viewer.ftl b/static/pdf.js/locale/gd/viewer.ftl new file mode 100644 index 00000000..cc67391a --- /dev/null +++ b/static/pdf.js/locale/gd/viewer.ftl @@ -0,0 +1,299 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = An duilleag roimhe +pdfjs-previous-button-label = Air ais +pdfjs-next-button = + .title = An ath-dhuilleag +pdfjs-next-button-label = Air adhart +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Duilleag +# 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 = Sùm a-mach +pdfjs-zoom-out-button-label = Sùm a-mach +pdfjs-zoom-in-button = + .title = Sùm a-steach +pdfjs-zoom-in-button-label = Sùm a-steach +pdfjs-zoom-select = + .title = Sùm +pdfjs-presentation-mode-button = + .title = Gearr leum dhan mhodh taisbeanaidh +pdfjs-presentation-mode-button-label = Am modh taisbeanaidh +pdfjs-open-file-button = + .title = Fosgail faidhle +pdfjs-open-file-button-label = Fosgail +pdfjs-print-button = + .title = Clò-bhuail +pdfjs-print-button-label = Clò-bhuail +pdfjs-save-button = + .title = Sàbhail +pdfjs-save-button-label = Sàbhail +pdfjs-bookmark-button = + .title = An duilleag làithreach (Seall an URL on duilleag làithreach) +pdfjs-bookmark-button-label = An duilleag làithreach +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Fosgail san aplacaid +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Fosgail san aplacaid + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Innealan +pdfjs-tools-button-label = Innealan +pdfjs-first-page-button = + .title = Rach gun chiad duilleag +pdfjs-first-page-button-label = Rach gun chiad duilleag +pdfjs-last-page-button = + .title = Rach gun duilleag mu dheireadh +pdfjs-last-page-button-label = Rach gun duilleag mu dheireadh +pdfjs-page-rotate-cw-button = + .title = Cuairtich gu deiseil +pdfjs-page-rotate-cw-button-label = Cuairtich gu deiseil +pdfjs-page-rotate-ccw-button = + .title = Cuairtich gu tuathail +pdfjs-page-rotate-ccw-button-label = Cuairtich gu tuathail +pdfjs-cursor-text-select-tool-button = + .title = Cuir an comas inneal taghadh an teacsa +pdfjs-cursor-text-select-tool-button-label = Inneal taghadh an teacsa +pdfjs-cursor-hand-tool-button = + .title = Cuir inneal na làimhe an comas +pdfjs-cursor-hand-tool-button-label = Inneal na làimhe +pdfjs-scroll-page-button = + .title = Cleachd sgroladh duilleige +pdfjs-scroll-page-button-label = Sgroladh duilleige +pdfjs-scroll-vertical-button = + .title = Cleachd sgroladh inghearach +pdfjs-scroll-vertical-button-label = Sgroladh inghearach +pdfjs-scroll-horizontal-button = + .title = Cleachd sgroladh còmhnard +pdfjs-scroll-horizontal-button-label = Sgroladh còmhnard +pdfjs-scroll-wrapped-button = + .title = Cleachd sgroladh paisgte +pdfjs-scroll-wrapped-button-label = Sgroladh paisgte +pdfjs-spread-none-button = + .title = Na cuir còmhla sgoileadh dhuilleagan +pdfjs-spread-none-button-label = Gun sgaoileadh dhuilleagan +pdfjs-spread-odd-button = + .title = Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chorr +pdfjs-spread-odd-button-label = Sgaoileadh dhuilleagan corra +pdfjs-spread-even-button = + .title = Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chothrom +pdfjs-spread-even-button-label = Sgaoileadh dhuilleagan cothrom + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Roghainnean na sgrìobhainne… +pdfjs-document-properties-button-label = Roghainnean na sgrìobhainne… +pdfjs-document-properties-file-name = Ainm an fhaidhle: +pdfjs-document-properties-file-size = Meud an fhaidhle: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Tiotal: +pdfjs-document-properties-author = Ùghdar: +pdfjs-document-properties-subject = Cuspair: +pdfjs-document-properties-keywords = Faclan-luirg: +pdfjs-document-properties-creation-date = Latha a chruthachaidh: +pdfjs-document-properties-modification-date = Latha atharrachaidh: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Cruthadair: +pdfjs-document-properties-producer = Saothraiche a' PDF: +pdfjs-document-properties-version = Tionndadh a' PDF: +pdfjs-document-properties-page-count = Àireamh de dhuilleagan: +pdfjs-document-properties-page-size = Meud na duilleige: +pdfjs-document-properties-page-size-unit-inches = ann an +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = portraid +pdfjs-document-properties-page-size-orientation-landscape = dreach-tìre +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 = Litir +pdfjs-document-properties-page-size-name-legal = Laghail + +## 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 = Grad shealladh-lìn: +pdfjs-document-properties-linearized-yes = Tha +pdfjs-document-properties-linearized-no = Chan eil +pdfjs-document-properties-close-button = Dùin + +## Print + +pdfjs-print-progress-message = Ag ullachadh na sgrìobhainn airson clò-bhualadh… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Sguir dheth +pdfjs-printing-not-supported = Rabhadh: Chan eil am brabhsair seo a' cur làn-taic ri clò-bhualadh. +pdfjs-printing-not-ready = Rabhadh: Cha deach am PDF a luchdadh gu tur airson clò-bhualadh. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Toglaich am bàr-taoibh +pdfjs-toggle-sidebar-notification-button = + .title = Toglaich am bàr-taoibh (tha oir-loidhne/ceanglachain/breathan aig an sgrìobhainn) +pdfjs-toggle-sidebar-button-label = Toglaich am bàr-taoibh +pdfjs-document-outline-button = + .title = Seall oir-loidhne na sgrìobhainn (dèan briogadh dùbailte airson a h-uile nì a leudachadh/a cho-theannadh) +pdfjs-document-outline-button-label = Oir-loidhne na sgrìobhainne +pdfjs-attachments-button = + .title = Seall na ceanglachain +pdfjs-attachments-button-label = Ceanglachain +pdfjs-layers-button = + .title = Seall na breathan (dèan briogadh dùbailte airson a h-uile breath ath-shuidheachadh dhan staid bhunaiteach) +pdfjs-layers-button-label = Breathan +pdfjs-thumbs-button = + .title = Seall na dealbhagan +pdfjs-thumbs-button-label = Dealbhagan +pdfjs-current-outline-item-button = + .title = Lorg nì làithreach na h-oir-loidhne +pdfjs-current-outline-item-button-label = Nì làithreach na h-oir-loidhne +pdfjs-findbar-button = + .title = Lorg san sgrìobhainn +pdfjs-findbar-button-label = Lorg +pdfjs-additional-layers = Barrachd breathan + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Duilleag a { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Dealbhag duilleag a { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Lorg + .placeholder = Lorg san sgrìobhainn... +pdfjs-find-previous-button = + .title = Lorg làthair roimhe na h-abairt seo +pdfjs-find-previous-button-label = Air ais +pdfjs-find-next-button = + .title = Lorg ath-làthair na h-abairt seo +pdfjs-find-next-button-label = Air adhart +pdfjs-find-highlight-checkbox = Soillsich a h-uile +pdfjs-find-match-case-checkbox-label = Aire do litrichean mòra is beaga +pdfjs-find-match-diacritics-checkbox-label = Aire do stràcan +pdfjs-find-entire-word-checkbox-label = Faclan-slàna +pdfjs-find-reached-top = Ràinig sinn barr na duilleige, a' leantainn air adhart o bhonn na duilleige +pdfjs-find-reached-bottom = Ràinig sinn bonn na duilleige, a' leantainn air adhart o bharr na duilleige +pdfjs-find-not-found = Cha deach an abairt a lorg + +## Predefined zoom values + +pdfjs-page-scale-width = Leud na duilleige +pdfjs-page-scale-fit = Freagair ri meud na duilleige +pdfjs-page-scale-auto = Sùm fèin-obrachail +pdfjs-page-scale-actual = Am fìor-mheud +# 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 = Duilleag { $page } + +## Loading indicator messages + +pdfjs-loading-error = Thachair mearachd rè luchdadh a' PDF. +pdfjs-invalid-file-error = Faidhle PDF a tha mì-dhligheach no coirbte. +pdfjs-missing-file-error = Faidhle PDF a tha a dhìth. +pdfjs-unexpected-response-error = Freagairt on fhrithealaiche ris nach robh dùil. +pdfjs-rendering-error = Thachair mearachd rè reandaradh na duilleige. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Nòtachadh { $type }] + +## Password + +pdfjs-password-label = Cuir a-steach am facal-faire gus am faidhle PDF seo fhosgladh. +pdfjs-password-invalid = Tha am facal-faire cearr. Nach fheuch thu ris a-rithist? +pdfjs-password-ok-button = Ceart ma-thà +pdfjs-password-cancel-button = Sguir dheth +pdfjs-web-fonts-disabled = Tha cruthan-clò lìn à comas: Chan urrainn dhuinn cruthan-clò PDF leabaichte a chleachdadh. + +## Editing + +pdfjs-editor-free-text-button = + .title = Teacsa +pdfjs-editor-free-text-button-label = Teacsa +pdfjs-editor-ink-button = + .title = Tarraing +pdfjs-editor-ink-button-label = Tarraing +# Editor Parameters +pdfjs-editor-free-text-color-input = Dath +pdfjs-editor-free-text-size-input = Meud +pdfjs-editor-ink-color-input = Dath +pdfjs-editor-ink-thickness-input = Tighead +pdfjs-editor-ink-opacity-input = Trìd-dhoilleireachd +pdfjs-free-text = + .aria-label = An deasaiche teacsa +pdfjs-free-text-default-content = Tòisich air sgrìobhadh… +pdfjs-ink = + .aria-label = An deasaiche tharraingean +pdfjs-ink-canvas = + .aria-label = Dealbh a chruthaich cleachdaiche + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/gd/viewer.properties b/static/pdf.js/locale/gd/viewer.properties deleted file mode 100644 index 231d927a..00000000 --- a/static/pdf.js/locale/gd/viewer.properties +++ /dev/null @@ -1,257 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=An duilleag roimhe -previous_label=Air ais -next.title=An ath-dhuilleag -next_label=Air adhart - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Duilleag -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=à {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} à {{pagesCount}}) - -zoom_out.title=Sùm a-mach -zoom_out_label=Sùm a-mach -zoom_in.title=Sùm a-steach -zoom_in_label=Sùm a-steach -zoom.title=Sùm -presentation_mode.title=Gearr leum dhan mhodh taisbeanaidh -presentation_mode_label=Am modh taisbeanaidh -open_file.title=Fosgail faidhle -open_file_label=Fosgail -print.title=Clò-bhuail -print_label=Clò-bhuail - -save.title=Sàbhail -save_label=Sàbhail -bookmark1.title=An duilleag làithreach (Seall an URL on duilleag làithreach) -bookmark1_label=An duilleag làithreach - -open_in_app.title=Fosgail san aplacaid -open_in_app_label=Fosgail san aplacaid - -# Secondary toolbar and context menu -tools.title=Innealan -tools_label=Innealan -first_page.title=Rach gun chiad duilleag -first_page_label=Rach gun chiad duilleag -last_page.title=Rach gun duilleag mu dheireadh -last_page_label=Rach gun duilleag mu dheireadh -page_rotate_cw.title=Cuairtich gu deiseil -page_rotate_cw_label=Cuairtich gu deiseil -page_rotate_ccw.title=Cuairtich gu tuathail -page_rotate_ccw_label=Cuairtich gu tuathail - -cursor_text_select_tool.title=Cuir an comas inneal taghadh an teacsa -cursor_text_select_tool_label=Inneal taghadh an teacsa -cursor_hand_tool.title=Cuir inneal na làimhe an comas -cursor_hand_tool_label=Inneal na làimhe - -scroll_page.title=Cleachd sgroladh duilleige -scroll_page_label=Sgroladh duilleige -scroll_vertical.title=Cleachd sgroladh inghearach -scroll_vertical_label=Sgroladh inghearach -scroll_horizontal.title=Cleachd sgroladh còmhnard -scroll_horizontal_label=Sgroladh còmhnard -scroll_wrapped.title=Cleachd sgroladh paisgte -scroll_wrapped_label=Sgroladh paisgte - -spread_none.title=Na cuir còmhla sgoileadh dhuilleagan -spread_none_label=Gun sgaoileadh dhuilleagan -spread_odd.title=Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chorr -spread_odd_label=Sgaoileadh dhuilleagan corra -spread_even.title=Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chothrom -spread_even_label=Sgaoileadh dhuilleagan cothrom - -# Document properties dialog box -document_properties.title=Roghainnean na sgrìobhainne… -document_properties_label=Roghainnean na sgrìobhainne… -document_properties_file_name=Ainm an fhaidhle: -document_properties_file_size=Meud an fhaidhle: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Tiotal: -document_properties_author=Ùghdar: -document_properties_subject=Cuspair: -document_properties_keywords=Faclan-luirg: -document_properties_creation_date=Latha a chruthachaidh: -document_properties_modification_date=Latha atharrachaidh: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Cruthadair: -document_properties_producer=Saothraiche a' PDF: -document_properties_version=Tionndadh a' PDF: -document_properties_page_count=Àireamh de dhuilleagan: -document_properties_page_size=Meud na duilleige: -document_properties_page_size_unit_inches=ann an -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=portraid -document_properties_page_size_orientation_landscape=dreach-tìre -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Litir -document_properties_page_size_name_legal=Laghail -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Grad shealladh-lìn: -document_properties_linearized_yes=Tha -document_properties_linearized_no=Chan eil -document_properties_close=Dùin - -print_progress_message=Ag ullachadh na sgrìobhainn airson clò-bhualadh… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Sguir dheth - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Toglaich am bàr-taoibh -toggle_sidebar_notification2.title=Toglaich am bàr-taoibh (tha oir-loidhne/ceanglachain/breathan aig an sgrìobhainn) -toggle_sidebar_label=Toglaich am bàr-taoibh -document_outline.title=Seall oir-loidhne na sgrìobhainn (dèan briogadh dùbailte airson a h-uile nì a leudachadh/a cho-theannadh) -document_outline_label=Oir-loidhne na sgrìobhainne -attachments.title=Seall na ceanglachain -attachments_label=Ceanglachain -layers.title=Seall na breathan (dèan briogadh dùbailte airson a h-uile breath ath-shuidheachadh dhan staid bhunaiteach) -layers_label=Breathan -thumbs.title=Seall na dealbhagan -thumbs_label=Dealbhagan -current_outline_item.title=Lorg nì làithreach na h-oir-loidhne -current_outline_item_label=Nì làithreach na h-oir-loidhne -findbar.title=Lorg san sgrìobhainn -findbar_label=Lorg - -additional_layers=Barrachd breathan -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Duilleag {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Duilleag a {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Dealbhag duilleag a {{page}} - -# Find panel button title and messages -find_input.title=Lorg -find_input.placeholder=Lorg san sgrìobhainn... -find_previous.title=Lorg làthair roimhe na h-abairt seo -find_previous_label=Air ais -find_next.title=Lorg ath-làthair na h-abairt seo -find_next_label=Air adhart -find_highlight=Soillsich a h-uile -find_match_case_label=Aire do litrichean mòra is beaga -find_match_diacritics_label=Aire do stràcan -find_entire_word_label=Faclan-slàna -find_reached_top=Ràinig sinn barr na duilleige, a' leantainn air adhart o bhonn na duilleige -find_reached_bottom=Ràinig sinn bonn na duilleige, a' leantainn air adhart o bharr na duilleige -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} à {{total}} mhaids -find_match_count[two]={{current}} à {{total}} mhaids -find_match_count[few]={{current}} à {{total}} maidsichean -find_match_count[many]={{current}} à {{total}} maids -find_match_count[other]={{current}} à {{total}} maids -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Barrachd air {{limit}} maids -find_match_count_limit[one]=Barrachd air {{limit}} mhaids -find_match_count_limit[two]=Barrachd air {{limit}} mhaids -find_match_count_limit[few]=Barrachd air {{limit}} maidsichean -find_match_count_limit[many]=Barrachd air {{limit}} maids -find_match_count_limit[other]=Barrachd air {{limit}} maids -find_not_found=Cha deach an abairt a lorg - -# Predefined zoom values -page_scale_width=Leud na duilleige -page_scale_fit=Freagair ri meud na duilleige -page_scale_auto=Sùm fèin-obrachail -page_scale_actual=Am fìor-mheud -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Thachair mearachd rè luchdadh a' PDF. -invalid_file_error=Faidhle PDF a tha mì-dhligheach no coirbte. -missing_file_error=Faidhle PDF a tha a dhìth. -unexpected_response_error=Freagairt on fhrithealaiche ris nach robh dùil. - -rendering_error=Thachair mearachd rè reandaradh na duilleige. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Nòtachadh {{type}}] -password_label=Cuir a-steach am facal-faire gus am faidhle PDF seo fhosgladh. -password_invalid=Tha am facal-faire cearr. Nach fheuch thu ris a-rithist? -password_ok=Ceart ma-thà -password_cancel=Sguir dheth - -printing_not_supported=Rabhadh: Chan eil am brabhsair seo a' cur làn-taic ri clò-bhualadh. -printing_not_ready=Rabhadh: Cha deach am PDF a luchdadh gu tur airson clò-bhualadh. -web_fonts_disabled=Tha cruthan-clò lìn à comas: Chan urrainn dhuinn cruthan-clò PDF leabaichte a chleachdadh. - -# Editor -editor_free_text2.title=Teacsa -editor_free_text2_label=Teacsa -editor_ink2.title=Tarraing -editor_ink2_label=Tarraing - -free_text2_default_content=Tòisich air sgrìobhadh… - -# Editor Parameters -editor_free_text_color=Dath -editor_free_text_size=Meud -editor_ink_color=Dath -editor_ink_thickness=Tighead -editor_ink_opacity=Trìd-dhoilleireachd - -# Editor aria -editor_free_text2_aria_label=An deasaiche teacsa -editor_ink2_aria_label=An deasaiche tharraingean -editor_ink_canvas_aria_label=Dealbh a chruthaich cleachdaiche diff --git a/static/pdf.js/locale/gl/viewer.ftl b/static/pdf.js/locale/gl/viewer.ftl new file mode 100644 index 00000000..a08fb1a3 --- /dev/null +++ b/static/pdf.js/locale/gl/viewer.ftl @@ -0,0 +1,364 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Páxina anterior +pdfjs-previous-button-label = Anterior +pdfjs-next-button = + .title = Seguinte páxina +pdfjs-next-button-label = Seguinte +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Páxina +# 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 = de { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount }) +pdfjs-zoom-out-button = + .title = Reducir +pdfjs-zoom-out-button-label = Reducir +pdfjs-zoom-in-button = + .title = Ampliar +pdfjs-zoom-in-button-label = Ampliar +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Cambiar ao modo presentación +pdfjs-presentation-mode-button-label = Modo presentación +pdfjs-open-file-button = + .title = Abrir ficheiro +pdfjs-open-file-button-label = Abrir +pdfjs-print-button = + .title = Imprimir +pdfjs-print-button-label = Imprimir +pdfjs-save-button = + .title = Gardar +pdfjs-save-button-label = Gardar +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Descargar +# 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 = Descargar +pdfjs-bookmark-button = + .title = Páxina actual (ver o URL da páxina actual) +pdfjs-bookmark-button-label = Páxina actual +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Abrir cunha aplicación +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Abrir cunha aplicación + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Ferramentas +pdfjs-tools-button-label = Ferramentas +pdfjs-first-page-button = + .title = Ir á primeira páxina +pdfjs-first-page-button-label = Ir á primeira páxina +pdfjs-last-page-button = + .title = Ir á última páxina +pdfjs-last-page-button-label = Ir á última páxina +pdfjs-page-rotate-cw-button = + .title = Rotar no sentido das agullas do reloxo +pdfjs-page-rotate-cw-button-label = Rotar no sentido das agullas do reloxo +pdfjs-page-rotate-ccw-button = + .title = Rotar no sentido contrario ás agullas do reloxo +pdfjs-page-rotate-ccw-button-label = Rotar no sentido contrario ás agullas do reloxo +pdfjs-cursor-text-select-tool-button = + .title = Activar a ferramenta de selección de texto +pdfjs-cursor-text-select-tool-button-label = Ferramenta de selección de texto +pdfjs-cursor-hand-tool-button = + .title = Activar a ferramenta de man +pdfjs-cursor-hand-tool-button-label = Ferramenta de man +pdfjs-scroll-page-button = + .title = Usar o desprazamento da páxina +pdfjs-scroll-page-button-label = Desprazamento da páxina +pdfjs-scroll-vertical-button = + .title = Usar o desprazamento vertical +pdfjs-scroll-vertical-button-label = Desprazamento vertical +pdfjs-scroll-horizontal-button = + .title = Usar o desprazamento horizontal +pdfjs-scroll-horizontal-button-label = Desprazamento horizontal +pdfjs-scroll-wrapped-button = + .title = Usar o desprazamento en bloque +pdfjs-scroll-wrapped-button-label = Desprazamento por bloque +pdfjs-spread-none-button = + .title = Non agrupar páxinas +pdfjs-spread-none-button-label = Ningún agrupamento +pdfjs-spread-odd-button = + .title = Crea grupo de páxinas que comezan con números de páxina impares +pdfjs-spread-odd-button-label = Agrupamento impar +pdfjs-spread-even-button = + .title = Crea grupo de páxinas que comezan con números de páxina pares +pdfjs-spread-even-button-label = Agrupamento par + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Propiedades do documento… +pdfjs-document-properties-button-label = Propiedades do documento… +pdfjs-document-properties-file-name = Nome do ficheiro: +pdfjs-document-properties-file-size = Tamaño do ficheiro: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Título: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Asunto: +pdfjs-document-properties-keywords = Palabras clave: +pdfjs-document-properties-creation-date = Data de creación: +pdfjs-document-properties-modification-date = Data de modificación: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Creado por: +pdfjs-document-properties-producer = Xenerador do PDF: +pdfjs-document-properties-version = Versión de PDF: +pdfjs-document-properties-page-count = Número de páxinas: +pdfjs-document-properties-page-size = Tamaño da páxina: +pdfjs-document-properties-page-size-unit-inches = pol +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = vertical +pdfjs-document-properties-page-size-orientation-landscape = horizontal +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 = Carta +pdfjs-document-properties-page-size-name-legal = 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 = Visualización rápida das páxinas web: +pdfjs-document-properties-linearized-yes = Si +pdfjs-document-properties-linearized-no = Non +pdfjs-document-properties-close-button = Pechar + +## Print + +pdfjs-print-progress-message = Preparando o documento para imprimir… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Cancelar +pdfjs-printing-not-supported = Aviso: A impresión non é compatíbel de todo con este navegador. +pdfjs-printing-not-ready = Aviso: O PDF non se cargou completamente para imprimirse. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Amosar/agochar a barra lateral +pdfjs-toggle-sidebar-notification-button = + .title = Alternar barra lateral (o documento contén esquema/anexos/capas) +pdfjs-toggle-sidebar-button-label = Amosar/agochar a barra lateral +pdfjs-document-outline-button = + .title = Amosar a estrutura do documento (dobre clic para expandir/contraer todos os elementos) +pdfjs-document-outline-button-label = Estrutura do documento +pdfjs-attachments-button = + .title = Amosar anexos +pdfjs-attachments-button-label = Anexos +pdfjs-layers-button = + .title = Mostrar capas (prema dúas veces para restaurar todas as capas o estado predeterminado) +pdfjs-layers-button-label = Capas +pdfjs-thumbs-button = + .title = Amosar miniaturas +pdfjs-thumbs-button-label = Miniaturas +pdfjs-current-outline-item-button = + .title = Atopar o elemento delimitado actualmente +pdfjs-current-outline-item-button-label = Elemento delimitado actualmente +pdfjs-findbar-button = + .title = Atopar no documento +pdfjs-findbar-button-label = Atopar +pdfjs-additional-layers = Capas adicionais + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Páxina { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura da páxina { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Atopar + .placeholder = Atopar no documento… +pdfjs-find-previous-button = + .title = Atopar a anterior aparición da frase +pdfjs-find-previous-button-label = Anterior +pdfjs-find-next-button = + .title = Atopar a seguinte aparición da frase +pdfjs-find-next-button-label = Seguinte +pdfjs-find-highlight-checkbox = Realzar todo +pdfjs-find-match-case-checkbox-label = Diferenciar maiúsculas de minúsculas +pdfjs-find-match-diacritics-checkbox-label = Distinguir os diacríticos +pdfjs-find-entire-word-checkbox-label = Palabras completas +pdfjs-find-reached-top = Chegouse ao inicio do documento, continuar desde o final +pdfjs-find-reached-bottom = Chegouse ao final do documento, continuar desde o inicio +# 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] Coincidencia { $current } de { $total } + *[other] Coincidencia { $current } de { $total } + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Máis de { $limit } coincidencia + *[other] Máis de { $limit } coincidencias + } +pdfjs-find-not-found = Non se atopou a frase + +## Predefined zoom values + +pdfjs-page-scale-width = Largura da páxina +pdfjs-page-scale-fit = Axuste de páxina +pdfjs-page-scale-auto = Zoom automático +pdfjs-page-scale-actual = Tamaño 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 = Páxina { $page } + +## Loading indicator messages + +pdfjs-loading-error = Produciuse un erro ao cargar o PDF. +pdfjs-invalid-file-error = Ficheiro PDF danado ou non válido. +pdfjs-missing-file-error = Falta o ficheiro PDF. +pdfjs-unexpected-response-error = Resposta inesperada do servidor. +pdfjs-rendering-error = Produciuse un erro ao representar a páxina. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Anotación { $type }] + +## Password + +pdfjs-password-label = Escriba o contrasinal para abrir este ficheiro PDF. +pdfjs-password-invalid = Contrasinal incorrecto. Tente de novo. +pdfjs-password-ok-button = Aceptar +pdfjs-password-cancel-button = Cancelar +pdfjs-web-fonts-disabled = Desactiváronse as fontes web: foi imposíbel usar as fontes incrustadas no PDF. + +## Editing + +pdfjs-editor-free-text-button = + .title = Texto +pdfjs-editor-free-text-button-label = Texto +pdfjs-editor-ink-button = + .title = Debuxo +pdfjs-editor-ink-button-label = Debuxo +pdfjs-editor-stamp-button = + .title = Engadir ou editar imaxes +pdfjs-editor-stamp-button-label = Engadir ou editar imaxes + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-freetext-button = + .title = Eliminar o texto +pdfjs-editor-remove-stamp-button = + .title = Eliminar a imaxe +pdfjs-editor-remove-highlight-button = + .title = Eliminar o resaltado + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Cor +pdfjs-editor-free-text-size-input = Tamaño +pdfjs-editor-ink-color-input = Cor +pdfjs-editor-ink-thickness-input = Grosor +pdfjs-editor-ink-opacity-input = Opacidade +pdfjs-editor-stamp-add-image-button = + .title = Engadir imaxe +pdfjs-editor-stamp-add-image-button-label = Engadir imaxe +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Grosor +pdfjs-free-text = + .aria-label = Editor de texto +pdfjs-free-text-default-content = Comezar a teclear… +pdfjs-ink = + .aria-label = Editor de debuxos +pdfjs-ink-canvas = + .aria-label = Imaxe creada por unha usuaria + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Texto alternativo +pdfjs-editor-alt-text-edit-button-label = Editar o texto alternativo +pdfjs-editor-alt-text-dialog-label = Escoller unha opción +pdfjs-editor-alt-text-add-description-label = Engadir unha descrición +pdfjs-editor-alt-text-mark-decorative-label = Marcar como decorativo +pdfjs-editor-alt-text-mark-decorative-description = Utilízase para imaxes ornamentais, como bordos ou marcas de auga. +pdfjs-editor-alt-text-cancel-button = Cancelar +pdfjs-editor-alt-text-save-button = Gardar +pdfjs-editor-alt-text-decorative-tooltip = Marcado como decorativo +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Por exemplo, «Un mozo séntase á mesa para comer» + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Esquina superior esquerda: cambia o tamaño +pdfjs-editor-resizer-label-top-middle = Medio superior: cambia o tamaño +pdfjs-editor-resizer-label-top-right = Esquina superior dereita: cambia o tamaño +pdfjs-editor-resizer-label-middle-right = Medio dereito: cambia o tamaño +pdfjs-editor-resizer-label-bottom-right = Esquina inferior dereita: cambia o tamaño +pdfjs-editor-resizer-label-bottom-middle = Abaixo medio: cambia o tamaño +pdfjs-editor-resizer-label-bottom-left = Esquina inferior esquerda: cambia o tamaño +pdfjs-editor-resizer-label-middle-left = Medio esquerdo: cambia o tamaño + +## Color picker + diff --git a/static/pdf.js/locale/gl/viewer.properties b/static/pdf.js/locale/gl/viewer.properties deleted file mode 100644 index 508ea5e4..00000000 --- a/static/pdf.js/locale/gl/viewer.properties +++ /dev/null @@ -1,267 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Páxina anterior -previous_label=Anterior -next.title=Seguinte páxina -next_label=Seguinte - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Páxina -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=de {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} de {{pagesCount}}) - -zoom_out.title=Reducir -zoom_out_label=Reducir -zoom_in.title=Ampliar -zoom_in_label=Ampliar -zoom.title=Zoom -presentation_mode.title=Cambiar ao modo presentación -presentation_mode_label=Modo presentación -open_file.title=Abrir ficheiro -open_file_label=Abrir -print.title=Imprimir -print_label=Imprimir -save.title=Gardar -save_label=Gardar -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Descargar -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Descargar -bookmark1.title=Páxina actual (ver o URL da páxina actual) -bookmark1_label=Páxina actual -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Abrir cunha aplicación -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Abrir cunha aplicación - -# Secondary toolbar and context menu -tools.title=Ferramentas -tools_label=Ferramentas -first_page.title=Ir á primeira páxina -first_page_label=Ir á primeira páxina -last_page.title=Ir á última páxina -last_page_label=Ir á última páxina -page_rotate_cw.title=Rotar no sentido das agullas do reloxo -page_rotate_cw_label=Rotar no sentido das agullas do reloxo -page_rotate_ccw.title=Rotar no sentido contrario ás agullas do reloxo -page_rotate_ccw_label=Rotar no sentido contrario ás agullas do reloxo - -cursor_text_select_tool.title=Activar a ferramenta de selección de texto -cursor_text_select_tool_label=Ferramenta de selección de texto -cursor_hand_tool.title=Activar a ferramenta de man -cursor_hand_tool_label=Ferramenta de man - -scroll_page.title=Usar o desprazamento da páxina -scroll_page_label=Desprazamento da páxina -scroll_vertical.title=Usar o desprazamento vertical -scroll_vertical_label=Desprazamento vertical -scroll_horizontal.title=Usar o desprazamento horizontal -scroll_horizontal_label=Desprazamento horizontal -scroll_wrapped.title=Usar o desprazamento en bloque -scroll_wrapped_label=Desprazamento por bloque - -spread_none.title=Non agrupar páxinas -spread_none_label=Ningún agrupamento -spread_odd.title=Crea grupo de páxinas que comezan con números de páxina impares -spread_odd_label=Agrupamento impar -spread_even.title=Crea grupo de páxinas que comezan con números de páxina pares -spread_even_label=Agrupamento par - -# Document properties dialog box -document_properties.title=Propiedades do documento… -document_properties_label=Propiedades do documento… -document_properties_file_name=Nome do ficheiro: -document_properties_file_size=Tamaño do ficheiro: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Título: -document_properties_author=Autor: -document_properties_subject=Asunto: -document_properties_keywords=Palabras clave: -document_properties_creation_date=Data de creación: -document_properties_modification_date=Data de modificación: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Creado por: -document_properties_producer=Xenerador do PDF: -document_properties_version=Versión de PDF: -document_properties_page_count=Número de páxinas: -document_properties_page_size=Tamaño da páxina: -document_properties_page_size_unit_inches=pol -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=vertical -document_properties_page_size_orientation_landscape=horizontal -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Carta -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Visualización rápida das páxinas web: -document_properties_linearized_yes=Si -document_properties_linearized_no=Non -document_properties_close=Pechar - -print_progress_message=Preparando o documento para imprimir… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Cancelar - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Amosar/agochar a barra lateral -toggle_sidebar_notification2.title=Alternar barra lateral (o documento contén esquema/anexos/capas) -toggle_sidebar_label=Amosar/agochar a barra lateral -document_outline.title=Amosar a estrutura do documento (dobre clic para expandir/contraer todos os elementos) -document_outline_label=Estrutura do documento -attachments.title=Amosar anexos -attachments_label=Anexos -layers.title=Mostrar capas (prema dúas veces para restaurar todas as capas o estado predeterminado) -layers_label=Capas -thumbs.title=Amosar miniaturas -thumbs_label=Miniaturas -current_outline_item.title=Atopar o elemento delimitado actualmente -current_outline_item_label=Elemento delimitado actualmente -findbar.title=Atopar no documento -findbar_label=Atopar - -additional_layers=Capas adicionais -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Páxina {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Páxina {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura da páxina {{page}} - -# Find panel button title and messages -find_input.title=Atopar -find_input.placeholder=Atopar no documento… -find_previous.title=Atopar a anterior aparición da frase -find_previous_label=Anterior -find_next.title=Atopar a seguinte aparición da frase -find_next_label=Seguinte -find_highlight=Realzar todo -find_match_case_label=Diferenciar maiúsculas de minúsculas -find_match_diacritics_label=Distinguir os diacríticos -find_entire_word_label=Palabras completas -find_reached_top=Chegouse ao inicio do documento, continuar desde o final -find_reached_bottom=Chegouse ao final do documento, continuar desde o inicio -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} de {{total}} coincidencia -find_match_count[two]={{current}} de {{total}} coincidencias -find_match_count[few]={{current}} de {{total}} coincidencias -find_match_count[many]={{current}} de {{total}} coincidencias -find_match_count[other]={{current}} de {{total}} coincidencias -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Máis de {{limit}} coincidencias -find_match_count_limit[one]=Máis de {{limit}} coincidencia -find_match_count_limit[two]=Máis de {{limit}} coincidencias -find_match_count_limit[few]=Máis de {{limit}} coincidencias -find_match_count_limit[many]=Máis de {{limit}} coincidencias -find_match_count_limit[other]=Máis de {{limit}} coincidencias -find_not_found=Non se atopou a frase - -# Predefined zoom values -page_scale_width=Largura da páxina -page_scale_fit=Axuste de páxina -page_scale_auto=Zoom automático -page_scale_actual=Tamaño actual -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Produciuse un erro ao cargar o PDF. -invalid_file_error=Ficheiro PDF danado ou non válido. -missing_file_error=Falta o ficheiro PDF. -unexpected_response_error=Resposta inesperada do servidor. -rendering_error=Produciuse un erro ao representar a páxina. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Anotación {{type}}] -password_label=Escriba o contrasinal para abrir este ficheiro PDF. -password_invalid=Contrasinal incorrecto. Tente de novo. -password_ok=Aceptar -password_cancel=Cancelar - -printing_not_supported=Aviso: A impresión non é compatíbel de todo con este navegador. -printing_not_ready=Aviso: O PDF non se cargou completamente para imprimirse. -web_fonts_disabled=Desactiváronse as fontes web: foi imposíbel usar as fontes incrustadas no PDF. - -# Editor -editor_free_text2.title=Texto -editor_free_text2_label=Texto -editor_ink2.title=Debuxo -editor_ink2_label=Debuxo - -editor_stamp1.title=Engadir ou editar imaxes -editor_stamp1_label=Engadir ou editar imaxes - -free_text2_default_content=Comezar a teclear… - -# Editor Parameters -editor_free_text_color=Cor -editor_free_text_size=Tamaño -editor_ink_color=Cor -editor_ink_thickness=Grosor -editor_ink_opacity=Opacidade - -editor_stamp_add_image_label=Engadir imaxe -editor_stamp_add_image.title=Engadir imaxe - -# Editor aria -editor_free_text2_aria_label=Editor de texto -editor_ink2_aria_label=Editor de debuxos -editor_ink_canvas_aria_label=Imaxe creada por unha usuaria diff --git a/static/pdf.js/locale/gn/viewer.ftl b/static/pdf.js/locale/gn/viewer.ftl new file mode 100644 index 00000000..29ec18ae --- /dev/null +++ b/static/pdf.js/locale/gn/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Kuatiarogue mboyvegua +pdfjs-previous-button-label = Mboyvegua +pdfjs-next-button = + .title = Kuatiarogue upeigua +pdfjs-next-button-label = Upeigua +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Kuatiarogue +# 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 } gui +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount }) +pdfjs-zoom-out-button = + .title = Momichĩ +pdfjs-zoom-out-button-label = Momichĩ +pdfjs-zoom-in-button = + .title = Mbotuicha +pdfjs-zoom-in-button-label = Mbotuicha +pdfjs-zoom-select = + .title = Tuichakue +pdfjs-presentation-mode-button = + .title = Jehechauka reko moambue +pdfjs-presentation-mode-button-label = Jehechauka reko +pdfjs-open-file-button = + .title = Marandurendápe jeike +pdfjs-open-file-button-label = Jeike +pdfjs-print-button = + .title = Monguatia +pdfjs-print-button-label = Monguatia +pdfjs-save-button = + .title = Ñongatu +pdfjs-save-button-label = Ñongatu +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Mboguejy +# 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 = Mboguejy +pdfjs-bookmark-button = + .title = Kuatiarogue ag̃agua (Ehecha URL kuatiarogue ag̃agua) +pdfjs-bookmark-button-label = Kuatiarogue Ag̃agua +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Embojuruja tembiporu’ípe +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Embojuruja tembiporu’ípe + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Tembiporu +pdfjs-tools-button-label = Tembiporu +pdfjs-first-page-button = + .title = Kuatiarogue ñepyrũme jeho +pdfjs-first-page-button-label = Kuatiarogue ñepyrũme jeho +pdfjs-last-page-button = + .title = Kuatiarogue pahápe jeho +pdfjs-last-page-button-label = Kuatiarogue pahápe jeho +pdfjs-page-rotate-cw-button = + .title = Aravóicha mbojere +pdfjs-page-rotate-cw-button-label = Aravóicha mbojere +pdfjs-page-rotate-ccw-button = + .title = Aravo rapykue gotyo mbojere +pdfjs-page-rotate-ccw-button-label = Aravo rapykue gotyo mbojere +pdfjs-cursor-text-select-tool-button = + .title = Emyandy moñe’ẽrã jeporavo rembiporu +pdfjs-cursor-text-select-tool-button-label = Moñe’ẽrã jeporavo rembiporu +pdfjs-cursor-hand-tool-button = + .title = Tembiporu po pegua myandy +pdfjs-cursor-hand-tool-button-label = Tembiporu po pegua +pdfjs-scroll-page-button = + .title = Eiporu kuatiarogue jeku’e +pdfjs-scroll-page-button-label = Kuatiarogue jeku’e +pdfjs-scroll-vertical-button = + .title = Eiporu jeku’e ykeguáva +pdfjs-scroll-vertical-button-label = Jeku’e ykeguáva +pdfjs-scroll-horizontal-button = + .title = Eiporu jeku’e yvate gotyo +pdfjs-scroll-horizontal-button-label = Jeku’e yvate gotyo +pdfjs-scroll-wrapped-button = + .title = Eiporu jeku’e mbohyrupyre +pdfjs-scroll-wrapped-button-label = Jeku’e mbohyrupyre +pdfjs-spread-none-button = + .title = Ani ejuaju spreads kuatiarogue ndive +pdfjs-spread-none-button-label = Spreads ỹre +pdfjs-spread-odd-button = + .title = Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue impar-vagui +pdfjs-spread-odd-button-label = Spreads impar +pdfjs-spread-even-button = + .title = Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue par-vagui +pdfjs-spread-even-button-label = Ipukuve uvei + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Kuatia mba’etee… +pdfjs-document-properties-button-label = Kuatia mba’etee… +pdfjs-document-properties-file-name = Marandurenda réra: +pdfjs-document-properties-file-size = Marandurenda tuichakue: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Teratee: +pdfjs-document-properties-author = Apohára: +pdfjs-document-properties-subject = Mba’egua: +pdfjs-document-properties-keywords = Jehero: +pdfjs-document-properties-creation-date = Teñoihague arange: +pdfjs-document-properties-modification-date = Iñambue hague arange: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Apo’ypyha: +pdfjs-document-properties-producer = PDF mbosako’iha: +pdfjs-document-properties-version = PDF mbojuehegua: +pdfjs-document-properties-page-count = Kuatiarogue papapy: +pdfjs-document-properties-page-size = Kuatiarogue tuichakue: +pdfjs-document-properties-page-size-unit-inches = Amo +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = Oĩháicha +pdfjs-document-properties-page-size-orientation-landscape = apaisado +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 = Kuatiañe’ẽ +pdfjs-document-properties-page-size-name-legal = Tee + +## 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 = Ñanduti jahecha pya’e: +pdfjs-document-properties-linearized-yes = Añete +pdfjs-document-properties-linearized-no = Ahániri +pdfjs-document-properties-close-button = Mboty + +## Print + +pdfjs-print-progress-message = Embosako’i kuatia emonguatia hag̃ua… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Heja +pdfjs-printing-not-supported = Kyhyjerã: Ñembokuatia ndojokupytypái ko kundahára ndive. +pdfjs-printing-not-ready = Kyhyjerã: Ko PDF nahenyhẽmbái oñembokuatia hag̃uáicha. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Tenda yke moambue +pdfjs-toggle-sidebar-notification-button = + .title = Embojopyru tenda ykegua (kuatia oguereko kuaakaha/moirũha/ñuãha) +pdfjs-toggle-sidebar-button-label = Tenda yke moambue +pdfjs-document-outline-button = + .title = Ehechauka kuatia rape (eikutu mokõi jey embotuicha/emomichĩ hag̃ua opavavete mba’eporu) +pdfjs-document-outline-button-label = Kuatia apopyre +pdfjs-attachments-button = + .title = Moirũha jehechauka +pdfjs-attachments-button-label = Moirũha +pdfjs-layers-button = + .title = Ehechauka ñuãha (eikutu jo’a emomba’apo hag̃ua opaite ñuãha tekoypýpe) +pdfjs-layers-button-label = Ñuãha +pdfjs-thumbs-button = + .title = Mba’emirĩ jehechauka +pdfjs-thumbs-button-label = Mba’emirĩ +pdfjs-current-outline-item-button = + .title = Eheka mba’eporu ag̃aguaitéva +pdfjs-current-outline-item-button-label = Mba’eporu ag̃aguaitéva +pdfjs-findbar-button = + .title = Kuatiápe jeheka +pdfjs-findbar-button-label = Juhu +pdfjs-additional-layers = Ñuãha moirũguáva + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Kuatiarogue { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Kuatiarogue mba’emirĩ { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Juhu + .placeholder = Kuatiápe jejuhu… +pdfjs-find-previous-button = + .title = Ejuhu ñe’ẽrysýi osẽ’ypy hague +pdfjs-find-previous-button-label = Mboyvegua +pdfjs-find-next-button = + .title = Eho ñe’ẽ juhupyre upeiguávape +pdfjs-find-next-button-label = Upeigua +pdfjs-find-highlight-checkbox = Embojekuaavepa +pdfjs-find-match-case-checkbox-label = Ejesareko taiguasu/taimichĩre +pdfjs-find-match-diacritics-checkbox-label = Diacrítico moñondive +pdfjs-find-entire-word-checkbox-label = Ñe’ẽ oĩmbáva +pdfjs-find-reached-top = Ojehupyty kuatia ñepyrũ, oku’ejeýta kuatia paha guive +pdfjs-find-reached-bottom = Ojehupyty kuatia paha, oku’ejeýta kuatia ñepyrũ guive +# 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 } ha { $total } ojueheguáva + *[other] { $current } ha { $total } ojueheguáva + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Hetave { $limit } ojueheguáva + *[other] Hetave { $limit } ojueheguáva + } +pdfjs-find-not-found = Ñe’ẽrysýi ojejuhu’ỹva + +## Predefined zoom values + +pdfjs-page-scale-width = Kuatiarogue pekue +pdfjs-page-scale-fit = Kuatiarogue ñemoĩporã +pdfjs-page-scale-auto = Tuichakue ijeheguíva +pdfjs-page-scale-actual = Tuichakue ag̃agua +# 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 = Kuatiarogue { $page } + +## Loading indicator messages + +pdfjs-loading-error = Oiko jejavy PDF oñemyeñyhẽnguévo. +pdfjs-invalid-file-error = PDF marandurenda ndoikóiva térã ivaipyréva. +pdfjs-missing-file-error = Ndaipóri PDF marandurenda +pdfjs-unexpected-response-error = Mohendahavusu mbohovái eha’ãrõ’ỹva. +pdfjs-rendering-error = Oiko jejavy ehechaukasévo kuatiarogue. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Jehaipy { $type }] + +## Password + +pdfjs-password-label = Emoinge ñe’ẽñemi eipe’a hag̃ua ko marandurenda PDF. +pdfjs-password-invalid = Ñe’ẽñemi ndoikóiva. Eha’ã jey. +pdfjs-password-ok-button = MONEĨ +pdfjs-password-cancel-button = Heja +pdfjs-web-fonts-disabled = Ñanduti taity oñemongéma: ndaikatumo’ãi eiporu PDF jehai’íva taity. + +## Editing + +pdfjs-editor-free-text-button = + .title = Moñe’ẽrã +pdfjs-editor-free-text-button-label = Moñe’ẽrã +pdfjs-editor-ink-button = + .title = Moha’ãnga +pdfjs-editor-ink-button-label = Moha’ãnga +pdfjs-editor-stamp-button = + .title = Embojuaju térã embosako’i ta’ãnga +pdfjs-editor-stamp-button-label = Embojuaju térã embosako’i ta’ãnga +pdfjs-editor-highlight-button = + .title = Mbosa’y +pdfjs-editor-highlight-button-label = Mbosa’y +pdfjs-highlight-floating-button = + .title = Mbosa’y +pdfjs-highlight-floating-button1 = + .title = Mbosa’y + .aria-label = Mbosa’y +pdfjs-highlight-floating-button-label = Mbosa’y + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Emboguete ta’ãnga +pdfjs-editor-remove-freetext-button = + .title = Emboguete moñe’ẽrã +pdfjs-editor-remove-stamp-button = + .title = Emboguete ta’ãnga +pdfjs-editor-remove-highlight-button = + .title = Eipe’a jehechaveha + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Sa’y +pdfjs-editor-free-text-size-input = Tuichakue +pdfjs-editor-ink-color-input = Sa’y +pdfjs-editor-ink-thickness-input = Anambusu +pdfjs-editor-ink-opacity-input = Pytũngy +pdfjs-editor-stamp-add-image-button = + .title = Embojuaju ta’ãnga +pdfjs-editor-stamp-add-image-button-label = Embojuaju ta’ãnga +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Anambusu +pdfjs-editor-free-highlight-thickness-title = + .title = Emoambue anambusukue embosa’ývo mba’eporu ha’e’ỹva moñe’ẽrã +pdfjs-free-text = + .aria-label = Moñe’ẽrã moheñoiha +pdfjs-free-text-default-content = Ehai ñepyrũ… +pdfjs-ink = + .aria-label = Ta’ãnga moheñoiha +pdfjs-ink-canvas = + .aria-label = Ta’ãnga omoheñóiva poruhára + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Moñe’ẽrã mokõiháva +pdfjs-editor-alt-text-edit-button-label = Embojuruja moñe’ẽrã mokõiháva +pdfjs-editor-alt-text-dialog-label = Eiporavo poravorã +pdfjs-editor-alt-text-dialog-description = Moñe’ẽrã ykepegua (moñe’ẽrã ykepegua) nepytyvõ nderehecháiramo ta’ãnga térã nahenyhẽiramo. +pdfjs-editor-alt-text-add-description-label = Embojuaju ñemoha’ãnga +pdfjs-editor-alt-text-add-description-description = Ehaimi 1 térã 2 ñe’ẽjuaju oñe’ẽva pe téma rehe, ijere térã mba’eapóre. +pdfjs-editor-alt-text-mark-decorative-label = Emongurusu jeguakárõ +pdfjs-editor-alt-text-mark-decorative-description = Ojeporu ta’ãnga jeguakarã, tembe’y térã ta’ãnga ruguarãramo. +pdfjs-editor-alt-text-cancel-button = Heja +pdfjs-editor-alt-text-save-button = Ñongatu +pdfjs-editor-alt-text-decorative-tooltip = Jeguakárõ mongurusupyre +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Techapyrã: “Peteĩ mitãrusu oguapy mesápe okaru hag̃ua” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Yvate asu gotyo — emoambue tuichakue +pdfjs-editor-resizer-label-top-middle = Yvate mbytépe — emoambue tuichakue +pdfjs-editor-resizer-label-top-right = Yvate akatúape — emoambue tuichakue +pdfjs-editor-resizer-label-middle-right = Mbyte akatúape — emoambue tuichakue +pdfjs-editor-resizer-label-bottom-right = Yvy gotyo akatúape — emoambue tuichakue +pdfjs-editor-resizer-label-bottom-middle = Yvy gotyo mbytépe — emoambue tuichakue +pdfjs-editor-resizer-label-bottom-left = Iguýpe asu gotyo — emoambue tuichakue +pdfjs-editor-resizer-label-middle-left = Mbyte asu gotyo — emoambue tuichakue + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Jehechaveha sa’y +pdfjs-editor-colorpicker-button = + .title = Emoambue sa’y +pdfjs-editor-colorpicker-dropdown = + .aria-label = Sa’y poravopyrã +pdfjs-editor-colorpicker-yellow = + .title = Sa’yju +pdfjs-editor-colorpicker-green = + .title = Hovyũ +pdfjs-editor-colorpicker-blue = + .title = Hovy +pdfjs-editor-colorpicker-pink = + .title = Pytãngy +pdfjs-editor-colorpicker-red = + .title = Pyha + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Techaukapa +pdfjs-editor-highlight-show-all-button = + .title = Techaukapa diff --git a/static/pdf.js/locale/gn/viewer.properties b/static/pdf.js/locale/gn/viewer.properties deleted file mode 100644 index 0ba9d36c..00000000 --- a/static/pdf.js/locale/gn/viewer.properties +++ /dev/null @@ -1,278 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Kuatiarogue mboyvegua -previous_label=Mboyvegua -next.title=Kuatiarogue upeigua -next_label=Upeigua - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Kuatiarogue -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages={{pagesCount}} gui -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} of {{pagesCount}}) - -zoom_out.title=Momichĩ -zoom_out_label=Momichĩ -zoom_in.title=Mbotuicha -zoom_in_label=Mbotuicha -zoom.title=Tuichakue -presentation_mode.title=Jehechauka reko moambue -presentation_mode_label=Jehechauka reko -open_file.title=Marandurendápe jeike -open_file_label=Jeike -print.title=Monguatia -print_label=Monguatia -save.title=Ñongatu -save_label=Ñongatu -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Mboguejy -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Mboguejy -bookmark1.title=Kuatiarogue ag̃agua (Ehecha URL kuatiarogue ag̃agua) -bookmark1_label=Kuatiarogue Ag̃agua -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Embojuruja tembiporu’ípe -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Embojuruja tembiporu’ípe - -# Secondary toolbar and context menu -tools.title=Tembiporu -tools_label=Tembiporu -first_page.title=Kuatiarogue ñepyrũme jeho -first_page_label=Kuatiarogue ñepyrũme jeho -last_page.title=Kuatiarogue pahápe jeho -last_page_label=Kuatiarogue pahápe jeho -page_rotate_cw.title=Aravóicha mbojere -page_rotate_cw_label=Aravóicha mbojere -page_rotate_ccw.title=Aravo rapykue gotyo mbojere -page_rotate_ccw_label=Aravo rapykue gotyo mbojere - -cursor_text_select_tool.title=Emyandy moñe’ẽrã jeporavo rembiporu -cursor_text_select_tool_label=Moñe’ẽrã jeporavo rembiporu -cursor_hand_tool.title=Tembiporu po pegua myandy -cursor_hand_tool_label=Tembiporu po pegua - -scroll_page.title=Eiporu kuatiarogue jeku’e -scroll_page_label=Kuatiarogue jeku’e -scroll_vertical.title=Eiporu jeku’e ykeguáva -scroll_vertical_label=Jeku’e ykeguáva -scroll_horizontal.title=Eiporu jeku’e yvate gotyo -scroll_horizontal_label=Jeku’e yvate gotyo -scroll_wrapped.title=Eiporu jeku’e mbohyrupyre -scroll_wrapped_label=Jeku’e mbohyrupyre - -spread_none.title=Ani ejuaju spreads kuatiarogue ndive -spread_none_label=Spreads ỹre -spread_odd.title=Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue impar-vagui -spread_odd_label=Spreads impar -spread_even.title=Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue par-vagui -spread_even_label=Ipukuve uvei - -# Document properties dialog box -document_properties.title=Kuatia mba’etee… -document_properties_label=Kuatia mba’etee… -document_properties_file_name=Marandurenda réra: -document_properties_file_size=Marandurenda tuichakue: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Teratee: -document_properties_author=Apohára: -document_properties_subject=Mba’egua: -document_properties_keywords=Jehero: -document_properties_creation_date=Teñoihague arange: -document_properties_modification_date=Iñambue hague arange: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Apo’ypyha: -document_properties_producer=PDF mbosako’iha: -document_properties_version=PDF mbojuehegua: -document_properties_page_count=Kuatiarogue papapy: -document_properties_page_size=Kuatiarogue tuichakue: -document_properties_page_size_unit_inches=Amo -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=Oĩháicha -document_properties_page_size_orientation_landscape=apaisado -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Kuatiañe’ẽ -document_properties_page_size_name_legal=Tee -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Ñanduti jahecha pya’e: -document_properties_linearized_yes=Añete -document_properties_linearized_no=Ahániri -document_properties_close=Mboty - -print_progress_message=Embosako’i kuatia emonguatia hag̃ua… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Heja - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Tenda yke moambue -toggle_sidebar_notification2.title=Embojopyru tenda ykegua (kuatia oguereko kuaakaha/moirũha/ñuãha) -toggle_sidebar_label=Tenda yke moambue -document_outline.title=Ehechauka kuatia rape (eikutu mokõi jey embotuicha/emomichĩ hag̃ua opavavete mba’eporu) -document_outline_label=Kuatia apopyre -attachments.title=Moirũha jehechauka -attachments_label=Moirũha -layers.title=Ehechauka ñuãha (eikutu jo’a emomba’apo hag̃ua opaite ñuãha tekoypýpe) -layers_label=Ñuãha -thumbs.title=Mba’emirĩ jehechauka -thumbs_label=Mba’emirĩ -current_outline_item.title=Eheka mba’eporu ag̃aguaitéva -current_outline_item_label=Mba’eporu ag̃aguaitéva -findbar.title=Kuatiápe jeheka -findbar_label=Juhu - -additional_layers=Ñuãha moirũguáva -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Kuatiarogue {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Kuatiarogue {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Kuatiarogue mba’emirĩ {{page}} - -# Find panel button title and messages -find_input.title=Juhu -find_input.placeholder=Kuatiápe jejuhu… -find_previous.title=Ejuhu ñe’ẽrysýi osẽ’ypy hague -find_previous_label=Mboyvegua -find_next.title=Eho ñe’ẽ juhupyre upeiguávape -find_next_label=Upeigua -find_highlight=Embojekuaavepa -find_match_case_label=Ejesareko taiguasu/taimichĩre -find_match_diacritics_label=Diacrítico moñondive -find_entire_word_label=Ñe’ẽ oĩmbáva -find_reached_top=Ojehupyty kuatia ñepyrũ, oku’ejeýta kuatia paha guive -find_reached_bottom=Ojehupyty kuatia paha, oku’ejeýta kuatia ñepyrũ guive -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} {{total}} ojojoguáva -find_match_count[two]={{current}} {{total}} ojojoguáva -find_match_count[few]={{current}} {{total}} ojojoguáva -find_match_count[many]={{current}} {{total}} ojojoguáva -find_match_count[other]={{current}} {{total}} ojojoguáva -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Hetave {{limit}} ojojoguáva -find_match_count_limit[one]=Hetave {{limit}} ojojogua -find_match_count_limit[two]=Hetave {{limit}} ojojoguáva -find_match_count_limit[few]=Hetave {{limit}} ojojoguáva -find_match_count_limit[many]=Hetave {{limit}} ojojoguáva -find_match_count_limit[other]=Hetave {{limit}} ojojoguáva -find_not_found=Ñe’ẽrysýi ojejuhu’ỹva - -# Predefined zoom values -page_scale_width=Kuatiarogue pekue -page_scale_fit=Kuatiarogue ñemoĩporã -page_scale_auto=Tuichakue ijeheguíva -page_scale_actual=Tuichakue ag̃agua -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Oiko jejavy PDF oñemyeñyhẽnguévo. -invalid_file_error=PDF marandurenda ndoikóiva térã ivaipyréva. -missing_file_error=Ndaipóri PDF marandurenda -unexpected_response_error=Mohendahavusu mbohovái ñeha’arõ’ỹva. -rendering_error=Oiko jejavy ehechaukasévo kuatiarogue. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Jehaipy {{type}}] -password_label=Emoinge ñe’ẽñemi eipe’a hag̃ua ko marandurenda PDF. -password_invalid=Ñe’ẽñemi ndoikóiva. Eha’ã jey. -password_ok=MONEĨ -password_cancel=Heja - -printing_not_supported=Kyhyjerã: Ñembokuatia ndojokupytypái ko kundahára ndive. -printing_not_ready=Kyhyjerã: Ko PDF nahenyhẽmbái oñembokuatia hag̃uáicha. -web_fonts_disabled=Ñanduti taity oñemongéma: ndaikatumo’ãi eiporu PDF jehai’íva taity. - -# Editor -editor_free_text2.title=Moñe’ẽrã -editor_free_text2_label=Moñe’ẽrã -editor_ink2.title=Moha’ãnga -editor_ink2_label=Moha’ãnga - -editor_stamp1.title=Embojuaju térã embosako’i ta’ãnga -editor_stamp1_label=Embojuaju térã embosako’i ta’ãnga - -free_text2_default_content=Ehai ñepyrũ… - -# Editor Parameters -editor_free_text_color=Sa’y -editor_free_text_size=Tuichakue -editor_ink_color=Sa’y -editor_ink_thickness=Anambusu -editor_ink_opacity=Pytũngy - -editor_stamp_add_image_label=Embojuaju ta’ãnga -editor_stamp_add_image.title=Embojuaju ta’ãnga - -# Editor aria -editor_free_text2_aria_label=Moñe’ẽrã moheñoiha -editor_ink2_aria_label=Ta’ãnga moheñoiha -editor_ink_canvas_aria_label=Ta’ãnga omoheñóiva poruhára - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Moñe’ẽrã mokõiháva -editor_alt_text_edit_button_label=Embojuruja moñe’ẽrã mokõiháva -editor_alt_text_dialog_label=Eiporavo poravorã -editor_alt_text_add_description_label=Embojuaju ñemoha’anga -editor_alt_text_cancel_button=Heja -editor_alt_text_save_button=Ñongatu -# This is a placeholder for the alt text input area diff --git a/static/pdf.js/locale/gu-IN/viewer.ftl b/static/pdf.js/locale/gu-IN/viewer.ftl new file mode 100644 index 00000000..5d8bb549 --- /dev/null +++ b/static/pdf.js/locale/gu-IN/viewer.ftl @@ -0,0 +1,247 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = રજૂઆત સ્થિતિમાં જાવ +pdfjs-presentation-mode-button-label = રજૂઆત સ્થિતિ +pdfjs-open-file-button = + .title = ફાઇલ ખોલો +pdfjs-open-file-button-label = ખોલો +pdfjs-print-button = + .title = છાપો +pdfjs-print-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-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 = આવરિત સ્ક્રોલિંગ +pdfjs-spread-none-button = + .title = પૃષ્ઠ સ્પ્રેડમાં જોડાવશો નહીં +pdfjs-spread-none-button-label = કોઈ સ્પ્રેડ નથી +pdfjs-spread-odd-button = + .title = એકી-ક્રમાંકિત પૃષ્ઠો સાથે પ્રારંભ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ +pdfjs-spread-odd-button-label = એકી સ્પ્રેડ્સ +pdfjs-spread-even-button = + .title = નંબર-ક્રમાંકિત પૃષ્ઠોથી શરૂ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ +pdfjs-spread-even-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 = ફાઇલ માપ: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } બાઇટ) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } બાઇટ) +pdfjs-document-properties-title = શીર્ષક: +pdfjs-document-properties-author = લેખક: +pdfjs-document-properties-subject = વિષય: +pdfjs-document-properties-keywords = કિવર્ડ: +pdfjs-document-properties-creation-date = નિર્માણ તારીખ: +pdfjs-document-properties-modification-date = ફેરફાર તારીખ: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = ઉભું +pdfjs-document-properties-page-size-orientation-landscape = આડુ +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = પત્ર +pdfjs-document-properties-page-size-name-legal = કાયદાકીય + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = ઝડપી વૅબ દૃશ્ય: +pdfjs-document-properties-linearized-yes = હા +pdfjs-document-properties-linearized-no = ના +pdfjs-document-properties-close-button = બંધ કરો + +## Print + +pdfjs-print-progress-message = છાપકામ માટે દસ્તાવેજ તૈયાર કરી રહ્યા છે… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = રદ કરો +pdfjs-printing-not-supported = ચેતવણી: છાપવાનું આ બ્રાઉઝર દ્દારા સંપૂર્ણપણે આધારભૂત નથી. +pdfjs-printing-not-ready = Warning: PDF એ છાપવા માટે સંપૂર્ણપણે લાવેલ છે. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = ટૉગલ બાજુપટ્ટી +pdfjs-toggle-sidebar-button-label = ટૉગલ બાજુપટ્ટી +pdfjs-document-outline-button = + .title = દસ્તાવેજની રૂપરેખા બતાવો(બધી આઇટમ્સને વિસ્તૃત/સંકુચિત કરવા માટે ડબલ-ક્લિક કરો) +pdfjs-document-outline-button-label = દસ્તાવેજ રૂપરેખા +pdfjs-attachments-button = + .title = જોડાણોને બતાવો +pdfjs-attachments-button-label = જોડાણો +pdfjs-thumbs-button = + .title = થંબનેલ્સ બતાવો +pdfjs-thumbs-button-label = થંબનેલ્સ +pdfjs-findbar-button = + .title = દસ્તાવેજમાં શોધો +pdfjs-findbar-button-label = શોધો + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = પાનું { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = પાનાં { $page } નું થંબનેલ્સ + +## Find panel button title and messages + +pdfjs-find-input = + .title = શોધો + .placeholder = દસ્તાવેજમાં શોધો… +pdfjs-find-previous-button = + .title = શબ્દસમૂહની પાછલી ઘટનાને શોધો +pdfjs-find-previous-button-label = પહેલાંનુ +pdfjs-find-next-button = + .title = શબ્દસમૂહની આગળની ઘટનાને શોધો +pdfjs-find-next-button-label = આગળનું +pdfjs-find-highlight-checkbox = બધુ પ્રકાશિત કરો +pdfjs-find-match-case-checkbox-label = કેસ બંધબેસાડો +pdfjs-find-entire-word-checkbox-label = સંપૂર્ણ શબ્દો +pdfjs-find-reached-top = દસ્તાવેજનાં ટોચે પહોંચી ગયા, તળિયેથી ચાલુ કરેલ હતુ +pdfjs-find-reached-bottom = દસ્તાવેજનાં અંતે પહોંચી ગયા, ઉપરથી ચાલુ કરેલ હતુ +pdfjs-find-not-found = શબ્દસમૂહ મળ્યુ નથી + +## 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 + + +## Loading indicator messages + +pdfjs-loading-error = ભૂલ ઉદ્ભવી જ્યારે PDF ને લાવી રહ્યા હોય. +pdfjs-invalid-file-error = અયોગ્ય અથવા ભાંગેલ PDF ફાઇલ. +pdfjs-missing-file-error = ગુમ થયેલ PDF ફાઇલ. +pdfjs-unexpected-response-error = અનપેક્ષિત સર્વર પ્રતિસાદ. +pdfjs-rendering-error = ભૂલ ઉદ્ભવી જ્યારે પાનાંનુ રેન્ડ કરી રહ્યા હોય. + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Annotation] + +## Password + +pdfjs-password-label = આ PDF ફાઇલને ખોલવા પાસવર્ડને દાખલ કરો. +pdfjs-password-invalid = અયોગ્ય પાસવર્ડ. મહેરબાની કરીને ફરી પ્રયત્ન કરો. +pdfjs-password-ok-button = બરાબર +pdfjs-password-cancel-button = રદ કરો +pdfjs-web-fonts-disabled = વેબ ફોન્ટ નિષ્ક્રિય થયેલ છે: ઍમ્બેડ થયેલ PDF ફોન્ટને વાપરવાનું અસમર્થ. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/gu-IN/viewer.properties b/static/pdf.js/locale/gu-IN/viewer.properties deleted file mode 100644 index ebb75808..00000000 --- a/static/pdf.js/locale/gu-IN/viewer.properties +++ /dev/null @@ -1,214 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=પહેલાનુ પાનું -previous_label=પહેલાનુ -next.title=આગળનુ પાનું -next_label=આગળનું - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=પાનું -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=નો {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} નો {{pagesCount}}) - -zoom_out.title=મોટુ કરો -zoom_out_label=મોટુ કરો -zoom_in.title=નાનું કરો -zoom_in_label=નાનું કરો -zoom.title=નાનું મોટુ કરો -presentation_mode.title=રજૂઆત સ્થિતિમાં જાવ -presentation_mode_label=રજૂઆત સ્થિતિ -open_file.title=ફાઇલ ખોલો -open_file_label=ખોલો -print.title=છાપો -print_label=છારો - -# Secondary toolbar and context menu -tools.title=સાધનો -tools_label=સાધનો -first_page.title=પહેલાં પાનામાં જાવ -first_page_label=પ્રથમ પાનાં પર જાવ -last_page.title=છેલ્લા પાનાં પર જાવ -last_page_label=છેલ્લા પાનાં પર જાવ -page_rotate_cw.title=ઘડિયાળનાં કાંટા તરફ ફેરવો -page_rotate_cw_label=ઘડિયાળનાં કાંટા તરફ ફેરવો -page_rotate_ccw.title=ઘડિયાળનાં કાંટાની ઉલટી દિશામાં ફેરવો -page_rotate_ccw_label=ઘડિયાળનાં કાંટાની વિરુદ્દ ફેરવો - -cursor_text_select_tool.title=ટેક્સ્ટ પસંદગી ટૂલ સક્ષમ કરો -cursor_text_select_tool_label=ટેક્સ્ટ પસંદગી ટૂલ -cursor_hand_tool.title=હાથનાં સાધનને સક્રિય કરો -cursor_hand_tool_label=હેન્ડ ટૂલ - -scroll_vertical.title=ઊભી સ્ક્રોલિંગનો ઉપયોગ કરો -scroll_vertical_label=ઊભી સ્ક્રોલિંગ -scroll_horizontal.title=આડી સ્ક્રોલિંગનો ઉપયોગ કરો -scroll_horizontal_label=આડી સ્ક્રોલિંગ -scroll_wrapped.title=આવરિત સ્ક્રોલિંગનો ઉપયોગ કરો -scroll_wrapped_label=આવરિત સ્ક્રોલિંગ - -spread_none.title=પૃષ્ઠ સ્પ્રેડમાં જોડાવશો નહીં -spread_none_label=કોઈ સ્પ્રેડ નથી -spread_odd.title=એકી-ક્રમાંકિત પૃષ્ઠો સાથે પ્રારંભ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ -spread_odd_label=એકી સ્પ્રેડ્સ -spread_even.title=નંબર-ક્રમાંકિત પૃષ્ઠોથી શરૂ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ -spread_even_label=સરખું ફેલાવવું - -# Document properties dialog box -document_properties.title=દસ્તાવેજ ગુણધર્મો… -document_properties_label=દસ્તાવેજ ગુણધર્મો… -document_properties_file_name=ફાઇલ નામ: -document_properties_file_size=ફાઇલ માપ: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} બાઇટ) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} બાઇટ) -document_properties_title=શીર્ષક: -document_properties_author=લેખક: -document_properties_subject=વિષય: -document_properties_keywords=કિવર્ડ: -document_properties_creation_date=નિર્માણ તારીખ: -document_properties_modification_date=ફેરફાર તારીખ: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=નિર્માતા: -document_properties_producer=PDF નિર્માતા: -document_properties_version=PDF આવૃત્તિ: -document_properties_page_count=પાનાં ગણતરી: -document_properties_page_size=પૃષ્ઠનું કદ: -document_properties_page_size_unit_inches=ઇંચ -document_properties_page_size_unit_millimeters=મીમી -document_properties_page_size_orientation_portrait=ઉભું -document_properties_page_size_orientation_landscape=આડુ -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=પત્ર -document_properties_page_size_name_legal=કાયદાકીય -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=ઝડપી વૅબ દૃશ્ય: -document_properties_linearized_yes=હા -document_properties_linearized_no=ના -document_properties_close=બંધ કરો - -print_progress_message=છાપકામ માટે દસ્તાવેજ તૈયાર કરી રહ્યા છે… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=રદ કરો - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=ટૉગલ બાજુપટ્ટી -toggle_sidebar_label=ટૉગલ બાજુપટ્ટી -document_outline.title=દસ્તાવેજની રૂપરેખા બતાવો(બધી આઇટમ્સને વિસ્તૃત/સંકુચિત કરવા માટે ડબલ-ક્લિક કરો) -document_outline_label=દસ્તાવેજ રૂપરેખા -attachments.title=જોડાણોને બતાવો -attachments_label=જોડાણો -thumbs.title=થંબનેલ્સ બતાવો -thumbs_label=થંબનેલ્સ -findbar.title=દસ્તાવેજમાં શોધો -findbar_label=શોધો - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=પાનું {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=પાનાં {{page}} નું થંબનેલ્સ - -# Find panel button title and messages -find_input.title=શોધો -find_input.placeholder=દસ્તાવેજમાં શોધો… -find_previous.title=શબ્દસમૂહની પાછલી ઘટનાને શોધો -find_previous_label=પહેલાંનુ -find_next.title=શબ્દસમૂહની આગળની ઘટનાને શોધો -find_next_label=આગળનું -find_highlight=બધુ પ્રકાશિત કરો -find_match_case_label=કેસ બંધબેસાડો -find_entire_word_label=સંપૂર્ણ શબ્દો -find_reached_top=દસ્તાવેજનાં ટોચે પહોંચી ગયા, તળિયેથી ચાલુ કરેલ હતુ -find_reached_bottom=દસ્તાવેજનાં અંતે પહોંચી ગયા, ઉપરથી ચાલુ કરેલ હતુ -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{total}} માંથી {{current}} સરખું મળ્યું -find_match_count[two]={{total}} માંથી {{current}} સરખા મળ્યાં -find_match_count[few]={{total}} માંથી {{current}} સરખા મળ્યાં -find_match_count[many]={{total}} માંથી {{current}} સરખા મળ્યાં -find_match_count[other]={{total}} માંથી {{current}} સરખા મળ્યાં -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]={{limit}} કરતાં વધુ સરખા મળ્યાં -find_match_count_limit[one]={{limit}} કરતાં વધુ સરખું મળ્યું -find_match_count_limit[two]={{limit}} કરતાં વધુ સરખા મળ્યાં -find_match_count_limit[few]={{limit}} કરતાં વધુ સરખા મળ્યાં -find_match_count_limit[many]={{limit}} કરતાં વધુ સરખા મળ્યાં -find_match_count_limit[other]={{limit}} કરતાં વધુ સરખા મળ્યાં -find_not_found=શબ્દસમૂહ મળ્યુ નથી - -# Predefined zoom values -page_scale_width=પાનાની પહોળાઇ -page_scale_fit=પાનું બંધબેસતુ -page_scale_auto=આપમેળે નાનુંમોટુ કરો -page_scale_actual=ચોક્કસ માપ -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=ભૂલ ઉદ્ભવી જ્યારે PDF ને લાવી રહ્યા હોય. -invalid_file_error=અયોગ્ય અથવા ભાંગેલ PDF ફાઇલ. -missing_file_error=ગુમ થયેલ PDF ફાઇલ. -unexpected_response_error=અનપેક્ષિત સર્વર પ્રતિસાદ. - -rendering_error=ભૂલ ઉદ્ભવી જ્યારે પાનાંનુ રેન્ડ કરી રહ્યા હોય. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Annotation] -password_label=આ PDF ફાઇલને ખોલવા પાસવર્ડને દાખલ કરો. -password_invalid=અયોગ્ય પાસવર્ડ. મહેરબાની કરીને ફરી પ્રયત્ન કરો. -password_ok=બરાબર -password_cancel=રદ કરો - -printing_not_supported=ચેતવણી: છાપવાનું આ બ્રાઉઝર દ્દારા સંપૂર્ણપણે આધારભૂત નથી. -printing_not_ready=Warning: PDF એ છાપવા માટે સંપૂર્ણપણે લાવેલ છે. -web_fonts_disabled=વેબ ફોન્ટ નિષ્ક્રિય થયેલ છે: ઍમ્બેડ થયેલ PDF ફોન્ટને વાપરવાનું અસમર્થ. - diff --git a/static/pdf.js/locale/he/viewer.ftl b/static/pdf.js/locale/he/viewer.ftl new file mode 100644 index 00000000..624d2083 --- /dev/null +++ b/static/pdf.js/locale/he/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = מעבר למצב מצגת +pdfjs-presentation-mode-button-label = מצב מצגת +pdfjs-open-file-button = + .title = פתיחת קובץ +pdfjs-open-file-button-label = פתיחה +pdfjs-print-button = + .title = הדפסה +pdfjs-print-button-label = הדפסה +pdfjs-save-button = + .title = שמירה +pdfjs-save-button-label = שמירה +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = הורדה +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = הורדה +pdfjs-bookmark-button = + .title = עמוד נוכחי (הצגת כתובת האתר מהעמוד הנוכחי) +pdfjs-bookmark-button-label = עמוד נוכחי +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = פתיחה ביישום +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-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 = גלילה רציפה +pdfjs-spread-none-button = + .title = לא לצרף מפתחי עמודים +pdfjs-spread-none-button-label = ללא מפתחים +pdfjs-spread-odd-button = + .title = צירוף מפתחי עמודים שמתחילים בדפים עם מספרים אי־זוגיים +pdfjs-spread-odd-button-label = מפתחים אי־זוגיים +pdfjs-spread-even-button = + .title = צירוף מפתחי עמודים שמתחילים בדפים עם מספרים זוגיים +pdfjs-spread-even-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 = גודל הקובץ: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } ק״ב ({ $size_b } בתים) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } מ״ב ({ $size_b } בתים) +pdfjs-document-properties-title = כותרת: +pdfjs-document-properties-author = מחבר: +pdfjs-document-properties-subject = נושא: +pdfjs-document-properties-keywords = מילות מפתח: +pdfjs-document-properties-creation-date = תאריך יצירה: +pdfjs-document-properties-modification-date = תאריך שינוי: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = לאורך +pdfjs-document-properties-page-size-orientation-landscape = לרוחב +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = מכתב +pdfjs-document-properties-page-size-name-legal = דף משפטי + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = תצוגת דף מהירה: +pdfjs-document-properties-linearized-yes = כן +pdfjs-document-properties-linearized-no = לא +pdfjs-document-properties-close-button = סגירה + +## Print + +pdfjs-print-progress-message = מסמך בהכנה להדפסה… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = ביטול +pdfjs-printing-not-supported = אזהרה: הדפסה אינה נתמכת במלואה בדפדפן זה. +pdfjs-printing-not-ready = אזהרה: מסמך ה־PDF לא נטען לחלוטין עד מצב שמאפשר הדפסה. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = הצגה/הסתרה של סרגל הצד +pdfjs-toggle-sidebar-notification-button = + .title = החלפת תצוגת סרגל צד (מסמך שמכיל תוכן עניינים/קבצים מצורפים/שכבות) +pdfjs-toggle-sidebar-button-label = הצגה/הסתרה של סרגל הצד +pdfjs-document-outline-button = + .title = הצגת תוכן העניינים של המסמך (לחיצה כפולה כדי להרחיב או לצמצם את כל הפריטים) +pdfjs-document-outline-button-label = תוכן העניינים של המסמך +pdfjs-attachments-button = + .title = הצגת צרופות +pdfjs-attachments-button-label = צרופות +pdfjs-layers-button = + .title = הצגת שכבות (יש ללחוץ לחיצה כפולה כדי לאפס את כל השכבות למצב ברירת המחדל) +pdfjs-layers-button-label = שכבות +pdfjs-thumbs-button = + .title = הצגת תצוגה מקדימה +pdfjs-thumbs-button-label = תצוגה מקדימה +pdfjs-current-outline-item-button = + .title = מציאת פריט תוכן העניינים הנוכחי +pdfjs-current-outline-item-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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = תצוגה מקדימה של עמוד { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = חיפוש + .placeholder = חיפוש במסמך… +pdfjs-find-previous-button = + .title = מציאת המופע הקודם של הביטוי +pdfjs-find-previous-button-label = קודם +pdfjs-find-next-button = + .title = מציאת המופע הבא של הביטוי +pdfjs-find-next-button-label = הבא +pdfjs-find-highlight-checkbox = הדגשת הכול +pdfjs-find-match-case-checkbox-label = התאמת אותיות +pdfjs-find-match-diacritics-checkbox-label = התאמה דיאקריטית +pdfjs-find-entire-word-checkbox-label = מילים שלמות +pdfjs-find-reached-top = הגיע לראש הדף, ממשיך מלמטה +pdfjs-find-reached-bottom = הגיע לסוף הדף, ממשיך מלמעלה +# 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 } מתוך { $total } תוצאות + *[other] { $current } מתוך { $total } תוצאות + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] יותר מתוצאה אחת + *[other] יותר מ־{ $limit } תוצאות + } +pdfjs-find-not-found = הביטוי לא נמצא + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = אירעה שגיאה בעת טעינת ה־PDF. +pdfjs-invalid-file-error = קובץ PDF פגום או לא תקין. +pdfjs-missing-file-error = קובץ PDF חסר. +pdfjs-unexpected-response-error = תגובת שרת לא צפויה. +pdfjs-rendering-error = אירעה שגיאה בעת עיבוד הדף. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [הערת { $type }] + +## Password + +pdfjs-password-label = נא להכניס את הססמה לפתיחת קובץ PDF זה. +pdfjs-password-invalid = ססמה שגויה. נא לנסות שנית. +pdfjs-password-ok-button = אישור +pdfjs-password-cancel-button = ביטול +pdfjs-web-fonts-disabled = גופני רשת מנוטרלים: לא ניתן להשתמש בגופני PDF מוטבעים. + +## Editing + +pdfjs-editor-free-text-button = + .title = טקסט +pdfjs-editor-free-text-button-label = טקסט +pdfjs-editor-ink-button = + .title = ציור +pdfjs-editor-ink-button-label = ציור +pdfjs-editor-stamp-button = + .title = הוספה או עריכת תמונות +pdfjs-editor-stamp-button-label = הוספה או עריכת תמונות +pdfjs-editor-highlight-button = + .title = סימון +pdfjs-editor-highlight-button-label = סימון +pdfjs-highlight-floating-button = + .title = סימון +pdfjs-highlight-floating-button1 = + .title = סימון + .aria-label = סימון +pdfjs-highlight-floating-button-label = סימון + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = הסרת ציור +pdfjs-editor-remove-freetext-button = + .title = הסרת טקסט +pdfjs-editor-remove-stamp-button = + .title = הסרת תמונה +pdfjs-editor-remove-highlight-button = + .title = הסרת הדגשה + +## + +# 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 = אטימות +pdfjs-editor-stamp-add-image-button = + .title = הוספת תמונה +pdfjs-editor-stamp-add-image-button-label = הוספת תמונה +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = עובי +pdfjs-editor-free-highlight-thickness-title = + .title = שינוי עובי בעת הדגשת פריטים שאינם טקסט +pdfjs-free-text = + .aria-label = עורך טקסט +pdfjs-free-text-default-content = להתחיל להקליד… +pdfjs-ink = + .aria-label = עורך ציור +pdfjs-ink-canvas = + .aria-label = תמונה שנוצרה על־ידי משתמש + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = טקסט חלופי +pdfjs-editor-alt-text-edit-button-label = עריכת טקסט חלופי +pdfjs-editor-alt-text-dialog-label = בחירת אפשרות +pdfjs-editor-alt-text-dialog-description = טקסט חלופי עוזר כשאנשים לא יכולים לראות את התמונה או כשהיא לא נטענת. +pdfjs-editor-alt-text-add-description-label = הוספת תיאור +pdfjs-editor-alt-text-add-description-description = כדאי לתאר במשפט אחד או שניים את הנושא, התפאורה או הפעולות. +pdfjs-editor-alt-text-mark-decorative-label = סימון כדקורטיבי +pdfjs-editor-alt-text-mark-decorative-description = זה משמש לתמונות נוי, כמו גבולות או סימני מים. +pdfjs-editor-alt-text-cancel-button = ביטול +pdfjs-editor-alt-text-save-button = שמירה +pdfjs-editor-alt-text-decorative-tooltip = מסומן כדקורטיבי +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = לדוגמה, ״גבר צעיר מתיישב ליד שולחן לאכול ארוחה״ + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = פינה שמאלית עליונה - שינוי גודל +pdfjs-editor-resizer-label-top-middle = למעלה באמצע - שינוי גודל +pdfjs-editor-resizer-label-top-right = פינה ימנית עליונה - שינוי גודל +pdfjs-editor-resizer-label-middle-right = ימינה באמצע - שינוי גודל +pdfjs-editor-resizer-label-bottom-right = פינה ימנית תחתונה - שינוי גודל +pdfjs-editor-resizer-label-bottom-middle = למטה באמצע - שינוי גודל +pdfjs-editor-resizer-label-bottom-left = פינה שמאלית תחתונה - שינוי גודל +pdfjs-editor-resizer-label-middle-left = שמאלה באמצע - שינוי גודל + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = צבע הדגשה +pdfjs-editor-colorpicker-button = + .title = שינוי צבע +pdfjs-editor-colorpicker-dropdown = + .aria-label = בחירת צבע +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 = הצגת הכול diff --git a/static/pdf.js/locale/he/viewer.properties b/static/pdf.js/locale/he/viewer.properties deleted file mode 100644 index 306ff703..00000000 --- a/static/pdf.js/locale/he/viewer.properties +++ /dev/null @@ -1,283 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=דף קודם -previous_label=קודם -next.title=דף הבא -next_label=הבא - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=דף -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=מתוך {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} מתוך {{pagesCount}}) - -zoom_out.title=התרחקות -zoom_out_label=התרחקות -zoom_in.title=התקרבות -zoom_in_label=התקרבות -zoom.title=מרחק מתצוגה -presentation_mode.title=מעבר למצב מצגת -presentation_mode_label=מצב מצגת -open_file.title=פתיחת קובץ -open_file_label=פתיחה -print.title=הדפסה -print_label=הדפסה -save.title=שמירה -save_label=שמירה -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=הורדה -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=הורדה -bookmark1_label=עמוד נוכחי -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=פתיחה ביישום -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=פתיחה ביישום - -# Secondary toolbar and context menu -tools.title=כלים -tools_label=כלים -first_page.title=מעבר לעמוד הראשון -first_page_label=מעבר לעמוד הראשון -last_page.title=מעבר לעמוד האחרון -last_page_label=מעבר לעמוד האחרון -page_rotate_cw.title=הטיה עם כיוון השעון -page_rotate_cw_label=הטיה עם כיוון השעון -page_rotate_ccw.title=הטיה כנגד כיוון השעון -page_rotate_ccw_label=הטיה כנגד כיוון השעון - -cursor_text_select_tool.title=הפעלת כלי בחירת טקסט -cursor_text_select_tool_label=כלי בחירת טקסט -cursor_hand_tool.title=הפעלת כלי היד -cursor_hand_tool_label=כלי יד - -scroll_page.title=שימוש בגלילת עמוד -scroll_page_label=גלילת עמוד -scroll_vertical.title=שימוש בגלילה אנכית -scroll_vertical_label=גלילה אנכית -scroll_horizontal.title=שימוש בגלילה אופקית -scroll_horizontal_label=גלילה אופקית -scroll_wrapped.title=שימוש בגלילה רציפה -scroll_wrapped_label=גלילה רציפה - -spread_none.title=לא לצרף מפתחי עמודים -spread_none_label=ללא מפתחים -spread_odd.title=צירוף מפתחי עמודים שמתחילים בדפים עם מספרים אי־זוגיים -spread_odd_label=מפתחים אי־זוגיים -spread_even.title=צירוף מפתחי עמודים שמתחילים בדפים עם מספרים זוגיים -spread_even_label=מפתחים זוגיים - -# Document properties dialog box -document_properties.title=מאפייני מסמך… -document_properties_label=מאפייני מסמך… -document_properties_file_name=שם קובץ: -document_properties_file_size=גודל הקובץ: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} ק״ב ({{size_b}} בתים) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} מ״ב ({{size_b}} בתים) -document_properties_title=כותרת: -document_properties_author=מחבר: -document_properties_subject=נושא: -document_properties_keywords=מילות מפתח: -document_properties_creation_date=תאריך יצירה: -document_properties_modification_date=תאריך שינוי: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=יוצר: -document_properties_producer=יצרן PDF: -document_properties_version=גרסת PDF: -document_properties_page_count=מספר דפים: -document_properties_page_size=גודל העמוד: -document_properties_page_size_unit_inches=אינ׳ -document_properties_page_size_unit_millimeters=מ״מ -document_properties_page_size_orientation_portrait=לאורך -document_properties_page_size_orientation_landscape=לרוחב -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=מכתב -document_properties_page_size_name_legal=דף משפטי -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=תצוגת דף מהירה: -document_properties_linearized_yes=כן -document_properties_linearized_no=לא -document_properties_close=סגירה - -print_progress_message=מסמך בהכנה להדפסה… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=ביטול - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=הצגה/הסתרה של סרגל הצד -toggle_sidebar_notification2.title=החלפת תצוגת סרגל צד (מסמך שמכיל תוכן עניינים/קבצים מצורפים/שכבות) -toggle_sidebar_label=הצגה/הסתרה של סרגל הצד -document_outline.title=הצגת תוכן העניינים של המסמך (לחיצה כפולה כדי להרחיב או לצמצם את כל הפריטים) -document_outline_label=תוכן העניינים של המסמך -attachments.title=הצגת צרופות -attachments_label=צרופות -layers.title=הצגת שכבות (יש ללחוץ לחיצה כפולה כדי לאפס את כל השכבות למצב ברירת המחדל) -layers_label=שכבות -thumbs.title=הצגת תצוגה מקדימה -thumbs_label=תצוגה מקדימה -current_outline_item.title=מציאת פריט תוכן העניינים הנוכחי -current_outline_item_label=פריט תוכן העניינים הנוכחי -findbar.title=חיפוש במסמך -findbar_label=חיפוש - -additional_layers=שכבות נוספות -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=עמוד {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=עמוד {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=תצוגה מקדימה של עמוד {{page}} - -# Find panel button title and messages -find_input.title=חיפוש -find_input.placeholder=חיפוש במסמך… -find_previous.title=מציאת המופע הקודם של הביטוי -find_previous_label=קודם -find_next.title=מציאת המופע הבא של הביטוי -find_next_label=הבא -find_highlight=הדגשת הכול -find_match_case_label=התאמת אותיות -find_match_diacritics_label=התאמה דיאקריטית -find_entire_word_label=מילים שלמות -find_reached_top=הגיע לראש הדף, ממשיך מלמטה -find_reached_bottom=הגיע לסוף הדף, ממשיך מלמעלה -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]=תוצאה {{current}} מתוך {{total}} -find_match_count[two]={{current}} מתוך {{total}} תוצאות -find_match_count[few]={{current}} מתוך {{total}} תוצאות -find_match_count[many]={{current}} מתוך {{total}} תוצאות -find_match_count[other]={{current}} מתוך {{total}} תוצאות -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=יותר מ־{{limit}} תוצאות -find_match_count_limit[one]=יותר מתוצאה אחת -find_match_count_limit[two]=יותר מ־{{limit}} תוצאות -find_match_count_limit[few]=יותר מ־{{limit}} תוצאות -find_match_count_limit[many]=יותר מ־{{limit}} תוצאות -find_match_count_limit[other]=יותר מ־{{limit}} תוצאות -find_not_found=הביטוי לא נמצא - -# Predefined zoom values -page_scale_width=רוחב העמוד -page_scale_fit=התאמה לעמוד -page_scale_auto=מרחק מתצוגה אוטומטי -page_scale_actual=גודל אמיתי -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=אירעה שגיאה בעת טעינת ה־PDF. -invalid_file_error=קובץ PDF פגום או לא תקין. -missing_file_error=קובץ PDF חסר. -unexpected_response_error=תגובת שרת לא צפויה. -rendering_error=אירעה שגיאה בעת עיבוד הדף. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[הערת {{type}}] -password_label=נא להכניס את הססמה לפתיחת קובץ PDF זה. -password_invalid=ססמה שגויה. נא לנסות שנית. -password_ok=אישור -password_cancel=ביטול - -printing_not_supported=אזהרה: הדפסה אינה נתמכת במלואה בדפדפן זה. -printing_not_ready=אזהרה: מסמך ה־PDF לא נטען לחלוטין עד מצב שמאפשר הדפסה. -web_fonts_disabled=גופני רשת מנוטרלים: לא ניתן להשתמש בגופני PDF מוטבעים. - -# Editor -editor_free_text2.title=טקסט -editor_free_text2_label=טקסט -editor_ink2.title=ציור -editor_ink2_label=ציור - -editor_stamp1.title=הוספה או עריכת תמונות -editor_stamp1_label=הוספה או עריכת תמונות - -free_text2_default_content=להתחיל להקליד… - -# Editor Parameters -editor_free_text_color=צבע -editor_free_text_size=גודל -editor_ink_color=צבע -editor_ink_thickness=עובי -editor_ink_opacity=אטימות - -editor_stamp_add_image_label=הוספת תמונה -editor_stamp_add_image.title=הוספת תמונה - -# Editor aria -editor_free_text2_aria_label=עורך טקסט -editor_ink2_aria_label=עורך ציור -editor_ink_canvas_aria_label=תמונה שנוצרה על־ידי משתמש - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=טקסט חלופי -editor_alt_text_edit_button_label=עריכת טקסט חלופי -editor_alt_text_dialog_label=בחירת אפשרות -editor_alt_text_dialog_description=טקסט חלופי עוזר כשאנשים לא יכולים לראות את התמונה או כשהיא לא נטענת. -editor_alt_text_add_description_label=הוספת תיאור -editor_alt_text_add_description_description=כדאי לתאר במשפט אחד או שניים את הנושא, התפאורה או הפעולות. -editor_alt_text_mark_decorative_label=סימון כדקורטיבי -editor_alt_text_mark_decorative_description=זה משמש לתמונות נוי, כמו גבולות או סימני מים. -editor_alt_text_cancel_button=ביטול -editor_alt_text_save_button=שמירה -editor_alt_text_decorative_tooltip=מסומן כדקורטיבי -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=לדוגמה, ״גבר צעיר מתיישב ליד שולחן לאכול ארוחה״ diff --git a/static/pdf.js/locale/hi-IN/viewer.ftl b/static/pdf.js/locale/hi-IN/viewer.ftl new file mode 100644 index 00000000..1ead5930 --- /dev/null +++ b/static/pdf.js/locale/hi-IN/viewer.ftl @@ -0,0 +1,253 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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 } of { $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-presentation-mode-button = + .title = प्रस्तुति अवस्था में जाएँ +pdfjs-presentation-mode-button-label = प्रस्तुति अवस्था +pdfjs-open-file-button = + .title = फ़ाइल खोलें +pdfjs-open-file-button-label = खोलें +pdfjs-print-button = + .title = छापें +pdfjs-print-button-label = छापें +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = ऐप में खोलें +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-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-vertical-button = + .title = लंबवत स्क्रॉलिंग का उपयोग करें +pdfjs-scroll-vertical-button-label = लंबवत स्क्रॉलिंग +pdfjs-scroll-horizontal-button = + .title = क्षितिजिय स्क्रॉलिंग का उपयोग करें +pdfjs-scroll-horizontal-button-label = क्षितिजिय स्क्रॉलिंग +pdfjs-scroll-wrapped-button = + .title = व्राप्पेड स्क्रॉलिंग का उपयोग करें +pdfjs-spread-none-button-label = कोई स्प्रेड उपलब्ध नहीं +pdfjs-spread-odd-button = + .title = विषम-क्रमांकित पृष्ठों से प्रारंभ होने वाले पृष्ठ स्प्रेड में शामिल हों +pdfjs-spread-odd-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 = फाइल आकारः +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = शीर्षक: +pdfjs-document-properties-author = लेखकः +pdfjs-document-properties-subject = विषय: +pdfjs-document-properties-keywords = कुंजी-शब्द: +pdfjs-document-properties-creation-date = निर्माण दिनांक: +pdfjs-document-properties-modification-date = संशोधन दिनांक: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = पोर्ट्रेट +pdfjs-document-properties-page-size-orientation-landscape = लैंडस्केप +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = पत्र +pdfjs-document-properties-page-size-name-legal = क़ानूनी + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = तीव्र वेब व्यू: +pdfjs-document-properties-linearized-yes = हाँ +pdfjs-document-properties-linearized-no = नहीं +pdfjs-document-properties-close-button = बंद करें + +## Print + +pdfjs-print-progress-message = छपाई के लिए दस्तावेज़ को तैयार किया जा रहा है... +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = रद्द करें +pdfjs-printing-not-supported = चेतावनी: इस ब्राउज़र पर छपाई पूरी तरह से समर्थित नहीं है. +pdfjs-printing-not-ready = चेतावनी: PDF छपाई के लिए पूरी तरह से लोड नहीं है. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = स्लाइडर टॉगल करें +pdfjs-toggle-sidebar-button-label = स्लाइडर टॉगल करें +pdfjs-document-outline-button = + .title = दस्तावेज़ की रूपरेखा दिखाइए (सारी वस्तुओं को फलने अथवा समेटने के लिए दो बार क्लिक करें) +pdfjs-document-outline-button-label = दस्तावेज़ आउटलाइन +pdfjs-attachments-button = + .title = संलग्नक दिखायें +pdfjs-attachments-button-label = संलग्नक +pdfjs-thumbs-button = + .title = लघुछवियाँ दिखाएँ +pdfjs-thumbs-button-label = लघु छवि +pdfjs-findbar-button = + .title = दस्तावेज़ में ढूँढ़ें +pdfjs-findbar-button-label = ढूँढें + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = पृष्ठ { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = पृष्ठ { $page } की लघु-छवि + +## Find panel button title and messages + +pdfjs-find-input = + .title = ढूँढें + .placeholder = दस्तावेज़ में खोजें... +pdfjs-find-previous-button = + .title = वाक्यांश की पिछली उपस्थिति ढूँढ़ें +pdfjs-find-previous-button-label = पिछला +pdfjs-find-next-button = + .title = वाक्यांश की अगली उपस्थिति ढूँढ़ें +pdfjs-find-next-button-label = अगला +pdfjs-find-highlight-checkbox = सभी आलोकित करें +pdfjs-find-match-case-checkbox-label = मिलान स्थिति +pdfjs-find-entire-word-checkbox-label = संपूर्ण शब्द +pdfjs-find-reached-top = पृष्ठ के ऊपर पहुंच गया, नीचे से जारी रखें +pdfjs-find-reached-bottom = पृष्ठ के नीचे में जा पहुँचा, ऊपर से जारी +pdfjs-find-not-found = वाक्यांश नहीं मिला + +## 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 + + +## Loading indicator messages + +pdfjs-loading-error = PDF लोड करते समय एक त्रुटि हुई. +pdfjs-invalid-file-error = अमान्य या भ्रष्ट PDF फ़ाइल. +pdfjs-missing-file-error = अनुपस्थित PDF फ़ाइल. +pdfjs-unexpected-response-error = अप्रत्याशित सर्वर प्रतिक्रिया. +pdfjs-rendering-error = पृष्ठ रेंडरिंग के दौरान त्रुटि आई. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Annotation] + +## Password + +pdfjs-password-label = इस PDF फ़ाइल को खोलने के लिए कृपया कूटशब्द भरें. +pdfjs-password-invalid = अवैध कूटशब्द, कृपया फिर कोशिश करें. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = रद्द करें +pdfjs-web-fonts-disabled = वेब फॉन्ट्स निष्क्रिय हैं: अंतःस्थापित PDF फॉन्टस के उपयोग में असमर्थ. + +## Editing + +# Editor Parameters +pdfjs-editor-free-text-color-input = रंग + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/hi-IN/viewer.properties b/static/pdf.js/locale/hi-IN/viewer.properties deleted file mode 100644 index 97f1da17..00000000 --- a/static/pdf.js/locale/hi-IN/viewer.properties +++ /dev/null @@ -1,227 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=पिछला पृष्ठ -previous_label=पिछला -next.title=अगला पृष्ठ -next_label=आगे - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=पृष्ठ: -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages={{pagesCount}} का -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} of {{pagesCount}}) - -zoom_out.title=\u0020छोटा करें -zoom_out_label=\u0020छोटा करें -zoom_in.title=बड़ा करें -zoom_in_label=बड़ा करें -zoom.title=बड़ा-छोटा करें -presentation_mode.title=प्रस्तुति अवस्था में जाएँ -presentation_mode_label=\u0020प्रस्तुति अवस्था -open_file.title=फ़ाइल खोलें -open_file_label=\u0020खोलें -print.title=छापें -print_label=\u0020छापें -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=ऐप में खोलें -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=ऐप में खोलें - -# Secondary toolbar and context menu -tools.title=औज़ार -tools_label=औज़ार -first_page.title=प्रथम पृष्ठ पर जाएँ -first_page_label=प्रथम पृष्ठ पर जाएँ -last_page.title=अंतिम पृष्ठ पर जाएँ -last_page_label=\u0020अंतिम पृष्ठ पर जाएँ -page_rotate_cw.title=घड़ी की दिशा में घुमाएँ -page_rotate_cw_label=घड़ी की दिशा में घुमाएँ -page_rotate_ccw.title=घड़ी की दिशा से उल्टा घुमाएँ -page_rotate_ccw_label=\u0020घड़ी की दिशा से उल्टा घुमाएँ - -cursor_text_select_tool.title=पाठ चयन उपकरण सक्षम करें -cursor_text_select_tool_label=पाठ चयन उपकरण -cursor_hand_tool.title=हस्त उपकरण सक्षम करें -cursor_hand_tool_label=हस्त उपकरण - -scroll_vertical.title=लंबवत स्क्रॉलिंग का उपयोग करें -scroll_vertical_label=लंबवत स्क्रॉलिंग -scroll_horizontal.title=क्षितिजिय स्क्रॉलिंग का उपयोग करें -scroll_horizontal_label=क्षितिजिय स्क्रॉलिंग -scroll_wrapped.title=व्राप्पेड स्क्रॉलिंग का उपयोग करें - -spread_none_label=कोई स्प्रेड उपलब्ध नहीं -spread_odd.title=विषम-क्रमांकित पृष्ठों से प्रारंभ होने वाले पृष्ठ स्प्रेड में शामिल हों -spread_odd_label=विषम फैलाव - -# Document properties dialog box -document_properties.title=दस्तावेज़ विशेषता... -document_properties_label=दस्तावेज़ विशेषता... -document_properties_file_name=फ़ाइल नाम: -document_properties_file_size=फाइल आकारः -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=शीर्षक: -document_properties_author=लेखकः -document_properties_subject=विषय: -document_properties_keywords=कुंजी-शब्द: -document_properties_creation_date=निर्माण दिनांक: -document_properties_modification_date=संशोधन दिनांक: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=निर्माता: -document_properties_producer=PDF उत्पादक: -document_properties_version=PDF संस्करण: -document_properties_page_count=पृष्ठ गिनती: -document_properties_page_size=पृष्ठ आकार: -document_properties_page_size_unit_inches=इंच -document_properties_page_size_unit_millimeters=मिमी -document_properties_page_size_orientation_portrait=पोर्ट्रेट -document_properties_page_size_orientation_landscape=लैंडस्केप -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=पत्र -document_properties_page_size_name_legal=क़ानूनी -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=तीव्र वेब व्यू: -document_properties_linearized_yes=हाँ -document_properties_linearized_no=नहीं -document_properties_close=बंद करें - -print_progress_message=छपाई के लिए दस्तावेज़ को तैयार किया जा रहा है... -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=रद्द करें - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=\u0020स्लाइडर टॉगल करें -toggle_sidebar_label=स्लाइडर टॉगल करें -document_outline.title=दस्तावेज़ की रूपरेखा दिखाइए (सारी वस्तुओं को फलने अथवा समेटने के लिए दो बार क्लिक करें) -document_outline_label=दस्तावेज़ आउटलाइन -attachments.title=संलग्नक दिखायें -attachments_label=संलग्नक -thumbs.title=लघुछवियाँ दिखाएँ -thumbs_label=लघु छवि -findbar.title=\u0020दस्तावेज़ में ढूँढ़ें -findbar_label=ढूँढें - -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=पृष्ठ {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=पृष्ठ {{page}} की लघु-छवि - -# Find panel button title and messages -find_input.title=ढूँढें -find_input.placeholder=दस्तावेज़ में खोजें... -find_previous.title=वाक्यांश की पिछली उपस्थिति ढूँढ़ें -find_previous_label=पिछला -find_next.title=वाक्यांश की अगली उपस्थिति ढूँढ़ें -find_next_label=अगला -find_highlight=\u0020सभी आलोकित करें -find_match_case_label=मिलान स्थिति -find_entire_word_label=संपूर्ण शब्द -find_reached_top=पृष्ठ के ऊपर पहुंच गया, नीचे से जारी रखें -find_reached_bottom=पृष्ठ के नीचे में जा पहुँचा, ऊपर से जारी -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{total}} में {{current}} मेल -find_match_count[two]={{total}} में {{current}} मेल -find_match_count[few]={{total}} में {{current}} मेल -find_match_count[many]={{total}} में {{current}} मेल -find_match_count[other]={{total}} में {{current}} मेल -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]={{limit}} से अधिक मेल -find_match_count_limit[one]={{limit}} से अधिक मेल -find_match_count_limit[two]={{limit}} से अधिक मेल -find_match_count_limit[few]={{limit}} से अधिक मेल -find_match_count_limit[many]={{limit}} से अधिक मेल -find_match_count_limit[other]={{limit}} से अधिक मेल -find_not_found=वाक्यांश नहीं मिला - -# Predefined zoom values -page_scale_width=\u0020पृष्ठ चौड़ाई -page_scale_fit=पृष्ठ फिट -page_scale_auto=स्वचालित जूम -page_scale_actual=वास्तविक आकार -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=PDF लोड करते समय एक त्रुटि हुई. -invalid_file_error=अमान्य या भ्रष्ट PDF फ़ाइल. -missing_file_error=\u0020अनुपस्थित PDF फ़ाइल. -unexpected_response_error=अप्रत्याशित सर्वर प्रतिक्रिया. -rendering_error=पृष्ठ रेंडरिंग के दौरान त्रुटि आई. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=\u0020[{{type}} Annotation] -password_label=इस PDF फ़ाइल को खोलने के लिए कृपया कूटशब्द भरें. -password_invalid=अवैध कूटशब्द, कृपया फिर कोशिश करें. -password_ok=OK -password_cancel=रद्द करें - -printing_not_supported=चेतावनी: इस ब्राउज़र पर छपाई पूरी तरह से समर्थित नहीं है. -printing_not_ready=चेतावनी: PDF छपाई के लिए पूरी तरह से लोड नहीं है. -web_fonts_disabled=वेब फॉन्ट्स निष्क्रिय हैं: अंतःस्थापित PDF फॉन्टस के उपयोग में असमर्थ. - -# Editor - - - -# Editor Parameters -editor_free_text_color=रंग - -# Editor aria diff --git a/static/pdf.js/locale/hr/viewer.ftl b/static/pdf.js/locale/hr/viewer.ftl new file mode 100644 index 00000000..23d88e76 --- /dev/null +++ b/static/pdf.js/locale/hr/viewer.ftl @@ -0,0 +1,279 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Prethodna stranica +pdfjs-previous-button-label = Prethodna +pdfjs-next-button = + .title = Sljedeća stranica +pdfjs-next-button-label = Sljedeća +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Stranica +# 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 = od { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } od { $pagesCount }) +pdfjs-zoom-out-button = + .title = Umanji +pdfjs-zoom-out-button-label = Umanji +pdfjs-zoom-in-button = + .title = Uvećaj +pdfjs-zoom-in-button-label = Uvećaj +pdfjs-zoom-select = + .title = Zumiranje +pdfjs-presentation-mode-button = + .title = Prebaci u prezentacijski način rada +pdfjs-presentation-mode-button-label = Prezentacijski način rada +pdfjs-open-file-button = + .title = Otvori datoteku +pdfjs-open-file-button-label = Otvori +pdfjs-print-button = + .title = Ispiši +pdfjs-print-button-label = Ispiši +pdfjs-save-button = + .title = Spremi +pdfjs-save-button-label = Spremi + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Alati +pdfjs-tools-button-label = Alati +pdfjs-first-page-button = + .title = Idi na prvu stranicu +pdfjs-first-page-button-label = Idi na prvu stranicu +pdfjs-last-page-button = + .title = Idi na posljednju stranicu +pdfjs-last-page-button-label = Idi na posljednju stranicu +pdfjs-page-rotate-cw-button = + .title = Rotiraj u smjeru kazaljke na satu +pdfjs-page-rotate-cw-button-label = Rotiraj u smjeru kazaljke na satu +pdfjs-page-rotate-ccw-button = + .title = Rotiraj obrnutno od smjera kazaljke na satu +pdfjs-page-rotate-ccw-button-label = Rotiraj obrnutno od smjera kazaljke na satu +pdfjs-cursor-text-select-tool-button = + .title = Omogući alat za označavanje teksta +pdfjs-cursor-text-select-tool-button-label = Alat za označavanje teksta +pdfjs-cursor-hand-tool-button = + .title = Omogući ručni alat +pdfjs-cursor-hand-tool-button-label = Ručni alat +pdfjs-scroll-vertical-button = + .title = Koristi okomito pomicanje +pdfjs-scroll-vertical-button-label = Okomito pomicanje +pdfjs-scroll-horizontal-button = + .title = Koristi vodoravno pomicanje +pdfjs-scroll-horizontal-button-label = Vodoravno pomicanje +pdfjs-scroll-wrapped-button = + .title = Koristi kontinuirani raspored stranica +pdfjs-scroll-wrapped-button-label = Kontinuirani raspored stranica +pdfjs-spread-none-button = + .title = Ne izrađuj duplerice +pdfjs-spread-none-button-label = Pojedinačne stranice +pdfjs-spread-odd-button = + .title = Izradi duplerice koje počinju s neparnim stranicama +pdfjs-spread-odd-button-label = Neparne duplerice +pdfjs-spread-even-button = + .title = Izradi duplerice koje počinju s parnim stranicama +pdfjs-spread-even-button-label = Parne duplerice + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Svojstva dokumenta … +pdfjs-document-properties-button-label = Svojstva dokumenta … +pdfjs-document-properties-file-name = Naziv datoteke: +pdfjs-document-properties-file-size = Veličina datoteke: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajtova) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bajtova) +pdfjs-document-properties-title = Naslov: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Predmet: +pdfjs-document-properties-keywords = Ključne riječi: +pdfjs-document-properties-creation-date = Datum stvaranja: +pdfjs-document-properties-modification-date = Datum promjene: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Stvaratelj: +pdfjs-document-properties-producer = PDF stvaratelj: +pdfjs-document-properties-version = PDF verzija: +pdfjs-document-properties-page-count = Broj stranica: +pdfjs-document-properties-page-size = Dimenzije stranice: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = uspravno +pdfjs-document-properties-page-size-orientation-landscape = položeno +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Brzi web pregled: +pdfjs-document-properties-linearized-yes = Da +pdfjs-document-properties-linearized-no = Ne +pdfjs-document-properties-close-button = Zatvori + +## Print + +pdfjs-print-progress-message = Pripremanje dokumenta za ispis… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Odustani +pdfjs-printing-not-supported = Upozorenje: Ovaj preglednik ne podržava u potpunosti ispisivanje. +pdfjs-printing-not-ready = Upozorenje: PDF nije u potpunosti učitan za ispis. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Prikaži/sakrij bočnu traku +pdfjs-toggle-sidebar-notification-button = + .title = Prikazivanje i sklanjanje bočne trake (dokument sadrži strukturu/privitke/slojeve) +pdfjs-toggle-sidebar-button-label = Prikaži/sakrij bočnu traku +pdfjs-document-outline-button = + .title = Prikaži strukturu dokumenta (dvostruki klik za rasklapanje/sklapanje svih stavki) +pdfjs-document-outline-button-label = Struktura dokumenta +pdfjs-attachments-button = + .title = Prikaži privitke +pdfjs-attachments-button-label = Privitci +pdfjs-layers-button = + .title = Prikaži slojeve (dvoklik za vraćanje svih slojeva u zadano stanje) +pdfjs-layers-button-label = Slojevi +pdfjs-thumbs-button = + .title = Prikaži minijature +pdfjs-thumbs-button-label = Minijature +pdfjs-current-outline-item-button = + .title = Pronađi trenutačni element strukture +pdfjs-current-outline-item-button-label = Trenutačni element strukture +pdfjs-findbar-button = + .title = Pronađi u dokumentu +pdfjs-findbar-button-label = Pronađi +pdfjs-additional-layers = Dodatni slojevi + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Stranica { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Minijatura stranice { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Pronađi + .placeholder = Pronađi u dokumentu … +pdfjs-find-previous-button = + .title = Pronađi prethodno pojavljivanje ovog izraza +pdfjs-find-previous-button-label = Prethodno +pdfjs-find-next-button = + .title = Pronađi sljedeće pojavljivanje ovog izraza +pdfjs-find-next-button-label = Sljedeće +pdfjs-find-highlight-checkbox = Istankni sve +pdfjs-find-match-case-checkbox-label = Razlikovanje velikih i malih slova +pdfjs-find-entire-word-checkbox-label = Cijele riječi +pdfjs-find-reached-top = Dosegnut početak dokumenta, nastavak s kraja +pdfjs-find-reached-bottom = Dosegnut kraj dokumenta, nastavak s početka +pdfjs-find-not-found = Izraz nije pronađen + +## Predefined zoom values + +pdfjs-page-scale-width = Prilagodi širini prozora +pdfjs-page-scale-fit = Prilagodi veličini prozora +pdfjs-page-scale-auto = Automatsko zumiranje +pdfjs-page-scale-actual = Stvarna veličina +# 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 = Stranica { $page } + +## Loading indicator messages + +pdfjs-loading-error = Došlo je do greške pri učitavanju PDF-a. +pdfjs-invalid-file-error = Neispravna ili oštećena PDF datoteka. +pdfjs-missing-file-error = Nedostaje PDF datoteka. +pdfjs-unexpected-response-error = Neočekivani odgovor poslužitelja. +pdfjs-rendering-error = Došlo je do greške prilikom iscrtavanja stranice. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Bilješka] + +## Password + +pdfjs-password-label = Za otvoranje ove PDF datoteku upiši lozinku. +pdfjs-password-invalid = Neispravna lozinka. Pokušaj ponovo. +pdfjs-password-ok-button = U redu +pdfjs-password-cancel-button = Odustani +pdfjs-web-fonts-disabled = Web fontovi su deaktivirani: nije moguće koristiti ugrađene PDF fontove. + +## Editing + +pdfjs-editor-free-text-button = + .title = Tekst +pdfjs-editor-free-text-button-label = Tekst +# Editor Parameters +pdfjs-editor-free-text-color-input = Boja +pdfjs-editor-free-text-size-input = Veličina +pdfjs-editor-ink-color-input = Boja +pdfjs-editor-ink-thickness-input = Debljina +pdfjs-editor-ink-opacity-input = Neprozirnost +pdfjs-free-text = + .aria-label = Uređivač teksta +pdfjs-free-text-default-content = Počni tipkati … + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/hr/viewer.properties b/static/pdf.js/locale/hr/viewer.properties deleted file mode 100644 index 05b54ffc..00000000 --- a/static/pdf.js/locale/hr/viewer.properties +++ /dev/null @@ -1,243 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Prethodna stranica -previous_label=Prethodna -next.title=Sljedeća stranica -next_label=Sljedeća - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Stranica -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=od {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} od {{pagesCount}}) - -zoom_out.title=Umanji -zoom_out_label=Umanji -zoom_in.title=Uvećaj -zoom_in_label=Uvećaj -zoom.title=Zumiranje -presentation_mode.title=Prebaci u prezentacijski način rada -presentation_mode_label=Prezentacijski način rada -open_file.title=Otvori datoteku -open_file_label=Otvori -print.title=Ispiši -print_label=Ispiši -save.title=Spremi -save_label=Spremi - -# Secondary toolbar and context menu -tools.title=Alati -tools_label=Alati -first_page.title=Idi na prvu stranicu -first_page_label=Idi na prvu stranicu -last_page.title=Idi na posljednju stranicu -last_page_label=Idi na posljednju stranicu -page_rotate_cw.title=Rotiraj u smjeru kazaljke na satu -page_rotate_cw_label=Rotiraj u smjeru kazaljke na satu -page_rotate_ccw.title=Rotiraj obrnutno od smjera kazaljke na satu -page_rotate_ccw_label=Rotiraj obrnutno od smjera kazaljke na satu - -cursor_text_select_tool.title=Omogući alat za označavanje teksta -cursor_text_select_tool_label=Alat za označavanje teksta -cursor_hand_tool.title=Omogući ručni alat -cursor_hand_tool_label=Ručni alat - -scroll_vertical.title=Koristi okomito pomicanje -scroll_vertical_label=Okomito pomicanje -scroll_horizontal.title=Koristi vodoravno pomicanje -scroll_horizontal_label=Vodoravno pomicanje -scroll_wrapped.title=Koristi kontinuirani raspored stranica -scroll_wrapped_label=Kontinuirani raspored stranica - -spread_none.title=Ne izrađuj duplerice -spread_none_label=Pojedinačne stranice -spread_odd.title=Izradi duplerice koje počinju s neparnim stranicama -spread_odd_label=Neparne duplerice -spread_even.title=Izradi duplerice koje počinju s parnim stranicama -spread_even_label=Parne duplerice - -# Document properties dialog box -document_properties.title=Svojstva dokumenta … -document_properties_label=Svojstva dokumenta … -document_properties_file_name=Naziv datoteke: -document_properties_file_size=Veličina datoteke: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bajtova) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bajtova) -document_properties_title=Naslov: -document_properties_author=Autor: -document_properties_subject=Predmet: -document_properties_keywords=Ključne riječi: -document_properties_creation_date=Datum stvaranja: -document_properties_modification_date=Datum promjene: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Stvaratelj: -document_properties_producer=PDF stvaratelj: -document_properties_version=PDF verzija: -document_properties_page_count=Broj stranica: -document_properties_page_size=Dimenzije stranice: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=uspravno -document_properties_page_size_orientation_landscape=položeno -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Brzi web pregled: -document_properties_linearized_yes=Da -document_properties_linearized_no=Ne -document_properties_close=Zatvori - -print_progress_message=Pripremanje dokumenta za ispis… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Odustani - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Prikaži/sakrij bočnu traku -toggle_sidebar_notification2.title=Prikazivanje i sklanjanje bočne trake (dokument sadrži strukturu/privitke/slojeve) -toggle_sidebar_label=Prikaži/sakrij bočnu traku -document_outline.title=Prikaži strukturu dokumenta (dvostruki klik za rasklapanje/sklapanje svih stavki) -document_outline_label=Struktura dokumenta -attachments.title=Prikaži privitke -attachments_label=Privitci -layers.title=Prikaži slojeve (dvoklik za vraćanje svih slojeva u zadano stanje) -layers_label=Slojevi -thumbs.title=Prikaži minijature -thumbs_label=Minijature -current_outline_item.title=Pronađi trenutačni element strukture -current_outline_item_label=Trenutačni element strukture -findbar.title=Pronađi u dokumentu -findbar_label=Pronađi - -additional_layers=Dodatni slojevi -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Stranica {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Stranica {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Minijatura stranice {{page}} - -# Find panel button title and messages -find_input.title=Pronađi -find_input.placeholder=Pronađi u dokumentu … -find_previous.title=Pronađi prethodno pojavljivanje ovog izraza -find_previous_label=Prethodno -find_next.title=Pronađi sljedeće pojavljivanje ovog izraza -find_next_label=Sljedeće -find_highlight=Istankni sve -find_match_case_label=Razlikovanje velikih i malih slova -find_entire_word_label=Cijele riječi -find_reached_top=Dosegnut početak dokumenta, nastavak s kraja -find_reached_bottom=Dosegnut kraj dokumenta, nastavak s početka -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} od {{total}} se podudara -find_match_count[two]={{current}} od {{total}} se podudara -find_match_count[few]={{current}} od {{total}} se podudara -find_match_count[many]={{current}} od {{total}} se podudara -find_match_count[other]={{current}} od {{total}} se podudara -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Više od {{limit}} podudaranja -find_match_count_limit[one]=Više od {{limit}} podudaranja -find_match_count_limit[two]=Više od {{limit}} podudaranja -find_match_count_limit[few]=Više od {{limit}} podudaranja -find_match_count_limit[many]=Više od {{limit}} podudaranja -find_match_count_limit[other]=Više od {{limit}} podudaranja -find_not_found=Izraz nije pronađen - -# Predefined zoom values -page_scale_width=Prilagodi širini prozora -page_scale_fit=Prilagodi veličini prozora -page_scale_auto=Automatsko zumiranje -page_scale_actual=Stvarna veličina -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}} % - -loading_error=Došlo je do greške pri učitavanju PDF-a. -invalid_file_error=Neispravna ili oštećena PDF datoteka. -missing_file_error=Nedostaje PDF datoteka. -unexpected_response_error=Neočekivani odgovor poslužitelja. - -rendering_error=Došlo je do greške prilikom iscrtavanja stranice. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Bilješka] -password_label=Za otvoranje ove PDF datoteku upiši lozinku. -password_invalid=Neispravna lozinka. Pokušaj ponovo. -password_ok=U redu -password_cancel=Odustani - -printing_not_supported=Upozorenje: Ovaj preglednik ne podržava u potpunosti ispisivanje. -printing_not_ready=Upozorenje: PDF nije u potpunosti učitan za ispis. -web_fonts_disabled=Web fontovi su deaktivirani: nije moguće koristiti ugrađene PDF fontove. - -# Editor -editor_free_text2.title=Tekst -editor_free_text2_label=Tekst - -free_text2_default_content=Počni tipkati … - -# Editor Parameters -editor_free_text_color=Boja -editor_free_text_size=Veličina -editor_ink_color=Boja -editor_ink_thickness=Debljina -editor_ink_opacity=Neprozirnost - -# Editor aria -editor_free_text2_aria_label=Uređivač teksta diff --git a/static/pdf.js/locale/hsb/viewer.ftl b/static/pdf.js/locale/hsb/viewer.ftl new file mode 100644 index 00000000..46feaf1b --- /dev/null +++ b/static/pdf.js/locale/hsb/viewer.ftl @@ -0,0 +1,406 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Předchadna strona +pdfjs-previous-button-label = Wróćo +pdfjs-next-button = + .title = Přichodna strona +pdfjs-next-button-label = Dale +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Strona +# 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 = z { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } z { $pagesCount }) +pdfjs-zoom-out-button = + .title = Pomjeńšić +pdfjs-zoom-out-button-label = Pomjeńšić +pdfjs-zoom-in-button = + .title = Powjetšić +pdfjs-zoom-in-button-label = Powjetšić +pdfjs-zoom-select = + .title = Skalowanje +pdfjs-presentation-mode-button = + .title = Do prezentaciskeho modusa přeńć +pdfjs-presentation-mode-button-label = Prezentaciski modus +pdfjs-open-file-button = + .title = Dataju wočinić +pdfjs-open-file-button-label = Wočinić +pdfjs-print-button = + .title = Ćišćeć +pdfjs-print-button-label = Ćišćeć +pdfjs-save-button = + .title = Składować +pdfjs-save-button-label = Składować +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Sćahnyć +# 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 = Sćahnyć +pdfjs-bookmark-button = + .title = Aktualna strona (URL z aktualneje strony pokazać) +pdfjs-bookmark-button-label = Aktualna strona +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = W nałoženju wočinić +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = W nałoženju wočinić + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Nastroje +pdfjs-tools-button-label = Nastroje +pdfjs-first-page-button = + .title = K prěnjej stronje +pdfjs-first-page-button-label = K prěnjej stronje +pdfjs-last-page-button = + .title = K poslednjej stronje +pdfjs-last-page-button-label = K poslednjej stronje +pdfjs-page-rotate-cw-button = + .title = K směrej časnika wjerćeć +pdfjs-page-rotate-cw-button-label = K směrej časnika wjerćeć +pdfjs-page-rotate-ccw-button = + .title = Přećiwo směrej časnika wjerćeć +pdfjs-page-rotate-ccw-button-label = Přećiwo směrej časnika wjerćeć +pdfjs-cursor-text-select-tool-button = + .title = Nastroj za wuběranje teksta zmóžnić +pdfjs-cursor-text-select-tool-button-label = Nastroj za wuběranje teksta +pdfjs-cursor-hand-tool-button = + .title = Ručny nastroj zmóžnić +pdfjs-cursor-hand-tool-button-label = Ručny nastroj +pdfjs-scroll-page-button = + .title = Kulenje strony wužiwać +pdfjs-scroll-page-button-label = Kulenje strony +pdfjs-scroll-vertical-button = + .title = Wertikalne suwanje wužiwać +pdfjs-scroll-vertical-button-label = Wertikalne suwanje +pdfjs-scroll-horizontal-button = + .title = Horicontalne suwanje wužiwać +pdfjs-scroll-horizontal-button-label = Horicontalne suwanje +pdfjs-scroll-wrapped-button = + .title = Postupne suwanje wužiwać +pdfjs-scroll-wrapped-button-label = Postupne suwanje +pdfjs-spread-none-button = + .title = Strony njezwjazać +pdfjs-spread-none-button-label = Žana dwójna strona +pdfjs-spread-odd-button = + .title = Strony započinajo z njerunymi stronami zwjazać +pdfjs-spread-odd-button-label = Njerune strony +pdfjs-spread-even-button = + .title = Strony započinajo z runymi stronami zwjazać +pdfjs-spread-even-button-label = Rune strony + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Dokumentowe kajkosće… +pdfjs-document-properties-button-label = Dokumentowe kajkosće… +pdfjs-document-properties-file-name = Mjeno dataje: +pdfjs-document-properties-file-size = Wulkosć dataje: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajtow) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bajtow) +pdfjs-document-properties-title = Titul: +pdfjs-document-properties-author = Awtor: +pdfjs-document-properties-subject = Předmjet: +pdfjs-document-properties-keywords = Klučowe słowa: +pdfjs-document-properties-creation-date = Datum wutworjenja: +pdfjs-document-properties-modification-date = Datum změny: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Awtor: +pdfjs-document-properties-producer = PDF-zhotowjer: +pdfjs-document-properties-version = PDF-wersija: +pdfjs-document-properties-page-count = Ličba stronow: +pdfjs-document-properties-page-size = Wulkosć strony: +pdfjs-document-properties-page-size-unit-inches = cól +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = wysoki format +pdfjs-document-properties-page-size-orientation-landscape = prěčny format +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Fast Web View: +pdfjs-document-properties-linearized-yes = Haj +pdfjs-document-properties-linearized-no = Ně +pdfjs-document-properties-close-button = Začinić + +## Print + +pdfjs-print-progress-message = Dokument so za ćišćenje přihotuje… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Přetorhnyć +pdfjs-printing-not-supported = Warnowanje: Ćišćenje so přez tutón wobhladowak połnje njepodpěruje. +pdfjs-printing-not-ready = Warnowanje: PDF njeje so za ćišćenje dospołnje začitał. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Bóčnicu pokazać/schować +pdfjs-toggle-sidebar-notification-button = + .title = Bóčnicu přepinać (dokument rozrjad/přiwěški/woršty wobsahuje) +pdfjs-toggle-sidebar-button-label = Bóčnicu pokazać/schować +pdfjs-document-outline-button = + .title = Dokumentowy naćisk pokazać (dwójne kliknjenje, zo bychu so wšě zapiski pokazali/schowali) +pdfjs-document-outline-button-label = Dokumentowa struktura +pdfjs-attachments-button = + .title = Přiwěški pokazać +pdfjs-attachments-button-label = Přiwěški +pdfjs-layers-button = + .title = Woršty pokazać (klikńće dwójce, zo byšće wšě woršty na standardny staw wróćo stajił) +pdfjs-layers-button-label = Woršty +pdfjs-thumbs-button = + .title = Miniatury pokazać +pdfjs-thumbs-button-label = Miniatury +pdfjs-current-outline-item-button = + .title = Aktualny rozrjadowy zapisk pytać +pdfjs-current-outline-item-button-label = Aktualny rozrjadowy zapisk +pdfjs-findbar-button = + .title = W dokumenće pytać +pdfjs-findbar-button-label = Pytać +pdfjs-additional-layers = Dalše woršty + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Strona { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura strony { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Pytać + .placeholder = W dokumenće pytać… +pdfjs-find-previous-button = + .title = Předchadne wustupowanje pytanskeho wuraza pytać +pdfjs-find-previous-button-label = Wróćo +pdfjs-find-next-button = + .title = Přichodne wustupowanje pytanskeho wuraza pytać +pdfjs-find-next-button-label = Dale +pdfjs-find-highlight-checkbox = Wšě wuzběhnyć +pdfjs-find-match-case-checkbox-label = Wulkopisanje wobkedźbować +pdfjs-find-match-diacritics-checkbox-label = Diakritiske znamješka wužiwać +pdfjs-find-entire-word-checkbox-label = Cyłe słowa +pdfjs-find-reached-top = Spočatk dokumenta docpěty, pokročuje so z kóncom +pdfjs-find-reached-bottom = Kónc dokument docpěty, pokročuje so ze spočatkom +# 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 } z { $total } wotpowědnika + [two] { $current } z { $total } wotpowědnikow + [few] { $current } z { $total } wotpowědnikow + *[other] { $current } z { $total } wotpowědnikow + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Wyše { $limit } wotpowědnik + [two] Wyše { $limit } wotpowědnikaj + [few] Wyše { $limit } wotpowědniki + *[other] Wyše { $limit } wotpowědnikow + } +pdfjs-find-not-found = Pytanski wuraz njeje so namakał + +## Predefined zoom values + +pdfjs-page-scale-width = Šěrokosć strony +pdfjs-page-scale-fit = Wulkosć strony +pdfjs-page-scale-auto = Awtomatiske skalowanje +pdfjs-page-scale-actual = Aktualna wulkosć +# 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 = Strona { $page } + +## Loading indicator messages + +pdfjs-loading-error = Při začitowanju PDF je zmylk wustupił. +pdfjs-invalid-file-error = Njepłaćiwa abo wobškodźena PDF-dataja. +pdfjs-missing-file-error = Falowaca PDF-dataja. +pdfjs-unexpected-response-error = Njewočakowana serwerowa wotmołwa. +pdfjs-rendering-error = Při zwobraznjenju strony je zmylk wustupił. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Typ přispomnjenki: { $type }] + +## Password + +pdfjs-password-label = Zapodajće hesło, zo byšće PDF-dataju wočinił. +pdfjs-password-invalid = Njepłaćiwe hesło. Prošu spytajće hišće raz. +pdfjs-password-ok-button = W porjadku +pdfjs-password-cancel-button = Přetorhnyć +pdfjs-web-fonts-disabled = Webpisma su znjemóžnjene: njeje móžno, zasadźene PDF-pisma wužiwać. + +## Editing + +pdfjs-editor-free-text-button = + .title = Tekst +pdfjs-editor-free-text-button-label = Tekst +pdfjs-editor-ink-button = + .title = Rysować +pdfjs-editor-ink-button-label = Rysować +pdfjs-editor-stamp-button = + .title = Wobrazy přidać abo wobdźěłać +pdfjs-editor-stamp-button-label = Wobrazy přidać abo wobdźěłać +pdfjs-editor-highlight-button = + .title = Wuzběhnyć +pdfjs-editor-highlight-button-label = Wuzběhnyć +pdfjs-highlight-floating-button = + .title = Wuzběhnyć +pdfjs-highlight-floating-button1 = + .title = Wuzběhnjenje + .aria-label = Wuzběhnjenje +pdfjs-highlight-floating-button-label = Wuzběhnjenje + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Rysowanku wotstronić +pdfjs-editor-remove-freetext-button = + .title = Tekst wotstronić +pdfjs-editor-remove-stamp-button = + .title = Wobraz wotstronić +pdfjs-editor-remove-highlight-button = + .title = Wuzběhnjenje wotstronić + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Barba +pdfjs-editor-free-text-size-input = Wulkosć +pdfjs-editor-ink-color-input = Barba +pdfjs-editor-ink-thickness-input = Tołstosć +pdfjs-editor-ink-opacity-input = Opacita +pdfjs-editor-stamp-add-image-button = + .title = Wobraz přidać +pdfjs-editor-stamp-add-image-button-label = Wobraz přidać +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Tołstosć +pdfjs-editor-free-highlight-thickness-title = + .title = Tołstosć změnić, hdyž so zapiski wuzběhuja, kotrež tekst njejsu +pdfjs-free-text = + .aria-label = Tekstowy editor +pdfjs-free-text-default-content = Započńće pisać… +pdfjs-ink = + .aria-label = Rysowanski editor +pdfjs-ink-canvas = + .aria-label = Wobraz wutworjeny wot wužiwarja + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alternatiwny tekst +pdfjs-editor-alt-text-edit-button-label = Alternatiwny tekst wobdźěłać +pdfjs-editor-alt-text-dialog-label = Nastajenje wubrać +pdfjs-editor-alt-text-dialog-description = Alternatiwny tekst pomha, hdyž ludźo njemóža wobraz widźeć abo hdyž so wobraz njezačita. +pdfjs-editor-alt-text-add-description-label = Wopisanje přidać +pdfjs-editor-alt-text-add-description-description = Pisajće 1 sadu abo 2 sadźe, kotrejž temu, nastajenje abo akcije wopisujetej. +pdfjs-editor-alt-text-mark-decorative-label = Jako dekoratiwny markěrować +pdfjs-editor-alt-text-mark-decorative-description = To so za pyšace wobrazy wužiwa, na přikład ramiki abo wodowe znamjenja. +pdfjs-editor-alt-text-cancel-button = Přetorhnyć +pdfjs-editor-alt-text-save-button = Składować +pdfjs-editor-alt-text-decorative-tooltip = Jako dekoratiwny markěrowany +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Na přikład, „Młody muž za blidom sedźi, zo by jědź jědł“ + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Horjeka nalěwo – wulkosć změnić +pdfjs-editor-resizer-label-top-middle = Horjeka wosrjedź – wulkosć změnić +pdfjs-editor-resizer-label-top-right = Horjeka naprawo – wulkosć změnić +pdfjs-editor-resizer-label-middle-right = Wosrjedź naprawo – wulkosć změnić +pdfjs-editor-resizer-label-bottom-right = Deleka naprawo – wulkosć změnić +pdfjs-editor-resizer-label-bottom-middle = Deleka wosrjedź – wulkosć změnić +pdfjs-editor-resizer-label-bottom-left = Deleka nalěwo – wulkosć změnić +pdfjs-editor-resizer-label-middle-left = Wosrjedź nalěwo – wulkosć změnić + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Barba wuzběhnjenja +pdfjs-editor-colorpicker-button = + .title = Barbu změnić +pdfjs-editor-colorpicker-dropdown = + .aria-label = Wuběr barbow +pdfjs-editor-colorpicker-yellow = + .title = Žołty +pdfjs-editor-colorpicker-green = + .title = Zeleny +pdfjs-editor-colorpicker-blue = + .title = Módry +pdfjs-editor-colorpicker-pink = + .title = Pink +pdfjs-editor-colorpicker-red = + .title = Čerwjeny + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Wšě pokazać +pdfjs-editor-highlight-show-all-button = + .title = Wšě pokazać diff --git a/static/pdf.js/locale/hsb/viewer.properties b/static/pdf.js/locale/hsb/viewer.properties deleted file mode 100644 index d96940d4..00000000 --- a/static/pdf.js/locale/hsb/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Předchadna strona -previous_label=Wróćo -next.title=Přichodna strona -next_label=Dale - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Strona -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=z {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} z {{pagesCount}}) - -zoom_out.title=Pomjeńšić -zoom_out_label=Pomjeńšić -zoom_in.title=Powjetšić -zoom_in_label=Powjetšić -zoom.title=Skalowanje -presentation_mode.title=Do prezentaciskeho modusa přeńć -presentation_mode_label=Prezentaciski modus -open_file.title=Dataju wočinić -open_file_label=Wočinić -print.title=Ćišćeć -print_label=Ćišćeć -save.title=Składować -save_label=Składować -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Sćahnyć -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Sćahnyć -bookmark1.title=Aktualna strona (URL z aktualneje strony pokazać) -bookmark1_label=Aktualna strona -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=W nałoženju wočinić -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=W nałoženju wočinić - -# Secondary toolbar and context menu -tools.title=Nastroje -tools_label=Nastroje -first_page.title=K prěnjej stronje -first_page_label=K prěnjej stronje -last_page.title=K poslednjej stronje -last_page_label=K poslednjej stronje -page_rotate_cw.title=K směrej časnika wjerćeć -page_rotate_cw_label=K směrej časnika wjerćeć -page_rotate_ccw.title=Přećiwo směrej časnika wjerćeć -page_rotate_ccw_label=Přećiwo směrej časnika wjerćeć - -cursor_text_select_tool.title=Nastroj za wuběranje teksta zmóžnić -cursor_text_select_tool_label=Nastroj za wuběranje teksta -cursor_hand_tool.title=Ručny nastroj zmóžnić -cursor_hand_tool_label=Ručny nastroj - -scroll_page.title=Kulenje strony wužiwać -scroll_page_label=Kulenje strony -scroll_vertical.title=Wertikalne suwanje wužiwać -scroll_vertical_label=Wertikalne suwanje -scroll_horizontal.title=Horicontalne suwanje wužiwać -scroll_horizontal_label=Horicontalne suwanje -scroll_wrapped.title=Postupne suwanje wužiwać -scroll_wrapped_label=Postupne suwanje - -spread_none.title=Strony njezwjazać -spread_none_label=Žana dwójna strona -spread_odd.title=Strony započinajo z njerunymi stronami zwjazać -spread_odd_label=Njerune strony -spread_even.title=Strony započinajo z runymi stronami zwjazać -spread_even_label=Rune strony - -# Document properties dialog box -document_properties.title=Dokumentowe kajkosće… -document_properties_label=Dokumentowe kajkosće… -document_properties_file_name=Mjeno dataje: -document_properties_file_size=Wulkosć dataje: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bajtow) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bajtow) -document_properties_title=Titul: -document_properties_author=Awtor: -document_properties_subject=Předmjet: -document_properties_keywords=Klučowe słowa: -document_properties_creation_date=Datum wutworjenja: -document_properties_modification_date=Datum změny: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Awtor: -document_properties_producer=PDF-zhotowjer: -document_properties_version=PDF-wersija: -document_properties_page_count=Ličba stronow: -document_properties_page_size=Wulkosć strony: -document_properties_page_size_unit_inches=cól -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=wysoki format -document_properties_page_size_orientation_landscape=prěčny format -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Fast Web View: -document_properties_linearized_yes=Haj -document_properties_linearized_no=Ně -document_properties_close=Začinić - -print_progress_message=Dokument so za ćišćenje přihotuje… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Přetorhnyć - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Bóčnicu pokazać/schować -toggle_sidebar_notification2.title=Bóčnicu přepinać (dokument rozrjad/přiwěški/woršty wobsahuje) -toggle_sidebar_label=Bóčnicu pokazać/schować -document_outline.title=Dokumentowy naćisk pokazać (dwójne kliknjenje, zo bychu so wšě zapiski pokazali/schowali) -document_outline_label=Dokumentowa struktura -attachments.title=Přiwěški pokazać -attachments_label=Přiwěški -layers.title=Woršty pokazać (klikńće dwójce, zo byšće wšě woršty na standardny staw wróćo stajił) -layers_label=Woršty -thumbs.title=Miniatury pokazać -thumbs_label=Miniatury -current_outline_item.title=Aktualny rozrjadowy zapisk pytać -current_outline_item_label=Aktualny rozrjadowy zapisk -findbar.title=W dokumenće pytać -findbar_label=Pytać - -additional_layers=Dalše woršty -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Strona {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Strona {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura strony {{page}} - -# Find panel button title and messages -find_input.title=Pytać -find_input.placeholder=W dokumenće pytać… -find_previous.title=Předchadne wustupowanje pytanskeho wuraza pytać -find_previous_label=Wróćo -find_next.title=Přichodne wustupowanje pytanskeho wuraza pytać -find_next_label=Dale -find_highlight=Wšě wuzběhnyć -find_match_case_label=Wulkopisanje wobkedźbować -find_match_diacritics_label=Diakritiske znamješka wužiwać -find_entire_word_label=Cyłe słowa -find_reached_top=Spočatk dokumenta docpěty, pokročuje so z kóncom -find_reached_bottom=Kónc dokument docpěty, pokročuje so ze spočatkom -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} z {{total}} wotpowědnika -find_match_count[two]={{current}} z {{total}} wotpowědnikow -find_match_count[few]={{current}} z {{total}} wotpowědnikow -find_match_count[many]={{current}} z {{total}} wotpowědnikow -find_match_count[other]={{current}} z {{total}} wotpowědnikow -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Wjace hač {{limit}} wotpowědnikow -find_match_count_limit[one]=Wjace hač {{limit}} wotpowědnik -find_match_count_limit[two]=Wjace hač {{limit}} wotpowědnikaj -find_match_count_limit[few]=Wjace hač {{limit}} wotpowědniki -find_match_count_limit[many]=Wjace hač {{limit}} wotpowědnikow -find_match_count_limit[other]=Wjace hač {{limit}} wotpowědnikow -find_not_found=Pytanski wuraz njeje so namakał - -# Predefined zoom values -page_scale_width=Šěrokosć strony -page_scale_fit=Wulkosć strony -page_scale_auto=Awtomatiske skalowanje -page_scale_actual=Aktualna wulkosć -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Při začitowanju PDF je zmylk wustupił. -invalid_file_error=Njepłaćiwa abo wobškodźena PDF-dataja. -missing_file_error=Falowaca PDF-dataja. -unexpected_response_error=Njewočakowana serwerowa wotmołwa. -rendering_error=Při zwobraznjenju strony je zmylk wustupił. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Typ přispomnjenki: {{type}}] -password_label=Zapodajće hesło, zo byšće PDF-dataju wočinił. -password_invalid=Njepłaćiwe hesło. Prošu spytajće hišće raz. -password_ok=W porjadku -password_cancel=Přetorhnyć - -printing_not_supported=Warnowanje: Ćišćenje so přez tutón wobhladowak połnje njepodpěruje. -printing_not_ready=Warnowanje: PDF njeje so za ćišćenje dospołnje začitał. -web_fonts_disabled=Webpisma su znjemóžnjene: njeje móžno, zasadźene PDF-pisma wužiwać. - -# Editor -editor_free_text2.title=Tekst -editor_free_text2_label=Tekst -editor_ink2.title=Rysować -editor_ink2_label=Rysować - -editor_stamp1.title=Wobrazy přidać abo wobdźěłać -editor_stamp1_label=Wobrazy přidać abo wobdźěłać - -free_text2_default_content=Započńće pisać… - -# Editor Parameters -editor_free_text_color=Barba -editor_free_text_size=Wulkosć -editor_ink_color=Barba -editor_ink_thickness=Tołstosć -editor_ink_opacity=Opacita - -editor_stamp_add_image_label=Wobraz přidać -editor_stamp_add_image.title=Wobraz přidać - -# Editor aria -editor_free_text2_aria_label=Tekstowy editor -editor_ink2_aria_label=Rysowanski editor -editor_ink_canvas_aria_label=Wobraz wutworjeny wot wužiwarja - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Alternatiwny tekst -editor_alt_text_edit_button_label=Alternatiwny tekst wobdźěłać -editor_alt_text_dialog_label=Nastajenje wubrać -editor_alt_text_dialog_description=Alternatiwny tekst pomha, hdyž ludźo njemóža wobraz widźeć abo hdyž so wobraz njezačita. -editor_alt_text_add_description_label=Wopisanje přidać -editor_alt_text_add_description_description=Pisajće 1 sadu abo 2 sadźe, kotrejž temu, nastajenje abo akcije wopisujetej. -editor_alt_text_mark_decorative_label=Jako dekoratiwny markěrować -editor_alt_text_mark_decorative_description=To so za pyšace wobrazy wužiwa, na přikład ramiki abo wodowe znamjenja. -editor_alt_text_cancel_button=Přetorhnyć -editor_alt_text_save_button=Składować -editor_alt_text_decorative_tooltip=Jako dekoratiwny markěrowany -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=Na přikład, „Młody muž za blidom sedźi, zo by jědź jědł“ diff --git a/static/pdf.js/locale/hu/viewer.ftl b/static/pdf.js/locale/hu/viewer.ftl new file mode 100644 index 00000000..0c33e51b --- /dev/null +++ b/static/pdf.js/locale/hu/viewer.ftl @@ -0,0 +1,396 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Előző oldal +pdfjs-previous-button-label = Előző +pdfjs-next-button = + .title = Következő oldal +pdfjs-next-button-label = Tovább +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Oldal +# 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 = összesen: { $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 = Kicsinyítés +pdfjs-zoom-out-button-label = Kicsinyítés +pdfjs-zoom-in-button = + .title = Nagyítás +pdfjs-zoom-in-button-label = Nagyítás +pdfjs-zoom-select = + .title = Nagyítás +pdfjs-presentation-mode-button = + .title = Váltás bemutató módba +pdfjs-presentation-mode-button-label = Bemutató mód +pdfjs-open-file-button = + .title = Fájl megnyitása +pdfjs-open-file-button-label = Megnyitás +pdfjs-print-button = + .title = Nyomtatás +pdfjs-print-button-label = Nyomtatás +pdfjs-save-button = + .title = Mentés +pdfjs-save-button-label = Mentés +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Letöltés +# 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 = Letöltés +pdfjs-bookmark-button = + .title = Jelenlegi oldal (webcím megtekintése a jelenlegi oldalról) +pdfjs-bookmark-button-label = Jelenlegi oldal + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Eszközök +pdfjs-tools-button-label = Eszközök +pdfjs-first-page-button = + .title = Ugrás az első oldalra +pdfjs-first-page-button-label = Ugrás az első oldalra +pdfjs-last-page-button = + .title = Ugrás az utolsó oldalra +pdfjs-last-page-button-label = Ugrás az utolsó oldalra +pdfjs-page-rotate-cw-button = + .title = Forgatás az óramutató járásával egyezően +pdfjs-page-rotate-cw-button-label = Forgatás az óramutató járásával egyezően +pdfjs-page-rotate-ccw-button = + .title = Forgatás az óramutató járásával ellentétesen +pdfjs-page-rotate-ccw-button-label = Forgatás az óramutató járásával ellentétesen +pdfjs-cursor-text-select-tool-button = + .title = Szövegkijelölő eszköz bekapcsolása +pdfjs-cursor-text-select-tool-button-label = Szövegkijelölő eszköz +pdfjs-cursor-hand-tool-button = + .title = Kéz eszköz bekapcsolása +pdfjs-cursor-hand-tool-button-label = Kéz eszköz +pdfjs-scroll-page-button = + .title = Oldalgörgetés használata +pdfjs-scroll-page-button-label = Oldalgörgetés +pdfjs-scroll-vertical-button = + .title = Függőleges görgetés használata +pdfjs-scroll-vertical-button-label = Függőleges görgetés +pdfjs-scroll-horizontal-button = + .title = Vízszintes görgetés használata +pdfjs-scroll-horizontal-button-label = Vízszintes görgetés +pdfjs-scroll-wrapped-button = + .title = Rácsos elrendezés használata +pdfjs-scroll-wrapped-button-label = Rácsos elrendezés +pdfjs-spread-none-button = + .title = Ne tapassza össze az oldalakat +pdfjs-spread-none-button-label = Nincs összetapasztás +pdfjs-spread-odd-button = + .title = Lapok összetapasztása, a páratlan számú oldalakkal kezdve +pdfjs-spread-odd-button-label = Összetapasztás: páratlan +pdfjs-spread-even-button = + .title = Lapok összetapasztása, a páros számú oldalakkal kezdve +pdfjs-spread-even-button-label = Összetapasztás: páros + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Dokumentum tulajdonságai… +pdfjs-document-properties-button-label = Dokumentum tulajdonságai… +pdfjs-document-properties-file-name = Fájlnév: +pdfjs-document-properties-file-size = Fájlméret: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bájt) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bájt) +pdfjs-document-properties-title = Cím: +pdfjs-document-properties-author = Szerző: +pdfjs-document-properties-subject = Tárgy: +pdfjs-document-properties-keywords = Kulcsszavak: +pdfjs-document-properties-creation-date = Létrehozás dátuma: +pdfjs-document-properties-modification-date = Módosítás dátuma: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Létrehozta: +pdfjs-document-properties-producer = PDF előállító: +pdfjs-document-properties-version = PDF verzió: +pdfjs-document-properties-page-count = Oldalszám: +pdfjs-document-properties-page-size = Lapméret: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = álló +pdfjs-document-properties-page-size-orientation-landscape = fekvő +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Jogi információk + +## 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 = Gyors webes nézet: +pdfjs-document-properties-linearized-yes = Igen +pdfjs-document-properties-linearized-no = Nem +pdfjs-document-properties-close-button = Bezárás + +## Print + +pdfjs-print-progress-message = Dokumentum előkészítése nyomtatáshoz… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Mégse +pdfjs-printing-not-supported = Figyelmeztetés: Ez a böngésző nem teljesen támogatja a nyomtatást. +pdfjs-printing-not-ready = Figyelmeztetés: A PDF nincs teljesen betöltve a nyomtatáshoz. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Oldalsáv be/ki +pdfjs-toggle-sidebar-notification-button = + .title = Oldalsáv be/ki (a dokumentum vázlatot/mellékleteket/rétegeket tartalmaz) +pdfjs-toggle-sidebar-button-label = Oldalsáv be/ki +pdfjs-document-outline-button = + .title = Dokumentum megjelenítése online (dupla kattintás minden elem kinyitásához/összecsukásához) +pdfjs-document-outline-button-label = Dokumentumvázlat +pdfjs-attachments-button = + .title = Mellékletek megjelenítése +pdfjs-attachments-button-label = Van melléklet +pdfjs-layers-button = + .title = Rétegek megjelenítése (dupla kattintás az összes réteg alapértelmezett állapotra visszaállításához) +pdfjs-layers-button-label = Rétegek +pdfjs-thumbs-button = + .title = Bélyegképek megjelenítése +pdfjs-thumbs-button-label = Bélyegképek +pdfjs-current-outline-item-button = + .title = Jelenlegi vázlatelem megkeresése +pdfjs-current-outline-item-button-label = Jelenlegi vázlatelem +pdfjs-findbar-button = + .title = Keresés a dokumentumban +pdfjs-findbar-button-label = Keresés +pdfjs-additional-layers = További rétegek + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = { $page }. oldal +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = { $page }. oldal bélyegképe + +## Find panel button title and messages + +pdfjs-find-input = + .title = Keresés + .placeholder = Keresés a dokumentumban… +pdfjs-find-previous-button = + .title = A kifejezés előző előfordulásának keresése +pdfjs-find-previous-button-label = Előző +pdfjs-find-next-button = + .title = A kifejezés következő előfordulásának keresése +pdfjs-find-next-button-label = Tovább +pdfjs-find-highlight-checkbox = Összes kiemelése +pdfjs-find-match-case-checkbox-label = Kis- és nagybetűk megkülönböztetése +pdfjs-find-match-diacritics-checkbox-label = Diakritikus jelek +pdfjs-find-entire-word-checkbox-label = Teljes szavak +pdfjs-find-reached-top = A dokumentum eleje elérve, folytatás a végétől +pdfjs-find-reached-bottom = A dokumentum vége elérve, folytatás az elejétől +# 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 } / { $total } találat + *[other] { $current } / { $total } találat + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Több mint { $limit } találat + *[other] Több mint { $limit } találat + } +pdfjs-find-not-found = A kifejezés nem található + +## Predefined zoom values + +pdfjs-page-scale-width = Oldalszélesség +pdfjs-page-scale-fit = Teljes oldal +pdfjs-page-scale-auto = Automatikus nagyítás +pdfjs-page-scale-actual = Valódi méret +# 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 }. oldal + +## Loading indicator messages + +pdfjs-loading-error = Hiba történt a PDF betöltésekor. +pdfjs-invalid-file-error = Érvénytelen vagy sérült PDF fájl. +pdfjs-missing-file-error = Hiányzó PDF fájl. +pdfjs-unexpected-response-error = Váratlan kiszolgálóválasz. +pdfjs-rendering-error = Hiba történt az oldal feldolgozása közben. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } megjegyzés] + +## Password + +pdfjs-password-label = Adja meg a jelszót a PDF fájl megnyitásához. +pdfjs-password-invalid = Helytelen jelszó. Próbálja újra. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Mégse +pdfjs-web-fonts-disabled = Webes betűkészletek letiltva: nem használhatók a beágyazott PDF betűkészletek. + +## Editing + +pdfjs-editor-free-text-button = + .title = Szöveg +pdfjs-editor-free-text-button-label = Szöveg +pdfjs-editor-ink-button = + .title = Rajzolás +pdfjs-editor-ink-button-label = Rajzolás +pdfjs-editor-stamp-button = + .title = Képek hozzáadása vagy szerkesztése +pdfjs-editor-stamp-button-label = Képek hozzáadása vagy szerkesztése +pdfjs-editor-highlight-button = + .title = Kiemelés +pdfjs-editor-highlight-button-label = Kiemelés +pdfjs-highlight-floating-button = + .title = Kiemelés +pdfjs-highlight-floating-button1 = + .title = Kiemelés + .aria-label = Kiemelés +pdfjs-highlight-floating-button-label = Kiemelés + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Rajz eltávolítása +pdfjs-editor-remove-freetext-button = + .title = Szöveg eltávolítása +pdfjs-editor-remove-stamp-button = + .title = Kép eltávolítása +pdfjs-editor-remove-highlight-button = + .title = Kiemelés eltávolítása + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Szín +pdfjs-editor-free-text-size-input = Méret +pdfjs-editor-ink-color-input = Szín +pdfjs-editor-ink-thickness-input = Vastagság +pdfjs-editor-ink-opacity-input = Átlátszatlanság +pdfjs-editor-stamp-add-image-button = + .title = Kép hozzáadása +pdfjs-editor-stamp-add-image-button-label = Kép hozzáadása +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Vastagság +pdfjs-editor-free-highlight-thickness-title = + .title = Vastagság módosítása, ha nem szöveges elemeket emel ki +pdfjs-free-text = + .aria-label = Szövegszerkesztő +pdfjs-free-text-default-content = Kezdjen el gépelni… +pdfjs-ink = + .aria-label = Rajzszerkesztő +pdfjs-ink-canvas = + .aria-label = Felhasználó által készített kép + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alternatív szöveg +pdfjs-editor-alt-text-edit-button-label = Alternatív szöveg szerkesztése +pdfjs-editor-alt-text-dialog-label = Válasszon egy lehetőséget +pdfjs-editor-alt-text-dialog-description = Az alternatív szöveg segít, ha az emberek nem látják a képet, vagy ha az nem töltődik be. +pdfjs-editor-alt-text-add-description-label = Leírás hozzáadása +pdfjs-editor-alt-text-add-description-description = Törekedjen 1-2 mondatra, amely jellemzi a témát, környezetet vagy cselekvést. +pdfjs-editor-alt-text-mark-decorative-label = Megjelölés dekoratívként +pdfjs-editor-alt-text-mark-decorative-description = Ez a díszítőképeknél használatos, mint a szegélyek vagy a vízjelek. +pdfjs-editor-alt-text-cancel-button = Mégse +pdfjs-editor-alt-text-save-button = Mentés +pdfjs-editor-alt-text-decorative-tooltip = Megjelölve dekoratívként +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Például: „Egy fiatal férfi leül enni egy asztalhoz” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Bal felső sarok – átméretezés +pdfjs-editor-resizer-label-top-middle = Felül középen – átméretezés +pdfjs-editor-resizer-label-top-right = Jobb felső sarok – átméretezés +pdfjs-editor-resizer-label-middle-right = Jobbra középen – átméretezés +pdfjs-editor-resizer-label-bottom-right = Jobb alsó sarok – átméretezés +pdfjs-editor-resizer-label-bottom-middle = Alul középen – átméretezés +pdfjs-editor-resizer-label-bottom-left = Bal alsó sarok – átméretezés +pdfjs-editor-resizer-label-middle-left = Balra középen – átméretezés + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Kiemelés színe +pdfjs-editor-colorpicker-button = + .title = Szín módosítása +pdfjs-editor-colorpicker-dropdown = + .aria-label = Színválasztások +pdfjs-editor-colorpicker-yellow = + .title = Sárga +pdfjs-editor-colorpicker-green = + .title = Zöld +pdfjs-editor-colorpicker-blue = + .title = Kék +pdfjs-editor-colorpicker-pink = + .title = Rózsaszín +pdfjs-editor-colorpicker-red = + .title = Vörös + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Összes megjelenítése +pdfjs-editor-highlight-show-all-button = + .title = Összes megjelenítése diff --git a/static/pdf.js/locale/hu/viewer.properties b/static/pdf.js/locale/hu/viewer.properties deleted file mode 100644 index 028aa058..00000000 --- a/static/pdf.js/locale/hu/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Előző oldal -previous_label=Előző -next.title=Következő oldal -next_label=Tovább - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Oldal -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=összesen: {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} / {{pagesCount}}) - -zoom_out.title=Kicsinyítés -zoom_out_label=Kicsinyítés -zoom_in.title=Nagyítás -zoom_in_label=Nagyítás -zoom.title=Nagyítás -presentation_mode.title=Váltás bemutató módba -presentation_mode_label=Bemutató mód -open_file.title=Fájl megnyitása -open_file_label=Megnyitás -print.title=Nyomtatás -print_label=Nyomtatás -save.title=Mentés -save_label=Mentés -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Letöltés -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Letöltés -bookmark1.title=Jelenlegi oldal (webcím megtekintése a jelenlegi oldalról) -bookmark1_label=Jelenlegi oldal -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Megnyitás alkalmazásban -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Megnyitás alkalmazásban - -# Secondary toolbar and context menu -tools.title=Eszközök -tools_label=Eszközök -first_page.title=Ugrás az első oldalra -first_page_label=Ugrás az első oldalra -last_page.title=Ugrás az utolsó oldalra -last_page_label=Ugrás az utolsó oldalra -page_rotate_cw.title=Forgatás az óramutató járásával egyezően -page_rotate_cw_label=Forgatás az óramutató járásával egyezően -page_rotate_ccw.title=Forgatás az óramutató járásával ellentétesen -page_rotate_ccw_label=Forgatás az óramutató járásával ellentétesen - -cursor_text_select_tool.title=Szövegkijelölő eszköz bekapcsolása -cursor_text_select_tool_label=Szövegkijelölő eszköz -cursor_hand_tool.title=Kéz eszköz bekapcsolása -cursor_hand_tool_label=Kéz eszköz - -scroll_page.title=Oldalgörgetés használata -scroll_page_label=Oldalgörgetés -scroll_vertical.title=Függőleges görgetés használata -scroll_vertical_label=Függőleges görgetés -scroll_horizontal.title=Vízszintes görgetés használata -scroll_horizontal_label=Vízszintes görgetés -scroll_wrapped.title=Rácsos elrendezés használata -scroll_wrapped_label=Rácsos elrendezés - -spread_none.title=Ne tapassza össze az oldalakat -spread_none_label=Nincs összetapasztás -spread_odd.title=Lapok összetapasztása, a páratlan számú oldalakkal kezdve -spread_odd_label=Összetapasztás: páratlan -spread_even.title=Lapok összetapasztása, a páros számú oldalakkal kezdve -spread_even_label=Összetapasztás: páros - -# Document properties dialog box -document_properties.title=Dokumentum tulajdonságai… -document_properties_label=Dokumentum tulajdonságai… -document_properties_file_name=Fájlnév: -document_properties_file_size=Fájlméret: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bájt) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bájt) -document_properties_title=Cím: -document_properties_author=Szerző: -document_properties_subject=Tárgy: -document_properties_keywords=Kulcsszavak: -document_properties_creation_date=Létrehozás dátuma: -document_properties_modification_date=Módosítás dátuma: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Létrehozta: -document_properties_producer=PDF előállító: -document_properties_version=PDF verzió: -document_properties_page_count=Oldalszám: -document_properties_page_size=Lapméret: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=álló -document_properties_page_size_orientation_landscape=fekvő -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Jogi információk -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Gyors webes nézet: -document_properties_linearized_yes=Igen -document_properties_linearized_no=Nem -document_properties_close=Bezárás - -print_progress_message=Dokumentum előkészítése nyomtatáshoz… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Mégse - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Oldalsáv be/ki -toggle_sidebar_notification2.title=Oldalsáv be/ki (a dokumentum vázlatot/mellékleteket/rétegeket tartalmaz) -toggle_sidebar_label=Oldalsáv be/ki -document_outline.title=Dokumentum megjelenítése online (dupla kattintás minden elem kinyitásához/összecsukásához) -document_outline_label=Dokumentumvázlat -attachments.title=Mellékletek megjelenítése -attachments_label=Van melléklet -layers.title=Rétegek megjelenítése (dupla kattintás az összes réteg alapértelmezett állapotra visszaállításához) -layers_label=Rétegek -thumbs.title=Bélyegképek megjelenítése -thumbs_label=Bélyegképek -current_outline_item.title=Jelenlegi vázlatelem megkeresése -current_outline_item_label=Jelenlegi vázlatelem -findbar.title=Keresés a dokumentumban -findbar_label=Keresés - -additional_layers=További rétegek -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark={{page}}. oldal -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title={{page}}. oldal -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas={{page}}. oldal bélyegképe - -# Find panel button title and messages -find_input.title=Keresés -find_input.placeholder=Keresés a dokumentumban… -find_previous.title=A kifejezés előző előfordulásának keresése -find_previous_label=Előző -find_next.title=A kifejezés következő előfordulásának keresése -find_next_label=Tovább -find_highlight=Összes kiemelése -find_match_case_label=Kis- és nagybetűk megkülönböztetése -find_match_diacritics_label=Diakritikus jelek -find_entire_word_label=Teljes szavak -find_reached_top=A dokumentum eleje elérve, folytatás a végétől -find_reached_bottom=A dokumentum vége elérve, folytatás az elejétől -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} / {{total}} találat -find_match_count[two]={{current}} / {{total}} találat -find_match_count[few]={{current}} / {{total}} találat -find_match_count[many]={{current}} / {{total}} találat -find_match_count[other]={{current}} / {{total}} találat -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Több mint {{limit}} találat -find_match_count_limit[one]=Több mint {{limit}} találat -find_match_count_limit[two]=Több mint {{limit}} találat -find_match_count_limit[few]=Több mint {{limit}} találat -find_match_count_limit[many]=Több mint {{limit}} találat -find_match_count_limit[other]=Több mint {{limit}} találat -find_not_found=A kifejezés nem található - -# Predefined zoom values -page_scale_width=Oldalszélesség -page_scale_fit=Teljes oldal -page_scale_auto=Automatikus nagyítás -page_scale_actual=Valódi méret -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Hiba történt a PDF betöltésekor. -invalid_file_error=Érvénytelen vagy sérült PDF fájl. -missing_file_error=Hiányzó PDF fájl. -unexpected_response_error=Váratlan kiszolgálóválasz. -rendering_error=Hiba történt az oldal feldolgozása közben. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} megjegyzés] -password_label=Adja meg a jelszót a PDF fájl megnyitásához. -password_invalid=Helytelen jelszó. Próbálja újra. -password_ok=OK -password_cancel=Mégse - -printing_not_supported=Figyelmeztetés: Ez a böngésző nem teljesen támogatja a nyomtatást. -printing_not_ready=Figyelmeztetés: A PDF nincs teljesen betöltve a nyomtatáshoz. -web_fonts_disabled=Webes betűkészletek letiltva: nem használhatók a beágyazott PDF betűkészletek. - -# Editor -editor_free_text2.title=Szöveg -editor_free_text2_label=Szöveg -editor_ink2.title=Rajzolás -editor_ink2_label=Rajzolás - -editor_stamp1.title=Képek hozzáadása vagy szerkesztése -editor_stamp1_label=Képek hozzáadása vagy szerkesztése - -free_text2_default_content=Kezdjen el gépelni… - -# Editor Parameters -editor_free_text_color=Szín -editor_free_text_size=Méret -editor_ink_color=Szín -editor_ink_thickness=Vastagság -editor_ink_opacity=Átlátszatlanság - -editor_stamp_add_image_label=Kép hozzáadása -editor_stamp_add_image.title=Kép hozzáadása - -# Editor aria -editor_free_text2_aria_label=Szövegszerkesztő -editor_ink2_aria_label=Rajzszerkesztő -editor_ink_canvas_aria_label=Felhasználó által készített kép - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Alternatív szöveg -editor_alt_text_edit_button_label=Alternatív szöveg szerkesztése -editor_alt_text_dialog_label=Válasszon egy lehetőséget -editor_alt_text_dialog_description=Az alternatív szöveg segít, ha az emberek nem látják a képet, vagy ha az nem töltődik be. -editor_alt_text_add_description_label=Leírás hozzáadása -editor_alt_text_add_description_description=Törekedjen 1-2 mondatra, amely jellemzi a témát, környezetet vagy cselekvést. -editor_alt_text_mark_decorative_label=Megjelölés dekoratívként -editor_alt_text_mark_decorative_description=Ez a díszítőképeknél használatos, mint a szegélyek vagy a vízjelek. -editor_alt_text_cancel_button=Mégse -editor_alt_text_save_button=Mentés -editor_alt_text_decorative_tooltip=Megjelölve dekoratívként -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=Például: „Egy fiatal férfi leül enni egy asztalhoz” diff --git a/static/pdf.js/locale/hy-AM/viewer.ftl b/static/pdf.js/locale/hy-AM/viewer.ftl new file mode 100644 index 00000000..5c9dd27b --- /dev/null +++ b/static/pdf.js/locale/hy-AM/viewer.ftl @@ -0,0 +1,272 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = Անցնել Ներկայացման եղանակին +pdfjs-presentation-mode-button-label = Ներկայացման եղանակ +pdfjs-open-file-button = + .title = Բացել նիշք +pdfjs-open-file-button-label = Բացել +pdfjs-print-button = + .title = Տպել +pdfjs-print-button-label = Տպել +# 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-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 = Փաթաթված ոլորում +pdfjs-spread-none-button = + .title = Մի միացեք էջի վերածածկերին +pdfjs-spread-none-button-label = Չկա վերածածկեր +pdfjs-spread-odd-button = + .title = Միացեք էջի վերածածկերին սկսելով՝ կենտ համարակալված էջերով +pdfjs-spread-odd-button-label = Կենտ վերածածկեր +pdfjs-spread-even-button = + .title = Միացեք էջի վերածածկերին սկսելով՝ զույգ համարակալված էջերով +pdfjs-spread-even-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 = Նիշք չափը. +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } ԿԲ ({ $size_b } բայթ) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } ՄԲ ({ $size_b } բայթ) +pdfjs-document-properties-title = Վերնագիր. +pdfjs-document-properties-author = Հեղինակ․ +pdfjs-document-properties-subject = Վերնագիր. +pdfjs-document-properties-keywords = Հիմնաբառ. +pdfjs-document-properties-creation-date = Ստեղծելու ամսաթիվը. +pdfjs-document-properties-modification-date = Փոփոխելու ամսաթիվը. +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = ուղղաձիգ +pdfjs-document-properties-page-size-orientation-landscape = հորիզոնական +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Նամակ +pdfjs-document-properties-page-size-name-legal = Օրինական + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = Արագ վեբ դիտում․ +pdfjs-document-properties-linearized-yes = Այո +pdfjs-document-properties-linearized-no = Ոչ +pdfjs-document-properties-close-button = Փակել + +## Print + +pdfjs-print-progress-message = Նախապատրաստում է փաստաթուղթը տպելուն... +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Չեղարկել +pdfjs-printing-not-supported = Զգուշացում. Տպելը ամբողջությամբ չի աջակցվում դիտարկիչի կողմից։ +pdfjs-printing-not-ready = Զգուշացում. PDF-ը ամբողջությամբ չի բեռնավորվել տպելու համար: + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Բացել/Փակել Կողային վահանակը +pdfjs-toggle-sidebar-button-label = Բացել/Փակել Կողային վահանակը +pdfjs-document-outline-button = + .title = Ցուցադրել փաստաթղթի ուրվագիծը (կրկնակի սեղմեք՝ միավորները ընդարձակելու/կոծկելու համար) +pdfjs-document-outline-button-label = Փաստաթղթի բովանդակությունը +pdfjs-attachments-button = + .title = Ցուցադրել կցորդները +pdfjs-attachments-button-label = Կցորդներ +pdfjs-thumbs-button = + .title = Ցուցադրել Մանրապատկերը +pdfjs-thumbs-button-label = Մանրապատկերը +pdfjs-findbar-button = + .title = Գտնել փաստաթղթում +pdfjs-findbar-button-label = Որոնում + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Էջը { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Էջի մանրապատկերը { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Որոնում + .placeholder = Գտնել փաստաթղթում... +pdfjs-find-previous-button = + .title = Գտնել անրահայտության նախորդ հանդիպումը +pdfjs-find-previous-button-label = Նախորդը +pdfjs-find-next-button = + .title = Գտիր արտահայտության հաջորդ հանդիպումը +pdfjs-find-next-button-label = Հաջորդը +pdfjs-find-highlight-checkbox = Գունանշել բոլորը +pdfjs-find-match-case-checkbox-label = Մեծ(փոքր)ատառ հաշվի առնել +pdfjs-find-entire-word-checkbox-label = Ամբողջ բառերը +pdfjs-find-reached-top = Հասել եք փաստաթղթի վերևին, կշարունակվի ներքևից +pdfjs-find-reached-bottom = Հասել եք փաստաթղթի վերջին, կշարունակվի վերևից +pdfjs-find-not-found = Արտահայտությունը չգտնվեց + +## 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 + + +## Loading indicator messages + +pdfjs-loading-error = Սխալ՝ PDF ֆայլը բացելիս։ +pdfjs-invalid-file-error = Սխալ կամ վնասված PDF ֆայլ: +pdfjs-missing-file-error = PDF ֆայլը բացակայում է: +pdfjs-unexpected-response-error = Սպասարկիչի անսպասելի պատասխան: +pdfjs-rendering-error = Սխալ՝ էջը ստեղծելիս: + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Ծանոթություն] + +## Password + +pdfjs-password-label = Մուտքագրեք PDF-ի գաղտնաբառը: +pdfjs-password-invalid = Գաղտնաբառը սխալ է: Կրկին փորձեք: +pdfjs-password-ok-button = Լավ +pdfjs-password-cancel-button = Չեղարկել +pdfjs-web-fonts-disabled = Վեբ-տառատեսակները անջատված են. հնարավոր չէ օգտագործել ներկառուցված PDF տառատեսակները: + +## Editing + + +## Remove button for the various kind of editor. + + +## + +pdfjs-free-text-default-content = Սկսել մուտքագրումը… + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + + +## Color picker + + +## 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 = Ցուցադրել բոլորը diff --git a/static/pdf.js/locale/hy-AM/viewer.properties b/static/pdf.js/locale/hy-AM/viewer.properties deleted file mode 100644 index a2de23bc..00000000 --- a/static/pdf.js/locale/hy-AM/viewer.properties +++ /dev/null @@ -1,232 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Նախորդ էջը -previous_label=Նախորդը -next.title=Հաջորդ էջը -next_label=Հաջորդը - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Էջ. -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=-ը՝ {{pagesCount}}-ից -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}}-ը {{pagesCount}})-ից - -zoom_out.title=Փոքրացնել -zoom_out_label=Փոքրացնել -zoom_in.title=Խոշորացնել -zoom_in_label=Խոշորացնել -zoom.title=Մասշտաբ -presentation_mode.title=Անցնել Ներկայացման եղանակին -presentation_mode_label=Ներկայացման եղանակ -open_file.title=Բացել նիշք -open_file_label=Բացել -print.title=Տպել -print_label=Տպել - -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. - -# Secondary toolbar and context menu -tools.title=Գործիքներ -tools_label=Գործիքներ -first_page.title=Անցնել առաջին էջին -first_page_label=Անցնել առաջին էջին -last_page.title=Անցնել վերջին էջին -last_page_label=Անցնել վերջին էջին -page_rotate_cw.title=Պտտել ըստ ժամացույցի սլաքի -page_rotate_cw_label=Պտտել ըստ ժամացույցի սլաքի -page_rotate_ccw.title=Պտտել հակառակ ժամացույցի սլաքի -page_rotate_ccw_label=Պտտել հակառակ ժամացույցի սլաքի - -cursor_text_select_tool.title=Միացնել գրույթ ընտրելու գործիքը -cursor_text_select_tool_label=Գրույթը ընտրելու գործիք -cursor_hand_tool.title=Միացնել Ձեռքի գործիքը -cursor_hand_tool_label=Ձեռքի գործիք - -scroll_vertical.title=Օգտագործել ուղղահայաց ոլորում -scroll_vertical_label=Ուղղահայաց ոլորում -scroll_horizontal.title=Օգտագործել հորիզոնական ոլորում -scroll_horizontal_label=Հորիզոնական ոլորում -scroll_wrapped.title=Օգտագործել փաթաթված ոլորում -scroll_wrapped_label=Փաթաթված ոլորում - -spread_none.title=Մի միացեք էջի վերածածկերին -spread_none_label=Չկա վերածածկեր -spread_odd.title=Միացեք էջի վերածածկերին սկսելով՝ կենտ համարակալված էջերով -spread_odd_label=Կենտ վերածածկեր -spread_even.title=Միացեք էջի վերածածկերին սկսելով՝ զույգ համարակալված էջերով -spread_even_label=Զույգ վերածածկեր - -# Document properties dialog box -document_properties.title=Փաստաթղթի հատկությունները… -document_properties_label=Փաստաթղթի հատկությունները… -document_properties_file_name=Նիշքի անունը. -document_properties_file_size=Նիշք չափը. -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} ԿԲ ({{size_b}} բայթ) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} ՄԲ ({{size_b}} բայթ) -document_properties_title=Վերնագիր. -document_properties_author=Հեղինակ․ -document_properties_subject=Վերնագիր. -document_properties_keywords=Հիմնաբառ. -document_properties_creation_date=Ստեղծելու ամսաթիվը. -document_properties_modification_date=Փոփոխելու ամսաթիվը. -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Ստեղծող. -document_properties_producer=PDF-ի հեղինակը. -document_properties_version=PDF-ի տարբերակը. -document_properties_page_count=Էջերի քանակը. -document_properties_page_size=Էջի չափը. -document_properties_page_size_unit_inches=ում -document_properties_page_size_unit_millimeters=մմ -document_properties_page_size_orientation_portrait=ուղղաձիգ -document_properties_page_size_orientation_landscape=հորիզոնական -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Նամակ -document_properties_page_size_name_legal=Օրինական -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Արագ վեբ դիտում․ -document_properties_linearized_yes=Այո -document_properties_linearized_no=Ոչ -document_properties_close=Փակել - -print_progress_message=Նախապատրաստում է փաստաթուղթը տպելուն... -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Չեղարկել - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Բացել/Փակել Կողային վահանակը -toggle_sidebar_label=Բացել/Փակել Կողային վահանակը -document_outline.title=Ցուցադրել փաստաթղթի ուրվագիծը (կրկնակի սեղմեք՝ միավորները ընդարձակելու/կոծկելու համար) -document_outline_label=Փաստաթղթի բովանդակությունը -attachments.title=Ցուցադրել կցորդները -attachments_label=Կցորդներ -thumbs.title=Ցուցադրել Մանրապատկերը -thumbs_label=Մանրապատկերը -findbar.title=Գտնել փաստաթղթում -findbar_label=Որոնում - -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Էջը {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Էջի մանրապատկերը {{page}} - -# Find panel button title and messages -find_input.title=Որոնում -find_input.placeholder=Գտնել փաստաթղթում... -find_previous.title=Գտնել անրահայտության նախորդ հանդիպումը -find_previous_label=Նախորդը -find_next.title=Գտիր արտահայտության հաջորդ հանդիպումը -find_next_label=Հաջորդը -find_highlight=Գունանշել բոլորը -find_match_case_label=Մեծ(փոքր)ատառ հաշվի առնել -find_entire_word_label=Ամբողջ բառերը -find_reached_top=Հասել եք փաստաթղթի վերևին, կշարունակվի ներքևից -find_reached_bottom=Հասել եք փաստաթղթի վերջին, կշարունակվի վերևից -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ հոգնակի(ընդհանուր) ]} -find_match_count[one]={{current}} {{total}}-ի համընկնումից -find_match_count[two]={{current}} {{total}}-ի համընկնումներից -find_match_count[few]={{current}} {{total}}-ի համընկնումներից -find_match_count[many]={{current}} {{total}}-ի համընկնումներից -find_match_count[other]={{current}} {{total}}-ի համընկնումներից -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ հոգնակի (սահմանը) ]} -find_match_count_limit[zero]=Ավելին քան {{limit}} համընկնումները -find_match_count_limit[one]=Ավելին քան {{limit}} համընկնումը -find_match_count_limit[two]=Ավելին քան {{limit}} համընկնումներներ -find_match_count_limit[few]=Ավելին քան {{limit}} համընկնումներներ -find_match_count_limit[many]=Ավելին քան {{limit}} համընկնումներներ -find_match_count_limit[other]=Ավելին քան {{limit}} համընկնումներներ -find_not_found=Արտահայտությունը չգտնվեց - -# Predefined zoom values -page_scale_width=Էջի լայնքը -page_scale_fit=Ձգել էջը -page_scale_auto=Ինքնաշխատ -page_scale_actual=Իրական չափը -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages - -# Loading indicator messages -loading_error=Սխալ՝ PDF ֆայլը բացելիս։ -invalid_file_error=Սխալ կամ վնասված PDF ֆայլ: -missing_file_error=PDF ֆայլը բացակայում է: -unexpected_response_error=Սպասարկիչի անսպասելի պատասխան: - -rendering_error=Սխալ՝ էջը ստեղծելիս: - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Ծանոթություն] -password_label=Մուտքագրեք PDF-ի գաղտնաբառը: -password_invalid=Գաղտնաբառը սխալ է: Կրկին փորձեք: -password_ok=Լավ -password_cancel=Չեղարկել - -printing_not_supported=Զգուշացում. Տպելը ամբողջությամբ չի աջակցվում դիտարկիչի կողմից։ -printing_not_ready=Զգուշացում. PDF-ը ամբողջությամբ չի բեռնավորվել տպելու համար: -web_fonts_disabled=Վեբ-տառատեսակները անջատված են. հնարավոր չէ օգտագործել ներկառուցված PDF տառատեսակները: - -# Editor - - -# Editor Parameters - -# Editor aria - diff --git a/static/pdf.js/locale/hye/viewer.ftl b/static/pdf.js/locale/hye/viewer.ftl new file mode 100644 index 00000000..75cdc064 --- /dev/null +++ b/static/pdf.js/locale/hye/viewer.ftl @@ -0,0 +1,268 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = Անցնել ներկայացման եղանակին +pdfjs-presentation-mode-button-label = Ներկայացման եղանակ +pdfjs-open-file-button = + .title = Բացել նիշքը +pdfjs-open-file-button-label = Բացել +pdfjs-print-button = + .title = Տպել +pdfjs-print-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 = Փաթաթուած ոլորում +pdfjs-spread-none-button = + .title = Մի միացէք էջի կոնտեքստում +pdfjs-spread-none-button-label = Չկայ կոնտեքստ +pdfjs-spread-odd-button = + .title = Միացէք էջի կոնտեքստին սկսելով՝ կենտ համարակալուած էջերով +pdfjs-spread-odd-button-label = Տարաւրինակ կոնտեքստ +pdfjs-spread-even-button = + .title = Միացէք էջի կոնտեքստին սկսելով՝ զոյգ համարակալուած էջերով +pdfjs-spread-even-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 = Նիշք չափը. +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } ԿԲ ({ $size_b } բայթ) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } ՄԲ ({ $size_b } բայթ) +pdfjs-document-properties-title = Վերնագիր +pdfjs-document-properties-author = Հեղինակ․ +pdfjs-document-properties-subject = առարկայ +pdfjs-document-properties-keywords = Հիմնաբառեր +pdfjs-document-properties-creation-date = Ստեղծման ամսաթիւ +pdfjs-document-properties-modification-date = Փոփոխութեան ամսաթիւ. +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = mm +pdfjs-document-properties-page-size-orientation-portrait = ուղղաձիգ +pdfjs-document-properties-page-size-orientation-landscape = հորիզոնական +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Նամակ +pdfjs-document-properties-page-size-name-legal = Աւրինական + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = Արագ վեբ դիտում․ +pdfjs-document-properties-linearized-yes = Այո +pdfjs-document-properties-linearized-no = Ոչ +pdfjs-document-properties-close-button = Փակել + +## Print + +pdfjs-print-progress-message = Նախապատրաստում է փաստաթուղթը տպելուն… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Չեղարկել +pdfjs-printing-not-supported = Զգուշացում. Տպելը ամբողջութեամբ չի աջակցուում զննարկիչի կողմից։ +pdfjs-printing-not-ready = Զգուշացում. PDF֊ը ամբողջութեամբ չի բեռնաւորուել տպելու համար։ + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Փոխարկել կողային վահանակը +pdfjs-toggle-sidebar-notification-button = + .title = Փոխանջատել կողմնասիւնը (փաստաթուղթը պարունակում է ուրուագիծ/կցորդներ/շերտեր) +pdfjs-toggle-sidebar-button-label = Փոխարկել կողային վահանակը +pdfjs-document-outline-button = + .title = Ցուցադրել փաստաթղթի ուրուագիծը (կրկնակի սեղմէք՝ միաւորները ընդարձակելու/կոծկելու համար) +pdfjs-document-outline-button-label = Փաստաթղթի ուրուագիծ +pdfjs-attachments-button = + .title = Ցուցադրել կցորդները +pdfjs-attachments-button-label = Կցորդներ +pdfjs-layers-button = + .title = Ցուցադրել շերտերը (կրկնահպել վերակայելու բոլոր շերտերը սկզբնադիր վիճակի) +pdfjs-layers-button-label = Շերտեր +pdfjs-thumbs-button = + .title = Ցուցադրել մանրապատկերը +pdfjs-thumbs-button-label = Մանրապատկեր +pdfjs-current-outline-item-button = + .title = Գտէք ընթացիկ գծագրման տարրը +pdfjs-current-outline-item-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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Էջի մանրապատկերը { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Որոնում + .placeholder = Գտնել փաստաթղթում… +pdfjs-find-previous-button = + .title = Գտնել արտայայտութեան նախորդ արտայայտութիւնը +pdfjs-find-previous-button-label = Նախորդը +pdfjs-find-next-button = + .title = Գտիր արտայայտութեան յաջորդ արտայայտութիւնը +pdfjs-find-next-button-label = Հաջորդը +pdfjs-find-highlight-checkbox = Գունանշել բոլորը +pdfjs-find-match-case-checkbox-label = Հաշուի առնել հանգամանքը +pdfjs-find-match-diacritics-checkbox-label = Հնչիւնատարբերիչ նշանների համապատասխանեցում +pdfjs-find-entire-word-checkbox-label = Ամբողջ բառերը +pdfjs-find-reached-top = Հասել եք փաստաթղթի վերեւին,շարունակել ներքեւից +pdfjs-find-reached-bottom = Հասել էք փաստաթղթի վերջին, շարունակել վերեւից +pdfjs-find-not-found = Արտայայտութիւնը չգտնուեց + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = PDF նիշքը բացելիս սխալ է տեղի ունեցել։ +pdfjs-invalid-file-error = Սխալ կամ վնասուած PDF նիշք։ +pdfjs-missing-file-error = PDF նիշքը բացակաիւմ է։ +pdfjs-unexpected-response-error = Սպասարկիչի անսպասելի պատասխան։ +pdfjs-rendering-error = Սխալ է տեղի ունեցել էջի մեկնաբանման ժամանակ + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Ծանոթութիւն] + +## Password + +pdfjs-password-label = Մուտքագրէք գաղտնաբառը այս PDF նիշքը բացելու համար +pdfjs-password-invalid = Գաղտնաբառը սխալ է: Կրկին փորձէք: +pdfjs-password-ok-button = Լաւ +pdfjs-password-cancel-button = Չեղարկել +pdfjs-web-fonts-disabled = Վեբ-տառատեսակները անջատուած են. հնարաւոր չէ աւգտագործել ներկառուցուած PDF տառատեսակները։ + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/hye/viewer.properties b/static/pdf.js/locale/hye/viewer.properties deleted file mode 100644 index 2e289516..00000000 --- a/static/pdf.js/locale/hye/viewer.properties +++ /dev/null @@ -1,229 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Նախորդ էջ -previous_label=Նախորդը -next.title=Յաջորդ էջ -next_label=Յաջորդը - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=էջ -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages={{pagesCount}}-ից\u0020 -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}}-ը {{pagesCount}})-ից - -zoom_out.title=Փոքրացնել -zoom_out_label=Փոքրացնել -zoom_in.title=Խոշորացնել -zoom_in_label=Խոշորացնել -zoom.title=Խոշորացում -presentation_mode.title=Անցնել ներկայացման եղանակին -presentation_mode_label=Ներկայացման եղանակ -open_file.title=Բացել նիշքը -open_file_label=Բացել -print.title=Տպել -print_label=Տպել - -# Secondary toolbar and context menu -tools.title=Գործիքներ -tools_label=Գործիքներ -first_page.title=Գնալ դէպի առաջին էջ -first_page_label=Գնալ դէպի առաջին էջ -last_page.title=Գնալ դէպի վերջին էջ -last_page_label=Գնալ դէպի վերջին էջ -page_rotate_cw.title=Պտտել ժամացոյցի սլաքի ուղղութեամբ -page_rotate_cw_label=Պտտել ժամացոյցի սլաքի ուղղութեամբ -page_rotate_ccw.title=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ -page_rotate_ccw_label=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ - -cursor_text_select_tool.title=Միացնել գրոյթ ընտրելու գործիքը -cursor_text_select_tool_label=Գրուածք ընտրելու գործիք -cursor_hand_tool.title=Միացնել ձեռքի գործիքը -cursor_hand_tool_label=Ձեռքի գործիք - -scroll_page.title=Աւգտագործել էջի ոլորում -scroll_page_label=Էջի ոլորում -scroll_vertical.title=Աւգտագործել ուղղահայեաց ոլորում -scroll_vertical_label=Ուղղահայեաց ոլորում -scroll_horizontal.title=Աւգտագործել հորիզոնական ոլորում -scroll_horizontal_label=Հորիզոնական ոլորում -scroll_wrapped.title=Աւգտագործել փաթաթուած ոլորում -scroll_wrapped_label=Փաթաթուած ոլորում - -spread_none.title=Մի միացէք էջի կոնտեքստում -spread_none_label=Չկայ կոնտեքստ -spread_odd.title=Միացէք էջի կոնտեքստին սկսելով՝ կենտ համարակալուած էջերով -spread_odd_label=Տարաւրինակ կոնտեքստ -spread_even.title=Միացէք էջի կոնտեքստին սկսելով՝ զոյգ համարակալուած էջերով -spread_even_label=Հաւասար վերածածկեր - -# Document properties dialog box -document_properties.title=Փաստաթղթի հատկութիւնները… -document_properties_label=Փաստաթղթի յատկութիւնները… -document_properties_file_name=Նիշքի անունը․ -document_properties_file_size=Նիշք չափը. -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} ԿԲ ({{size_b}} բայթ) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} ՄԲ ({{size_b}} բայթ) -document_properties_title=Վերնագիր -document_properties_author=Հեղինակ․ -document_properties_subject=առարկայ -document_properties_keywords=Հիմնաբառեր -document_properties_creation_date=Ստեղծման ամսաթիւ -document_properties_modification_date=Փոփոխութեան ամսաթիւ. -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Ստեղծող -document_properties_producer=PDF-ի Արտադրողը. -document_properties_version=PDF-ի տարբերակը. -document_properties_page_count=Էջերի քանակը. -document_properties_page_size=Էջի չափը. -document_properties_page_size_unit_inches=ում -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=ուղղաձիգ -document_properties_page_size_orientation_landscape=հորիզոնական -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Նամակ -document_properties_page_size_name_legal=Աւրինական -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Արագ վեբ դիտում․ -document_properties_linearized_yes=Այո -document_properties_linearized_no=Ոչ -document_properties_close=Փակել - -print_progress_message=Նախապատրաստում է փաստաթուղթը տպելուն… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Չեղարկել - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Փոխարկել կողային վահանակը -toggle_sidebar_notification2.title=Փոխանջատել կողմնասիւնը (փաստաթուղթը պարունակում է ուրուագիծ/կցորդներ/շերտեր) -toggle_sidebar_label=Փոխարկել կողային վահանակը -document_outline.title=Ցուցադրել փաստաթղթի ուրուագիծը (կրկնակի սեղմէք՝ միաւորները ընդարձակելու/կոծկելու համար) -document_outline_label=Փաստաթղթի ուրուագիծ -attachments.title=Ցուցադրել կցորդները -attachments_label=Կցորդներ -layers.title=Ցուցադրել շերտերը (կրկնահպել վերակայելու բոլոր շերտերը սկզբնադիր վիճակի) -layers_label=Շերտեր -thumbs.title=Ցուցադրել մանրապատկերը -thumbs_label=Մանրապատկեր -current_outline_item.title=Գտէք ընթացիկ գծագրման տարրը -current_outline_item_label=Ընթացիկ գծագրման տարր -findbar.title=Գտնել փաստաթղթում -findbar_label=Որոնում - -additional_layers=Լրացուցիչ շերտեր -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Էջ {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Էջը {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Էջի մանրապատկերը {{page}} - -# Find panel button title and messages -find_input.title=Որոնում -find_input.placeholder=Գտնել փաստաթղթում… -find_previous.title=Գտնել արտայայտութեան նախորդ արտայայտութիւնը -find_previous_label=Նախորդը -find_next.title=Գտիր արտայայտութեան յաջորդ արտայայտութիւնը -find_next_label=Հաջորդը -find_highlight=Գունանշել բոլորը -find_match_case_label=Հաշուի առնել հանգամանքը -find_match_diacritics_label=Հնչիւնատարբերիչ նշանների համապատասխանեցում -find_entire_word_label=Ամբողջ բառերը -find_reached_top=Հասել եք փաստաթղթի վերեւին,շարունակել ներքեւից -find_reached_bottom=Հասել էք փաստաթղթի վերջին, շարունակել վերեւից -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} {{total}}-ի համընկնումից -find_match_count[two]={{current}} {{total}}-ի համընկնումներից -find_match_count[few]={{current}} {{total}}-ի համընկնումներից -find_match_count[many]={{current}} {{total}}-ի համընկնումներից -find_match_count[other]={{current}} {{total}}-ի համընկնումներից -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Աւելին քան {{limit}} համընկնումները -find_match_count_limit[one]=Աւելին քան {{limit}} համընկնումը -find_match_count_limit[two]=Աւելին քան {{limit}} համընկնումները -find_match_count_limit[few]=Աւելին քան {{limit}} համընկնումները -find_match_count_limit[many]=Աւելին քան {{limit}} համընկնումները -find_match_count_limit[other]=Աւելին քան {{limit}} համընկնումները -find_not_found=Արտայայտութիւնը չգտնուեց - -# Predefined zoom values -page_scale_width=Էջի լայնութիւն -page_scale_fit=Հարմարեցնել էջը -page_scale_auto=Ինքնաշխատ խոշորացում -page_scale_actual=Իրական չափը -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=PDF նիշքը բացելիս սխալ է տեղի ունեցել։ -invalid_file_error=Սխալ կամ վնասուած PDF նիշք։ -missing_file_error=PDF նիշքը բացակաիւմ է։ -unexpected_response_error=Սպասարկիչի անսպասելի պատասխան։ - -rendering_error=Սխալ է տեղի ունեցել էջի մեկնաբանման ժամանակ - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Ծանոթութիւն] -password_label=Մուտքագրէք գաղտնաբառը այս PDF նիշքը բացելու համար -password_invalid=Գաղտնաբառը սխալ է: Կրկին փորձէք: -password_ok=Լաւ -password_cancel=Չեղարկել - -printing_not_supported=Զգուշացում. Տպելը ամբողջութեամբ չի աջակցուում զննարկիչի կողմից։ -printing_not_ready=Զգուշացում. PDF֊ը ամբողջութեամբ չի բեռնաւորուել տպելու համար։ -web_fonts_disabled=Վեբ-տառատեսակները անջատուած են. հնարաւոր չէ աւգտագործել ներկառուցուած PDF տառատեսակները։ - diff --git a/static/pdf.js/locale/ia/viewer.ftl b/static/pdf.js/locale/ia/viewer.ftl new file mode 100644 index 00000000..59f3e56e --- /dev/null +++ b/static/pdf.js/locale/ia/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Pagina previe +pdfjs-previous-button-label = Previe +pdfjs-next-button = + .title = Pagina sequente +pdfjs-next-button-label = Sequente +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Pagina +# 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 = de { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount }) +pdfjs-zoom-out-button = + .title = Distantiar +pdfjs-zoom-out-button-label = Distantiar +pdfjs-zoom-in-button = + .title = Approximar +pdfjs-zoom-in-button-label = Approximar +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Excambiar a modo presentation +pdfjs-presentation-mode-button-label = Modo presentation +pdfjs-open-file-button = + .title = Aperir le file +pdfjs-open-file-button-label = Aperir +pdfjs-print-button = + .title = Imprimer +pdfjs-print-button-label = Imprimer +pdfjs-save-button = + .title = Salvar +pdfjs-save-button-label = Salvar +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Discargar +# 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 = Discargar +pdfjs-bookmark-button = + .title = Pagina actual (vide le URL del pagina actual) +pdfjs-bookmark-button-label = Pagina actual +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Aperir in app +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Aperir in app + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Instrumentos +pdfjs-tools-button-label = Instrumentos +pdfjs-first-page-button = + .title = Ir al prime pagina +pdfjs-first-page-button-label = Ir al prime pagina +pdfjs-last-page-button = + .title = Ir al prime pagina +pdfjs-last-page-button-label = Ir al prime pagina +pdfjs-page-rotate-cw-button = + .title = Rotar in senso horari +pdfjs-page-rotate-cw-button-label = Rotar in senso horari +pdfjs-page-rotate-ccw-button = + .title = Rotar in senso antihorari +pdfjs-page-rotate-ccw-button-label = Rotar in senso antihorari +pdfjs-cursor-text-select-tool-button = + .title = Activar le instrumento de selection de texto +pdfjs-cursor-text-select-tool-button-label = Instrumento de selection de texto +pdfjs-cursor-hand-tool-button = + .title = Activar le instrumento mano +pdfjs-cursor-hand-tool-button-label = Instrumento mano +pdfjs-scroll-page-button = + .title = Usar rolamento de pagina +pdfjs-scroll-page-button-label = Rolamento de pagina +pdfjs-scroll-vertical-button = + .title = Usar rolamento vertical +pdfjs-scroll-vertical-button-label = Rolamento vertical +pdfjs-scroll-horizontal-button = + .title = Usar rolamento horizontal +pdfjs-scroll-horizontal-button-label = Rolamento horizontal +pdfjs-scroll-wrapped-button = + .title = Usar rolamento incapsulate +pdfjs-scroll-wrapped-button-label = Rolamento incapsulate +pdfjs-spread-none-button = + .title = Non junger paginas dual +pdfjs-spread-none-button-label = Sin paginas dual +pdfjs-spread-odd-button = + .title = Junger paginas dual a partir de paginas con numeros impar +pdfjs-spread-odd-button-label = Paginas dual impar +pdfjs-spread-even-button = + .title = Junger paginas dual a partir de paginas con numeros par +pdfjs-spread-even-button-label = Paginas dual par + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Proprietates del documento… +pdfjs-document-properties-button-label = Proprietates del documento… +pdfjs-document-properties-file-name = Nomine del file: +pdfjs-document-properties-file-size = Dimension de file: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Titulo: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Subjecto: +pdfjs-document-properties-keywords = Parolas clave: +pdfjs-document-properties-creation-date = Data de creation: +pdfjs-document-properties-modification-date = Data de modification: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Creator: +pdfjs-document-properties-producer = Productor PDF: +pdfjs-document-properties-version = Version PDF: +pdfjs-document-properties-page-count = Numero de paginas: +pdfjs-document-properties-page-size = Dimension del pagina: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = vertical +pdfjs-document-properties-page-size-orientation-landscape = horizontal +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 = Littera +pdfjs-document-properties-page-size-name-legal = 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 = Vista web rapide: +pdfjs-document-properties-linearized-yes = Si +pdfjs-document-properties-linearized-no = No +pdfjs-document-properties-close-button = Clauder + +## Print + +pdfjs-print-progress-message = Preparation del documento pro le impression… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Cancellar +pdfjs-printing-not-supported = Attention : le impression non es totalmente supportate per ce navigator. +pdfjs-printing-not-ready = Attention: le file PDF non es integremente cargate pro lo poter imprimer. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Monstrar/celar le barra lateral +pdfjs-toggle-sidebar-notification-button = + .title = Monstrar/celar le barra lateral (le documento contine structura/attachamentos/stratos) +pdfjs-toggle-sidebar-button-label = Monstrar/celar le barra lateral +pdfjs-document-outline-button = + .title = Monstrar le schema del documento (clic duple pro expander/contraher tote le elementos) +pdfjs-document-outline-button-label = Schema del documento +pdfjs-attachments-button = + .title = Monstrar le annexos +pdfjs-attachments-button-label = Annexos +pdfjs-layers-button = + .title = Monstrar stratos (clicca duple pro remontar tote le stratos al stato predefinite) +pdfjs-layers-button-label = Stratos +pdfjs-thumbs-button = + .title = Monstrar le vignettes +pdfjs-thumbs-button-label = Vignettes +pdfjs-current-outline-item-button = + .title = Trovar le elemento de structura actual +pdfjs-current-outline-item-button-label = Elemento de structura actual +pdfjs-findbar-button = + .title = Cercar in le documento +pdfjs-findbar-button-label = Cercar +pdfjs-additional-layers = Altere stratos + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Pagina { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Vignette del pagina { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Cercar + .placeholder = Cercar in le documento… +pdfjs-find-previous-button = + .title = Trovar le previe occurrentia del phrase +pdfjs-find-previous-button-label = Previe +pdfjs-find-next-button = + .title = Trovar le successive occurrentia del phrase +pdfjs-find-next-button-label = Sequente +pdfjs-find-highlight-checkbox = Evidentiar toto +pdfjs-find-match-case-checkbox-label = Distinguer majusculas/minusculas +pdfjs-find-match-diacritics-checkbox-label = Differentiar diacriticos +pdfjs-find-entire-word-checkbox-label = Parolas integre +pdfjs-find-reached-top = Initio del documento attingite, continuation ab fin +pdfjs-find-reached-bottom = Fin del documento attingite, continuation ab initio +# 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 } de { $total } correspondentia + *[other] { $current } de { $total } correspondentias + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Plus de { $limit } correspondentia + *[other] Plus de { $limit } correspondentias + } +pdfjs-find-not-found = Phrase non trovate + +## Predefined zoom values + +pdfjs-page-scale-width = Plen largor del pagina +pdfjs-page-scale-fit = Pagina integre +pdfjs-page-scale-auto = Zoom automatic +pdfjs-page-scale-actual = Dimension real +# 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 = Pagina { $page } + +## Loading indicator messages + +pdfjs-loading-error = Un error occurreva durante que on cargava le file PDF. +pdfjs-invalid-file-error = File PDF corrumpite o non valide. +pdfjs-missing-file-error = File PDF mancante. +pdfjs-unexpected-response-error = Responsa del servitor inexpectate. +pdfjs-rendering-error = Un error occurreva durante que on processava le pagina. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Annotation] + +## Password + +pdfjs-password-label = Insere le contrasigno pro aperir iste file PDF. +pdfjs-password-invalid = Contrasigno invalide. Per favor retenta. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Cancellar +pdfjs-web-fonts-disabled = Le typos de litteras web es disactivate: impossibile usar le typos de litteras PDF incorporate. + +## Editing + +pdfjs-editor-free-text-button = + .title = Texto +pdfjs-editor-free-text-button-label = Texto +pdfjs-editor-ink-button = + .title = Designar +pdfjs-editor-ink-button-label = Designar +pdfjs-editor-stamp-button = + .title = Adder o rediger imagines +pdfjs-editor-stamp-button-label = Adder o rediger imagines +pdfjs-editor-highlight-button = + .title = Evidentia +pdfjs-editor-highlight-button-label = Evidentia +pdfjs-highlight-floating-button = + .title = Evidentiar +pdfjs-highlight-floating-button1 = + .title = Evidentiar + .aria-label = Evidentiar +pdfjs-highlight-floating-button-label = Evidentiar + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Remover le designo +pdfjs-editor-remove-freetext-button = + .title = Remover texto +pdfjs-editor-remove-stamp-button = + .title = Remover imagine +pdfjs-editor-remove-highlight-button = + .title = Remover evidentia + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Color +pdfjs-editor-free-text-size-input = Dimension +pdfjs-editor-ink-color-input = Color +pdfjs-editor-ink-thickness-input = Spissor +pdfjs-editor-ink-opacity-input = Opacitate +pdfjs-editor-stamp-add-image-button = + .title = Adder imagine +pdfjs-editor-stamp-add-image-button-label = Adder imagine +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Spissor +pdfjs-editor-free-highlight-thickness-title = + .title = Cambiar spissor evidentiante elementos differente de texto +pdfjs-free-text = + .aria-label = Editor de texto +pdfjs-free-text-default-content = Comenciar a scriber… +pdfjs-ink = + .aria-label = Editor de designos +pdfjs-ink-canvas = + .aria-label = Imagine create per le usator + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Texto alternative +pdfjs-editor-alt-text-edit-button-label = Rediger texto alternative +pdfjs-editor-alt-text-dialog-label = Elige un option +pdfjs-editor-alt-text-dialog-description = Le texto alternative (alt text) adjuta quando le personas non pote vider le imagine o quando illo non carga. +pdfjs-editor-alt-text-add-description-label = Adder un description +pdfjs-editor-alt-text-add-description-description = Mira a 1-2 phrases que describe le subjecto, parametro, o actiones. +pdfjs-editor-alt-text-mark-decorative-label = Marcar como decorative +pdfjs-editor-alt-text-mark-decorative-description = Isto es usate pro imagines ornamental, como bordaturas o filigranas. +pdfjs-editor-alt-text-cancel-button = Cancellar +pdfjs-editor-alt-text-save-button = Salvar +pdfjs-editor-alt-text-decorative-tooltip = Marcate como decorative +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Per exemplo, “Un juvene sede a un tabula pro mangiar un repasto” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Angulo superior sinistre — redimensionar +pdfjs-editor-resizer-label-top-middle = Medio superior — redimensionar +pdfjs-editor-resizer-label-top-right = Angulo superior dextre — redimensionar +pdfjs-editor-resizer-label-middle-right = Medio dextre — redimensionar +pdfjs-editor-resizer-label-bottom-right = Angulo inferior dextre — redimensionar +pdfjs-editor-resizer-label-bottom-middle = Medio inferior — redimensionar +pdfjs-editor-resizer-label-bottom-left = Angulo inferior sinistre — redimensionar +pdfjs-editor-resizer-label-middle-left = Medio sinistre — redimensionar + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Color pro evidentiar +pdfjs-editor-colorpicker-button = + .title = Cambiar color +pdfjs-editor-colorpicker-dropdown = + .aria-label = Electiones del color +pdfjs-editor-colorpicker-yellow = + .title = Jalne +pdfjs-editor-colorpicker-green = + .title = Verde +pdfjs-editor-colorpicker-blue = + .title = Blau +pdfjs-editor-colorpicker-pink = + .title = Rosate +pdfjs-editor-colorpicker-red = + .title = Rubie + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Monstrar toto +pdfjs-editor-highlight-show-all-button = + .title = Monstrar toto diff --git a/static/pdf.js/locale/ia/viewer.properties b/static/pdf.js/locale/ia/viewer.properties deleted file mode 100644 index a0e296e7..00000000 --- a/static/pdf.js/locale/ia/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Pagina previe -previous_label=Previe -next.title=Pagina sequente -next_label=Sequente - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Pagina -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=de {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} de {{pagesCount}}) - -zoom_out.title=Distantiar -zoom_out_label=Distantiar -zoom_in.title=Approximar -zoom_in_label=Approximar -zoom.title=Zoom -presentation_mode.title=Excambiar a modo presentation -presentation_mode_label=Modo presentation -open_file.title=Aperir le file -open_file_label=Aperir -print.title=Imprimer -print_label=Imprimer -save.title=Salvar -save_label=Salvar -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Discargar -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Discargar -bookmark1.title=Pagina actual (vide le URL del pagina actual) -bookmark1_label=Pagina actual -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Aperir in app -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Aperir in app - -# Secondary toolbar and context menu -tools.title=Instrumentos -tools_label=Instrumentos -first_page.title=Ir al prime pagina -first_page_label=Ir al prime pagina -last_page.title=Ir al prime pagina -last_page_label=Ir al prime pagina -page_rotate_cw.title=Rotar in senso horari -page_rotate_cw_label=Rotar in senso horari -page_rotate_ccw.title=Rotar in senso antihorari -page_rotate_ccw_label=Rotar in senso antihorari - -cursor_text_select_tool.title=Activar le instrumento de selection de texto -cursor_text_select_tool_label=Instrumento de selection de texto -cursor_hand_tool.title=Activar le instrumento mano -cursor_hand_tool_label=Instrumento mano - -scroll_page.title=Usar rolamento de pagina -scroll_page_label=Rolamento de pagina -scroll_vertical.title=Usar rolamento vertical -scroll_vertical_label=Rolamento vertical -scroll_horizontal.title=Usar rolamento horizontal -scroll_horizontal_label=Rolamento horizontal -scroll_wrapped.title=Usar rolamento incapsulate -scroll_wrapped_label=Rolamento incapsulate - -spread_none.title=Non junger paginas dual -spread_none_label=Sin paginas dual -spread_odd.title=Junger paginas dual a partir de paginas con numeros impar -spread_odd_label=Paginas dual impar -spread_even.title=Junger paginas dual a partir de paginas con numeros par -spread_even_label=Paginas dual par - -# Document properties dialog box -document_properties.title=Proprietates del documento… -document_properties_label=Proprietates del documento… -document_properties_file_name=Nomine del file: -document_properties_file_size=Dimension de file: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Titulo: -document_properties_author=Autor: -document_properties_subject=Subjecto: -document_properties_keywords=Parolas clave: -document_properties_creation_date=Data de creation: -document_properties_modification_date=Data de modification: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Creator: -document_properties_producer=Productor PDF: -document_properties_version=Version PDF: -document_properties_page_count=Numero de paginas: -document_properties_page_size=Dimension del pagina: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=vertical -document_properties_page_size_orientation_landscape=horizontal -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Littera -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Vista web rapide: -document_properties_linearized_yes=Si -document_properties_linearized_no=No -document_properties_close=Clauder - -print_progress_message=Preparation del documento pro le impression… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Cancellar - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Monstrar/celar le barra lateral -toggle_sidebar_notification2.title=Monstrar/celar le barra lateral (le documento contine structura/attachamentos/stratos) -toggle_sidebar_label=Monstrar/celar le barra lateral -document_outline.title=Monstrar le schema del documento (clic duple pro expander/contraher tote le elementos) -document_outline_label=Schema del documento -attachments.title=Monstrar le annexos -attachments_label=Annexos -layers.title=Monstrar stratos (clicca duple pro remontar tote le stratos al stato predefinite) -layers_label=Stratos -thumbs.title=Monstrar le vignettes -thumbs_label=Vignettes -current_outline_item.title=Trovar le elemento de structura actual -current_outline_item_label=Elemento de structura actual -findbar.title=Cercar in le documento -findbar_label=Cercar - -additional_layers=Altere stratos -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Pagina {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Pagina {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Vignette del pagina {{page}} - -# Find panel button title and messages -find_input.title=Cercar -find_input.placeholder=Cercar in le documento… -find_previous.title=Trovar le previe occurrentia del phrase -find_previous_label=Previe -find_next.title=Trovar le successive occurrentia del phrase -find_next_label=Sequente -find_highlight=Evidentiar toto -find_match_case_label=Distinguer majusculas/minusculas -find_match_diacritics_label=Differentiar diacriticos -find_entire_word_label=Parolas integre -find_reached_top=Initio del documento attingite, continuation ab fin -find_reached_bottom=Fin del documento attingite, continuation ab initio -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} de {{total}} concordantia -find_match_count[two]={{current}} de {{total}} concordantias -find_match_count[few]={{current}} de {{total}} concordantias -find_match_count[many]={{current}} de {{total}} concordantias -find_match_count[other]={{current}} de {{total}} concordantias -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Plus de {{limit}} concordantias -find_match_count_limit[one]=Plus de {{limit}} concordantia -find_match_count_limit[two]=Plus de {{limit}} concordantias -find_match_count_limit[few]=Plus de {{limit}} concordantias -find_match_count_limit[many]=Plus de {{limit}} correspondentias -find_match_count_limit[other]=Plus de {{limit}} concordantias -find_not_found=Phrase non trovate - -# Predefined zoom values -page_scale_width=Plen largor del pagina -page_scale_fit=Pagina integre -page_scale_auto=Zoom automatic -page_scale_actual=Dimension real -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Un error occurreva durante que on cargava le file PDF. -invalid_file_error=File PDF corrumpite o non valide. -missing_file_error=File PDF mancante. -unexpected_response_error=Responsa del servitor inexpectate. -rendering_error=Un error occurreva durante que on processava le pagina. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Annotation] -password_label=Insere le contrasigno pro aperir iste file PDF. -password_invalid=Contrasigno invalide. Per favor retenta. -password_ok=OK -password_cancel=Cancellar - -printing_not_supported=Attention : le impression non es totalmente supportate per ce navigator. -printing_not_ready=Attention: le file PDF non es integremente cargate pro lo poter imprimer. -web_fonts_disabled=Le typos de litteras web es disactivate: impossibile usar le typos de litteras PDF incorporate. - -# Editor -editor_free_text2.title=Texto -editor_free_text2_label=Texto -editor_ink2.title=Designar -editor_ink2_label=Designar - -editor_stamp1.title=Adder o rediger imagines -editor_stamp1_label=Adder o rediger imagines - -free_text2_default_content=Comenciar a scriber… - -# Editor Parameters -editor_free_text_color=Color -editor_free_text_size=Dimension -editor_ink_color=Color -editor_ink_thickness=Spissor -editor_ink_opacity=Opacitate - -editor_stamp_add_image_label=Adder imagine -editor_stamp_add_image.title=Adder imagine - -# Editor aria -editor_free_text2_aria_label=Editor de texto -editor_ink2_aria_label=Editor de designos -editor_ink_canvas_aria_label=Imagine create per le usator - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Texto alternative -editor_alt_text_edit_button_label=Rediger texto alternative -editor_alt_text_dialog_label=Elige un option -editor_alt_text_dialog_description=Le texto alternative (alt text) adjuta quando le personas non pote vider le imagine o quando illo non carga. -editor_alt_text_add_description_label=Adder un description -editor_alt_text_add_description_description=Mira a 1-2 phrases que describe le subjecto, parametro, o actiones. -editor_alt_text_mark_decorative_label=Marcar como decorative -editor_alt_text_mark_decorative_description=Isto es usate pro imagines ornamental, como bordaturas o filigranas. -editor_alt_text_cancel_button=Cancellar -editor_alt_text_save_button=Salvar -editor_alt_text_decorative_tooltip=Marcate como decorative -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=Per exemplo, “Un juvene sede a un tabula pro mangiar un repasto” diff --git a/static/pdf.js/locale/id/viewer.ftl b/static/pdf.js/locale/id/viewer.ftl new file mode 100644 index 00000000..fee8d18b --- /dev/null +++ b/static/pdf.js/locale/id/viewer.ftl @@ -0,0 +1,293 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Laman Sebelumnya +pdfjs-previous-button-label = Sebelumnya +pdfjs-next-button = + .title = Laman Selanjutnya +pdfjs-next-button-label = Selanjutnya +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Halaman +# 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 = dari { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } dari { $pagesCount }) +pdfjs-zoom-out-button = + .title = Perkecil +pdfjs-zoom-out-button-label = Perkecil +pdfjs-zoom-in-button = + .title = Perbesar +pdfjs-zoom-in-button-label = Perbesar +pdfjs-zoom-select = + .title = Perbesaran +pdfjs-presentation-mode-button = + .title = Ganti ke Mode Presentasi +pdfjs-presentation-mode-button-label = Mode Presentasi +pdfjs-open-file-button = + .title = Buka Berkas +pdfjs-open-file-button-label = Buka +pdfjs-print-button = + .title = Cetak +pdfjs-print-button-label = Cetak +pdfjs-save-button = + .title = Simpan +pdfjs-save-button-label = Simpan +pdfjs-bookmark-button = + .title = Laman Saat Ini (Lihat URL dari Laman Sekarang) +pdfjs-bookmark-button-label = Laman Saat Ini + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Alat +pdfjs-tools-button-label = Alat +pdfjs-first-page-button = + .title = Buka Halaman Pertama +pdfjs-first-page-button-label = Buka Halaman Pertama +pdfjs-last-page-button = + .title = Buka Halaman Terakhir +pdfjs-last-page-button-label = Buka Halaman Terakhir +pdfjs-page-rotate-cw-button = + .title = Putar Searah Jarum Jam +pdfjs-page-rotate-cw-button-label = Putar Searah Jarum Jam +pdfjs-page-rotate-ccw-button = + .title = Putar Berlawanan Arah Jarum Jam +pdfjs-page-rotate-ccw-button-label = Putar Berlawanan Arah Jarum Jam +pdfjs-cursor-text-select-tool-button = + .title = Aktifkan Alat Seleksi Teks +pdfjs-cursor-text-select-tool-button-label = Alat Seleksi Teks +pdfjs-cursor-hand-tool-button = + .title = Aktifkan Alat Tangan +pdfjs-cursor-hand-tool-button-label = Alat Tangan +pdfjs-scroll-page-button = + .title = Gunakan Pengguliran Laman +pdfjs-scroll-page-button-label = Pengguliran Laman +pdfjs-scroll-vertical-button = + .title = Gunakan Penggeseran Vertikal +pdfjs-scroll-vertical-button-label = Penggeseran Vertikal +pdfjs-scroll-horizontal-button = + .title = Gunakan Penggeseran Horizontal +pdfjs-scroll-horizontal-button-label = Penggeseran Horizontal +pdfjs-scroll-wrapped-button = + .title = Gunakan Penggeseran Terapit +pdfjs-scroll-wrapped-button-label = Penggeseran Terapit +pdfjs-spread-none-button = + .title = Jangan gabungkan lembar halaman +pdfjs-spread-none-button-label = Tidak Ada Lembaran +pdfjs-spread-odd-button = + .title = Gabungkan lembar lamanan mulai dengan halaman ganjil +pdfjs-spread-odd-button-label = Lembaran Ganjil +pdfjs-spread-even-button = + .title = Gabungkan lembar halaman dimulai dengan halaman genap +pdfjs-spread-even-button-label = Lembaran Genap + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Properti Dokumen… +pdfjs-document-properties-button-label = Properti Dokumen… +pdfjs-document-properties-file-name = Nama berkas: +pdfjs-document-properties-file-size = Ukuran berkas: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } byte) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } byte) +pdfjs-document-properties-title = Judul: +pdfjs-document-properties-author = Penyusun: +pdfjs-document-properties-subject = Subjek: +pdfjs-document-properties-keywords = Kata Kunci: +pdfjs-document-properties-creation-date = Tanggal Dibuat: +pdfjs-document-properties-modification-date = Tanggal Dimodifikasi: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Pembuat: +pdfjs-document-properties-producer = Pemroduksi PDF: +pdfjs-document-properties-version = Versi PDF: +pdfjs-document-properties-page-count = Jumlah Halaman: +pdfjs-document-properties-page-size = Ukuran Laman: +pdfjs-document-properties-page-size-unit-inches = inci +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = tegak +pdfjs-document-properties-page-size-orientation-landscape = mendatar +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Tampilan Web Kilat: +pdfjs-document-properties-linearized-yes = Ya +pdfjs-document-properties-linearized-no = Tidak +pdfjs-document-properties-close-button = Tutup + +## Print + +pdfjs-print-progress-message = Menyiapkan dokumen untuk pencetakan… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Batalkan +pdfjs-printing-not-supported = Peringatan: Pencetakan tidak didukung secara lengkap pada peramban ini. +pdfjs-printing-not-ready = Peringatan: Berkas PDF masih belum dimuat secara lengkap untuk dapat dicetak. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Aktif/Nonaktifkan Bilah Samping +pdfjs-toggle-sidebar-notification-button = + .title = Aktif/Nonaktifkan Bilah Samping (dokumen berisi kerangka/lampiran/lapisan) +pdfjs-toggle-sidebar-button-label = Aktif/Nonaktifkan Bilah Samping +pdfjs-document-outline-button = + .title = Tampilkan Kerangka Dokumen (klik ganda untuk membentangkan/menciutkan semua item) +pdfjs-document-outline-button-label = Kerangka Dokumen +pdfjs-attachments-button = + .title = Tampilkan Lampiran +pdfjs-attachments-button-label = Lampiran +pdfjs-layers-button = + .title = Tampilkan Lapisan (klik ganda untuk mengatur ulang semua lapisan ke keadaan baku) +pdfjs-layers-button-label = Lapisan +pdfjs-thumbs-button = + .title = Tampilkan Miniatur +pdfjs-thumbs-button-label = Miniatur +pdfjs-current-outline-item-button = + .title = Cari Butir Ikhtisar Saat Ini +pdfjs-current-outline-item-button-label = Butir Ikhtisar Saat Ini +pdfjs-findbar-button = + .title = Temukan di Dokumen +pdfjs-findbar-button-label = Temukan +pdfjs-additional-layers = Lapisan Tambahan + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Laman { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatur Laman { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Temukan + .placeholder = Temukan di dokumen… +pdfjs-find-previous-button = + .title = Temukan kata sebelumnya +pdfjs-find-previous-button-label = Sebelumnya +pdfjs-find-next-button = + .title = Temukan lebih lanjut +pdfjs-find-next-button-label = Selanjutnya +pdfjs-find-highlight-checkbox = Sorot semuanya +pdfjs-find-match-case-checkbox-label = Cocokkan BESAR/kecil +pdfjs-find-match-diacritics-checkbox-label = Pencocokan Diakritik +pdfjs-find-entire-word-checkbox-label = Seluruh teks +pdfjs-find-reached-top = Sampai di awal dokumen, dilanjutkan dari bawah +pdfjs-find-reached-bottom = Sampai di akhir dokumen, dilanjutkan dari atas +pdfjs-find-not-found = Frasa tidak ditemukan + +## Predefined zoom values + +pdfjs-page-scale-width = Lebar Laman +pdfjs-page-scale-fit = Muat Laman +pdfjs-page-scale-auto = Perbesaran Otomatis +pdfjs-page-scale-actual = Ukuran Asli +# 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 = Halaman { $page } + +## Loading indicator messages + +pdfjs-loading-error = Galat terjadi saat memuat PDF. +pdfjs-invalid-file-error = Berkas PDF tidak valid atau rusak. +pdfjs-missing-file-error = Berkas PDF tidak ada. +pdfjs-unexpected-response-error = Balasan server yang tidak diharapkan. +pdfjs-rendering-error = Galat terjadi saat merender laman. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Anotasi { $type }] + +## Password + +pdfjs-password-label = Masukkan sandi untuk membuka berkas PDF ini. +pdfjs-password-invalid = Sandi tidak valid. Silakan coba lagi. +pdfjs-password-ok-button = Oke +pdfjs-password-cancel-button = Batal +pdfjs-web-fonts-disabled = Font web dinonaktifkan: tidak dapat menggunakan font PDF yang tersemat. + +## Editing + +pdfjs-editor-free-text-button = + .title = Teks +pdfjs-editor-free-text-button-label = Teks +pdfjs-editor-ink-button = + .title = Gambar +pdfjs-editor-ink-button-label = Gambar +# Editor Parameters +pdfjs-editor-free-text-color-input = Warna +pdfjs-editor-free-text-size-input = Ukuran +pdfjs-editor-ink-color-input = Warna +pdfjs-editor-ink-thickness-input = Ketebalan +pdfjs-editor-ink-opacity-input = Opasitas +pdfjs-free-text = + .aria-label = Editor Teks +pdfjs-free-text-default-content = Mulai mengetik… +pdfjs-ink = + .aria-label = Editor Gambar +pdfjs-ink-canvas = + .aria-label = Gambar yang dibuat pengguna + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/id/viewer.properties b/static/pdf.js/locale/id/viewer.properties deleted file mode 100644 index 6d82e979..00000000 --- a/static/pdf.js/locale/id/viewer.properties +++ /dev/null @@ -1,253 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Laman Sebelumnya -previous_label=Sebelumnya -next.title=Laman Selanjutnya -next_label=Selanjutnya - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Halaman -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=dari {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} dari {{pagesCount}}) - -zoom_out.title=Perkecil -zoom_out_label=Perkecil -zoom_in.title=Perbesar -zoom_in_label=Perbesar -zoom.title=Perbesaran -presentation_mode.title=Ganti ke Mode Presentasi -presentation_mode_label=Mode Presentasi -open_file.title=Buka Berkas -open_file_label=Buka -print.title=Cetak -print_label=Cetak -save.title=Simpan -save_label=Simpan - -bookmark1.title=Laman Saat Ini (Lihat URL dari Laman Sekarang) -bookmark1_label=Laman Saat Ini - -# Secondary toolbar and context menu -tools.title=Alat -tools_label=Alat -first_page.title=Buka Halaman Pertama -first_page_label=Buka Halaman Pertama -last_page.title=Buka Halaman Terakhir -last_page_label=Buka Halaman Terakhir -page_rotate_cw.title=Putar Searah Jarum Jam -page_rotate_cw_label=Putar Searah Jarum Jam -page_rotate_ccw.title=Putar Berlawanan Arah Jarum Jam -page_rotate_ccw_label=Putar Berlawanan Arah Jarum Jam - -cursor_text_select_tool.title=Aktifkan Alat Seleksi Teks -cursor_text_select_tool_label=Alat Seleksi Teks -cursor_hand_tool.title=Aktifkan Alat Tangan -cursor_hand_tool_label=Alat Tangan - -scroll_page.title=Gunakan Pengguliran Laman -scroll_page_label=Pengguliran Laman -scroll_vertical.title=Gunakan Penggeseran Vertikal -scroll_vertical_label=Penggeseran Vertikal -scroll_horizontal.title=Gunakan Penggeseran Horizontal -scroll_horizontal_label=Penggeseran Horizontal -scroll_wrapped.title=Gunakan Penggeseran Terapit -scroll_wrapped_label=Penggeseran Terapit - -spread_none.title=Jangan gabungkan lembar halaman -spread_none_label=Tidak Ada Lembaran -spread_odd.title=Gabungkan lembar lamanan mulai dengan halaman ganjil -spread_odd_label=Lembaran Ganjil -spread_even.title=Gabungkan lembar halaman dimulai dengan halaman genap -spread_even_label=Lembaran Genap - -# Document properties dialog box -document_properties.title=Properti Dokumen… -document_properties_label=Properti Dokumen… -document_properties_file_name=Nama berkas: -document_properties_file_size=Ukuran berkas: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} byte) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} byte) -document_properties_title=Judul: -document_properties_author=Penyusun: -document_properties_subject=Subjek: -document_properties_keywords=Kata Kunci: -document_properties_creation_date=Tanggal Dibuat: -document_properties_modification_date=Tanggal Dimodifikasi: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Pembuat: -document_properties_producer=Pemroduksi PDF: -document_properties_version=Versi PDF: -document_properties_page_count=Jumlah Halaman: -document_properties_page_size=Ukuran Laman: -document_properties_page_size_unit_inches=inci -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=tegak -document_properties_page_size_orientation_landscape=mendatar -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Tampilan Web Kilat: -document_properties_linearized_yes=Ya -document_properties_linearized_no=Tidak -document_properties_close=Tutup - -print_progress_message=Menyiapkan dokumen untuk pencetakan… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Batalkan - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Aktif/Nonaktifkan Bilah Samping -toggle_sidebar_notification2.title=Aktif/Nonaktifkan Bilah Samping (dokumen berisi kerangka/lampiran/lapisan) -toggle_sidebar_label=Aktif/Nonaktifkan Bilah Samping -document_outline.title=Tampilkan Kerangka Dokumen (klik ganda untuk membentangkan/menciutkan semua item) -document_outline_label=Kerangka Dokumen -attachments.title=Tampilkan Lampiran -attachments_label=Lampiran -layers.title=Tampilkan Lapisan (klik ganda untuk mengatur ulang semua lapisan ke keadaan baku) -layers_label=Lapisan -thumbs.title=Tampilkan Miniatur -thumbs_label=Miniatur -current_outline_item.title=Cari Butir Ikhtisar Saat Ini -current_outline_item_label=Butir Ikhtisar Saat Ini -findbar.title=Temukan di Dokumen -findbar_label=Temukan - -additional_layers=Lapisan Tambahan -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Halaman {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Laman {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatur Laman {{page}} - -# Find panel button title and messages -find_input.title=Temukan -find_input.placeholder=Temukan di dokumen… -find_previous.title=Temukan kata sebelumnya -find_previous_label=Sebelumnya -find_next.title=Temukan lebih lanjut -find_next_label=Selanjutnya -find_highlight=Sorot semuanya -find_match_case_label=Cocokkan BESAR/kecil -find_match_diacritics_label=Pencocokan Diakritik -find_entire_word_label=Seluruh teks -find_reached_top=Sampai di awal dokumen, dilanjutkan dari bawah -find_reached_bottom=Sampai di akhir dokumen, dilanjutkan dari atas -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} dari {{total}} hasil -find_match_count[two]={{current}} dari {{total}} hasil -find_match_count[few]={{current}} dari {{total}} hasil -find_match_count[many]={{current}} dari {{total}} hasil -find_match_count[other]={{current}} dari {{total}} hasil -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Ditemukan lebih dari {{limit}} -find_match_count_limit[one]=Ditemukan lebih dari {{limit}} -find_match_count_limit[two]=Ditemukan lebih dari {{limit}} -find_match_count_limit[few]=Ditemukan lebih dari {{limit}} -find_match_count_limit[many]=Ditemukan lebih dari {{limit}} -find_match_count_limit[other]=Ditemukan lebih dari {{limit}} -find_not_found=Frasa tidak ditemukan - -# Predefined zoom values -page_scale_width=Lebar Laman -page_scale_fit=Muat Laman -page_scale_auto=Perbesaran Otomatis -page_scale_actual=Ukuran Asli -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=Galat terjadi saat memuat PDF. -invalid_file_error=Berkas PDF tidak valid atau rusak. -missing_file_error=Berkas PDF tidak ada. -unexpected_response_error=Balasan server yang tidak diharapkan. - -rendering_error=Galat terjadi saat merender laman. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Anotasi {{type}}] -password_label=Masukkan sandi untuk membuka berkas PDF ini. -password_invalid=Sandi tidak valid. Silakan coba lagi. -password_ok=Oke -password_cancel=Batal - -printing_not_supported=Peringatan: Pencetakan tidak didukung secara lengkap pada peramban ini. -printing_not_ready=Peringatan: Berkas PDF masih belum dimuat secara lengkap untuk dapat dicetak. -web_fonts_disabled=Font web dinonaktifkan: tidak dapat menggunakan font PDF yang tersemat. - -# Editor -editor_free_text2.title=Teks -editor_free_text2_label=Teks -editor_ink2.title=Gambar -editor_ink2_label=Gambar - -free_text2_default_content=Mulai mengetik… - -# Editor Parameters -editor_free_text_color=Warna -editor_free_text_size=Ukuran -editor_ink_color=Warna -editor_ink_thickness=Ketebalan -editor_ink_opacity=Opasitas - -# Editor aria -editor_free_text2_aria_label=Editor Teks -editor_ink2_aria_label=Editor Gambar -editor_ink_canvas_aria_label=Gambar yang dibuat pengguna diff --git a/static/pdf.js/locale/is/viewer.ftl b/static/pdf.js/locale/is/viewer.ftl new file mode 100644 index 00000000..d3afef3e --- /dev/null +++ b/static/pdf.js/locale/is/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Fyrri síða +pdfjs-previous-button-label = Fyrri +pdfjs-next-button = + .title = Næsta síða +pdfjs-next-button-label = Næsti +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Síða +# 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 = af { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } af { $pagesCount }) +pdfjs-zoom-out-button = + .title = Minnka aðdrátt +pdfjs-zoom-out-button-label = Minnka aðdrátt +pdfjs-zoom-in-button = + .title = Auka aðdrátt +pdfjs-zoom-in-button-label = Auka aðdrátt +pdfjs-zoom-select = + .title = Aðdráttur +pdfjs-presentation-mode-button = + .title = Skipta yfir á kynningarham +pdfjs-presentation-mode-button-label = Kynningarhamur +pdfjs-open-file-button = + .title = Opna skrá +pdfjs-open-file-button-label = Opna +pdfjs-print-button = + .title = Prenta +pdfjs-print-button-label = Prenta +pdfjs-save-button = + .title = Vista +pdfjs-save-button-label = Vista +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Sækja +# 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 = Sækja +pdfjs-bookmark-button = + .title = Núverandi síða (Skoða vefslóð frá núverandi síðu) +pdfjs-bookmark-button-label = Núverandi síða +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Opna í smáforriti +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Opna í smáforriti + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Verkfæri +pdfjs-tools-button-label = Verkfæri +pdfjs-first-page-button = + .title = Fara á fyrstu síðu +pdfjs-first-page-button-label = Fara á fyrstu síðu +pdfjs-last-page-button = + .title = Fara á síðustu síðu +pdfjs-last-page-button-label = Fara á síðustu síðu +pdfjs-page-rotate-cw-button = + .title = Snúa réttsælis +pdfjs-page-rotate-cw-button-label = Snúa réttsælis +pdfjs-page-rotate-ccw-button = + .title = Snúa rangsælis +pdfjs-page-rotate-ccw-button-label = Snúa rangsælis +pdfjs-cursor-text-select-tool-button = + .title = Virkja textavalsáhald +pdfjs-cursor-text-select-tool-button-label = Textavalsáhald +pdfjs-cursor-hand-tool-button = + .title = Virkja handarverkfæri +pdfjs-cursor-hand-tool-button-label = Handarverkfæri +pdfjs-scroll-page-button = + .title = Nota síðuskrun +pdfjs-scroll-page-button-label = Síðuskrun +pdfjs-scroll-vertical-button = + .title = Nota lóðrétt skrun +pdfjs-scroll-vertical-button-label = Lóðrétt skrun +pdfjs-scroll-horizontal-button = + .title = Nota lárétt skrun +pdfjs-scroll-horizontal-button-label = Lárétt skrun +pdfjs-scroll-wrapped-button = + .title = Nota línuskipt síðuskrun +pdfjs-scroll-wrapped-button-label = Línuskipt síðuskrun +pdfjs-spread-none-button = + .title = Ekki taka þátt í dreifingu síðna +pdfjs-spread-none-button-label = Engin dreifing +pdfjs-spread-odd-button = + .title = Taka þátt í dreifingu síðna með oddatölum +pdfjs-spread-odd-button-label = Oddatöludreifing +pdfjs-spread-even-button = + .title = Taktu þátt í dreifingu síðna með jöfnuntölum +pdfjs-spread-even-button-label = Jafnatöludreifing + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Eiginleikar skjals… +pdfjs-document-properties-button-label = Eiginleikar skjals… +pdfjs-document-properties-file-name = Skráarnafn: +pdfjs-document-properties-file-size = Skrárstærð: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Titill: +pdfjs-document-properties-author = Hönnuður: +pdfjs-document-properties-subject = Efni: +pdfjs-document-properties-keywords = Stikkorð: +pdfjs-document-properties-creation-date = Búið til: +pdfjs-document-properties-modification-date = Dags breytingar: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Höfundur: +pdfjs-document-properties-producer = PDF framleiðandi: +pdfjs-document-properties-version = PDF útgáfa: +pdfjs-document-properties-page-count = Blaðsíðufjöldi: +pdfjs-document-properties-page-size = Stærð síðu: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = skammsnið +pdfjs-document-properties-page-size-orientation-landscape = langsnið +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Fljótleg vefskoðun: +pdfjs-document-properties-linearized-yes = Já +pdfjs-document-properties-linearized-no = Nei +pdfjs-document-properties-close-button = Loka + +## Print + +pdfjs-print-progress-message = Undirbý skjal fyrir prentun… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Hætta við +pdfjs-printing-not-supported = Aðvörun: Prentun er ekki með fyllilegan stuðning á þessum vafra. +pdfjs-printing-not-ready = Aðvörun: Ekki er búið að hlaða inn allri PDF skránni fyrir prentun. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Víxla hliðarspjaldi af/á +pdfjs-toggle-sidebar-notification-button = + .title = Víxla hliðarslá (skjal inniheldur yfirlit/viðhengi/lög) +pdfjs-toggle-sidebar-button-label = Víxla hliðarspjaldi af/á +pdfjs-document-outline-button = + .title = Sýna yfirlit skjals (tvísmelltu til að opna/loka öllum hlutum) +pdfjs-document-outline-button-label = Efnisskipan skjals +pdfjs-attachments-button = + .title = Sýna viðhengi +pdfjs-attachments-button-label = Viðhengi +pdfjs-layers-button = + .title = Birta lög (tvísmelltu til að endurstilla öll lög í sjálfgefna stöðu) +pdfjs-layers-button-label = Lög +pdfjs-thumbs-button = + .title = Sýna smámyndir +pdfjs-thumbs-button-label = Smámyndir +pdfjs-current-outline-item-button = + .title = Finna núverandi atriði efnisskipunar +pdfjs-current-outline-item-button-label = Núverandi atriði efnisskipunar +pdfjs-findbar-button = + .title = Leita í skjali +pdfjs-findbar-button-label = Leita +pdfjs-additional-layers = Viðbótarlög + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Síða { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Smámynd af síðu { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Leita + .placeholder = Leita í skjali… +pdfjs-find-previous-button = + .title = Leita að fyrra tilfelli þessara orða +pdfjs-find-previous-button-label = Fyrri +pdfjs-find-next-button = + .title = Leita að næsta tilfelli þessara orða +pdfjs-find-next-button-label = Næsti +pdfjs-find-highlight-checkbox = Lita allt +pdfjs-find-match-case-checkbox-label = Passa við stafstöðu +pdfjs-find-match-diacritics-checkbox-label = Passa við broddstafi +pdfjs-find-entire-word-checkbox-label = Heil orð +pdfjs-find-reached-top = Náði efst í skjal, held áfram neðst +pdfjs-find-reached-bottom = Náði enda skjals, held áfram efst +# 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 } af { $total } passar við + *[other] { $current } af { $total } passa við + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Fleiri en { $limit } passar við + *[other] Fleiri en { $limit } passa við + } +pdfjs-find-not-found = Fann ekki orðið + +## Predefined zoom values + +pdfjs-page-scale-width = Síðubreidd +pdfjs-page-scale-fit = Passa á síðu +pdfjs-page-scale-auto = Sjálfvirkur aðdráttur +pdfjs-page-scale-actual = Raunstærð +# 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 = Síða { $page } + +## Loading indicator messages + +pdfjs-loading-error = Villa kom upp við að hlaða inn PDF. +pdfjs-invalid-file-error = Ógild eða skemmd PDF skrá. +pdfjs-missing-file-error = Vantar PDF skrá. +pdfjs-unexpected-response-error = Óvænt svar frá netþjóni. +pdfjs-rendering-error = Upp kom villa við að birta síðuna. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Skýring] + +## Password + +pdfjs-password-label = Sláðu inn lykilorð til að opna þessa PDF skrá. +pdfjs-password-invalid = Ógilt lykilorð. Reyndu aftur. +pdfjs-password-ok-button = Í lagi +pdfjs-password-cancel-button = Hætta við +pdfjs-web-fonts-disabled = Vef leturgerðir eru óvirkar: get ekki notað innbyggðar PDF leturgerðir. + +## Editing + +pdfjs-editor-free-text-button = + .title = Texti +pdfjs-editor-free-text-button-label = Texti +pdfjs-editor-ink-button = + .title = Teikna +pdfjs-editor-ink-button-label = Teikna +pdfjs-editor-stamp-button = + .title = Bæta við eða breyta myndum +pdfjs-editor-stamp-button-label = Bæta við eða breyta myndum +pdfjs-editor-highlight-button = + .title = Áherslulita +pdfjs-editor-highlight-button-label = Áherslulita +pdfjs-highlight-floating-button = + .title = Áherslulita +pdfjs-highlight-floating-button1 = + .title = Áherslulita + .aria-label = Áherslulita +pdfjs-highlight-floating-button-label = Áherslulita + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Fjarlægja teikningu +pdfjs-editor-remove-freetext-button = + .title = Fjarlægja texta +pdfjs-editor-remove-stamp-button = + .title = Fjarlægja mynd +pdfjs-editor-remove-highlight-button = + .title = Fjarlægja áherslulit + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Litur +pdfjs-editor-free-text-size-input = Stærð +pdfjs-editor-ink-color-input = Litur +pdfjs-editor-ink-thickness-input = Þykkt +pdfjs-editor-ink-opacity-input = Ógegnsæi +pdfjs-editor-stamp-add-image-button = + .title = Bæta við mynd +pdfjs-editor-stamp-add-image-button-label = Bæta við mynd +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Þykkt +pdfjs-editor-free-highlight-thickness-title = + .title = Breyta þykkt við áherslulitun annarra atriða en texta +pdfjs-free-text = + .aria-label = Textaritill +pdfjs-free-text-default-content = Byrjaðu að skrifa… +pdfjs-ink = + .aria-label = Teikniritill +pdfjs-ink-canvas = + .aria-label = Mynd gerð af notanda + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alt-varatexti +pdfjs-editor-alt-text-edit-button-label = Breyta alt-varatexta +pdfjs-editor-alt-text-dialog-label = Veldu valkost +pdfjs-editor-alt-text-dialog-description = Alt-varatexti (auka-myndatexti) hjálpar þegar fólk getur ekki séð myndina eða þegar hún hleðst ekki inn. +pdfjs-editor-alt-text-add-description-label = Bættu við lýsingu +pdfjs-editor-alt-text-add-description-description = Reyndu að takmarka þetta við 1-2 setningar sem lýsa efninu, umhverfi eða aðgerðum. +pdfjs-editor-alt-text-mark-decorative-label = Merkja sem skraut +pdfjs-editor-alt-text-mark-decorative-description = Þetta er notað fyrir skrautmyndir, eins og borða eða vatnsmerki. +pdfjs-editor-alt-text-cancel-button = Hætta við +pdfjs-editor-alt-text-save-button = Vista +pdfjs-editor-alt-text-decorative-tooltip = Merkt sem skraut +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Til dæmis: „Ungur maður sest við borð til að snæða máltíð“ + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Efst í vinstra horni - breyta stærð +pdfjs-editor-resizer-label-top-middle = Efst á miðju - breyta stærð +pdfjs-editor-resizer-label-top-right = Efst í hægra horni - breyta stærð +pdfjs-editor-resizer-label-middle-right = Miðja til hægri - breyta stærð +pdfjs-editor-resizer-label-bottom-right = Neðst í hægra horni - breyta stærð +pdfjs-editor-resizer-label-bottom-middle = Neðst á miðju - breyta stærð +pdfjs-editor-resizer-label-bottom-left = Neðst í vinstra horni - breyta stærð +pdfjs-editor-resizer-label-middle-left = Miðja til vinstri - breyta stærð + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Áherslulitur +pdfjs-editor-colorpicker-button = + .title = Skipta um lit +pdfjs-editor-colorpicker-dropdown = + .aria-label = Val lita +pdfjs-editor-colorpicker-yellow = + .title = Gult +pdfjs-editor-colorpicker-green = + .title = Grænt +pdfjs-editor-colorpicker-blue = + .title = Blátt +pdfjs-editor-colorpicker-pink = + .title = Bleikt +pdfjs-editor-colorpicker-red = + .title = Rautt + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Birta allt +pdfjs-editor-highlight-show-all-button = + .title = Birta allt diff --git a/static/pdf.js/locale/is/viewer.properties b/static/pdf.js/locale/is/viewer.properties deleted file mode 100644 index 4b40c1b6..00000000 --- a/static/pdf.js/locale/is/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Fyrri síða -previous_label=Fyrri -next.title=Næsta síða -next_label=Næsti - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Síða -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=af {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} af {{pagesCount}}) - -zoom_out.title=Minnka aðdrátt -zoom_out_label=Minnka aðdrátt -zoom_in.title=Auka aðdrátt -zoom_in_label=Auka aðdrátt -zoom.title=Aðdráttur -presentation_mode.title=Skipta yfir á kynningarham -presentation_mode_label=Kynningarhamur -open_file.title=Opna skrá -open_file_label=Opna -print.title=Prenta -print_label=Prenta -save.title=Vista -save_label=Vista -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Sækja -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Sækja -bookmark1.title=Núverandi síða (Skoða vefslóð frá núverandi síðu) -bookmark1_label=Núverandi síða -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Opna í smáforriti -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Opna í smáforriti - -# Secondary toolbar and context menu -tools.title=Verkfæri -tools_label=Verkfæri -first_page.title=Fara á fyrstu síðu -first_page_label=Fara á fyrstu síðu -last_page.title=Fara á síðustu síðu -last_page_label=Fara á síðustu síðu -page_rotate_cw.title=Snúa réttsælis -page_rotate_cw_label=Snúa réttsælis -page_rotate_ccw.title=Snúa rangsælis -page_rotate_ccw_label=Snúa rangsælis - -cursor_text_select_tool.title=Virkja textavalsáhald -cursor_text_select_tool_label=Textavalsáhald -cursor_hand_tool.title=Virkja handarverkfæri -cursor_hand_tool_label=Handarverkfæri - -scroll_page.title=Nota síðuskrun -scroll_page_label=Síðuskrun -scroll_vertical.title=Nota lóðrétt skrun -scroll_vertical_label=Lóðrétt skrun -scroll_horizontal.title=Nota lárétt skrun -scroll_horizontal_label=Lárétt skrun -scroll_wrapped.title=Nota línuskipt síðuskrun -scroll_wrapped_label=Línuskipt síðuskrun - -spread_none.title=Ekki taka þátt í dreifingu síðna -spread_none_label=Engin dreifing -spread_odd.title=Taka þátt í dreifingu síðna með oddatölum -spread_odd_label=Oddatöludreifing -spread_even.title=Taktu þátt í dreifingu síðna með jöfnuntölum -spread_even_label=Jafnatöludreifing - -# Document properties dialog box -document_properties.title=Eiginleikar skjals… -document_properties_label=Eiginleikar skjals… -document_properties_file_name=Skráarnafn: -document_properties_file_size=Skrárstærð: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Titill: -document_properties_author=Hönnuður: -document_properties_subject=Efni: -document_properties_keywords=Stikkorð: -document_properties_creation_date=Búið til: -document_properties_modification_date=Dags breytingar: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Höfundur: -document_properties_producer=PDF framleiðandi: -document_properties_version=PDF útgáfa: -document_properties_page_count=Blaðsíðufjöldi: -document_properties_page_size=Stærð síðu: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=skammsnið -document_properties_page_size_orientation_landscape=langsnið -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Fljótleg vefskoðun: -document_properties_linearized_yes=Já -document_properties_linearized_no=Nei -document_properties_close=Loka - -print_progress_message=Undirbý skjal fyrir prentun… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Hætta við - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Víxla hliðarspjaldi af/á -toggle_sidebar_notification2.title=Víxla hliðarslá (skjal inniheldur yfirlit/viðhengi/lög) -toggle_sidebar_label=Víxla hliðarspjaldi af/á -document_outline.title=Sýna yfirlit skjals (tvísmelltu til að opna/loka öllum hlutum) -document_outline_label=Efnisskipan skjals -attachments.title=Sýna viðhengi -attachments_label=Viðhengi -layers.title=Birta lög (tvísmelltu til að endurstilla öll lög í sjálfgefna stöðu) -layers_label=Lög -thumbs.title=Sýna smámyndir -thumbs_label=Smámyndir -current_outline_item.title=Finna núverandi atriði efnisskipunar -current_outline_item_label=Núverandi atriði efnisskipunar -findbar.title=Leita í skjali -findbar_label=Leita - -additional_layers=Viðbótarlög -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Síða {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Síða {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Smámynd af síðu {{page}} - -# Find panel button title and messages -find_input.title=Leita -find_input.placeholder=Leita í skjali… -find_previous.title=Leita að fyrra tilfelli þessara orða -find_previous_label=Fyrri -find_next.title=Leita að næsta tilfelli þessara orða -find_next_label=Næsti -find_highlight=Lita allt -find_match_case_label=Passa við stafstöðu -find_match_diacritics_label=Passa við broddstafi -find_entire_word_label=Heil orð -find_reached_top=Náði efst í skjal, held áfram neðst -find_reached_bottom=Náði enda skjals, held áfram efst -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} af {{total}} niðurstöðu -find_match_count[two]={{current}} af {{total}} niðurstöðum -find_match_count[few]={{current}} af {{total}} niðurstöðum -find_match_count[many]={{current}} af {{total}} niðurstöðum -find_match_count[other]={{current}} af {{total}} niðurstöðum -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Fleiri en {{limit}} niðurstöður -find_match_count_limit[one]=Fleiri en {{limit}} niðurstaða -find_match_count_limit[two]=Fleiri en {{limit}} niðurstöður -find_match_count_limit[few]=Fleiri en {{limit}} niðurstöður -find_match_count_limit[many]=Fleiri en {{limit}} niðurstöður -find_match_count_limit[other]=Fleiri en {{limit}} niðurstöður -find_not_found=Fann ekki orðið - -# Predefined zoom values -page_scale_width=Síðubreidd -page_scale_fit=Passa á síðu -page_scale_auto=Sjálfvirkur aðdráttur -page_scale_actual=Raunstærð -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Villa kom upp við að hlaða inn PDF. -invalid_file_error=Ógild eða skemmd PDF skrá. -missing_file_error=Vantar PDF skrá. -unexpected_response_error=Óvænt svar frá netþjóni. -rendering_error=Upp kom villa við að birta síðuna. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Skýring] -password_label=Sláðu inn lykilorð til að opna þessa PDF skrá. -password_invalid=Ógilt lykilorð. Reyndu aftur. -password_ok=Í lagi -password_cancel=Hætta við - -printing_not_supported=Aðvörun: Prentun er ekki með fyllilegan stuðning á þessum vafra. -printing_not_ready=Aðvörun: Ekki er búið að hlaða inn allri PDF skránni fyrir prentun. -web_fonts_disabled=Vef leturgerðir eru óvirkar: get ekki notað innbyggðar PDF leturgerðir. - -# Editor -editor_free_text2.title=Texti -editor_free_text2_label=Texti -editor_ink2.title=Teikna -editor_ink2_label=Teikna - -editor_stamp1.title=Bæta við eða breyta myndum -editor_stamp1_label=Bæta við eða breyta myndum - -free_text2_default_content=Byrjaðu að skrifa… - -# Editor Parameters -editor_free_text_color=Litur -editor_free_text_size=Stærð -editor_ink_color=Litur -editor_ink_thickness=Þykkt -editor_ink_opacity=Ógegnsæi - -editor_stamp_add_image_label=Bæta við mynd -editor_stamp_add_image.title=Bæta við mynd - -# Editor aria -editor_free_text2_aria_label=Textaritill -editor_ink2_aria_label=Teikniritill -editor_ink_canvas_aria_label=Mynd gerð af notanda - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Alt-varatexti -editor_alt_text_edit_button_label=Breyta alt-varatexta -editor_alt_text_dialog_label=Veldu valkost -editor_alt_text_dialog_description=Alt-varatexti (auka-myndatexti) hjálpar þegar fólk getur ekki séð myndina eða þegar hún hleðst ekki inn. -editor_alt_text_add_description_label=Bættu við lýsingu -editor_alt_text_add_description_description=Reyndu að takmarka þetta við 1-2 setningar sem lýsa efninu, umhverfi eða aðgerðum. -editor_alt_text_mark_decorative_label=Merkja sem skraut -editor_alt_text_mark_decorative_description=Þetta er notað fyrir skrautmyndir, eins og borða eða vatnsmerki. -editor_alt_text_cancel_button=Hætta við -editor_alt_text_save_button=Vista -editor_alt_text_decorative_tooltip=Merkt sem skraut -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=Til dæmis: „Ungur maður sest við borð til að snæða máltíð“ diff --git a/static/pdf.js/locale/it/viewer.ftl b/static/pdf.js/locale/it/viewer.ftl new file mode 100644 index 00000000..fcdab36a --- /dev/null +++ b/static/pdf.js/locale/it/viewer.ftl @@ -0,0 +1,399 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Pagina precedente +pdfjs-previous-button-label = Precedente +pdfjs-next-button = + .title = Pagina successiva +pdfjs-next-button-label = Successiva +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Pagina +# 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 = di { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } di { $pagesCount }) +pdfjs-zoom-out-button = + .title = Riduci zoom +pdfjs-zoom-out-button-label = Riduci zoom +pdfjs-zoom-in-button = + .title = Aumenta zoom +pdfjs-zoom-in-button-label = Aumenta zoom +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Passa alla modalità presentazione +pdfjs-presentation-mode-button-label = Modalità presentazione +pdfjs-open-file-button = + .title = Apri file +pdfjs-open-file-button-label = Apri +pdfjs-print-button = + .title = Stampa +pdfjs-print-button-label = Stampa +pdfjs-save-button = + .title = Salva +pdfjs-save-button-label = Salva +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Scarica +# 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 = Scarica +pdfjs-bookmark-button = + .title = Pagina corrente (mostra URL della pagina corrente) +pdfjs-bookmark-button-label = Pagina corrente + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Strumenti +pdfjs-tools-button-label = Strumenti +pdfjs-first-page-button = + .title = Vai alla prima pagina +pdfjs-first-page-button-label = Vai alla prima pagina +pdfjs-last-page-button = + .title = Vai all’ultima pagina +pdfjs-last-page-button-label = Vai all’ultima pagina +pdfjs-page-rotate-cw-button = + .title = Ruota in senso orario +pdfjs-page-rotate-cw-button-label = Ruota in senso orario +pdfjs-page-rotate-ccw-button = + .title = Ruota in senso antiorario +pdfjs-page-rotate-ccw-button-label = Ruota in senso antiorario +pdfjs-cursor-text-select-tool-button = + .title = Attiva strumento di selezione testo +pdfjs-cursor-text-select-tool-button-label = Strumento di selezione testo +pdfjs-cursor-hand-tool-button = + .title = Attiva strumento mano +pdfjs-cursor-hand-tool-button-label = Strumento mano +pdfjs-scroll-page-button = + .title = Utilizza scorrimento pagine +pdfjs-scroll-page-button-label = Scorrimento pagine +pdfjs-scroll-vertical-button = + .title = Scorri le pagine in verticale +pdfjs-scroll-vertical-button-label = Scorrimento verticale +pdfjs-scroll-horizontal-button = + .title = Scorri le pagine in orizzontale +pdfjs-scroll-horizontal-button-label = Scorrimento orizzontale +pdfjs-scroll-wrapped-button = + .title = Scorri le pagine in verticale, disponendole da sinistra a destra e andando a capo automaticamente +pdfjs-scroll-wrapped-button-label = Scorrimento con a capo automatico +pdfjs-spread-none-button = + .title = Non raggruppare pagine +pdfjs-spread-none-button-label = Nessun raggruppamento +pdfjs-spread-odd-button = + .title = Crea gruppi di pagine che iniziano con numeri di pagina dispari +pdfjs-spread-odd-button-label = Raggruppamento dispari +pdfjs-spread-even-button = + .title = Crea gruppi di pagine che iniziano con numeri di pagina pari +pdfjs-spread-even-button-label = Raggruppamento pari + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Proprietà del documento… +pdfjs-document-properties-button-label = Proprietà del documento… +pdfjs-document-properties-file-name = Nome file: +pdfjs-document-properties-file-size = Dimensione file: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } kB ({ $size_b } byte) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } byte) +pdfjs-document-properties-title = Titolo: +pdfjs-document-properties-author = Autore: +pdfjs-document-properties-subject = Oggetto: +pdfjs-document-properties-keywords = Parole chiave: +pdfjs-document-properties-creation-date = Data creazione: +pdfjs-document-properties-modification-date = Data modifica: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Autore originale: +pdfjs-document-properties-producer = Produttore PDF: +pdfjs-document-properties-version = Versione PDF: +pdfjs-document-properties-page-count = Conteggio pagine: +pdfjs-document-properties-page-size = Dimensioni pagina: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = verticale +pdfjs-document-properties-page-size-orientation-landscape = orizzontale +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 = Lettera +pdfjs-document-properties-page-size-name-legal = Legale + +## 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 = Visualizzazione web veloce: +pdfjs-document-properties-linearized-yes = Sì +pdfjs-document-properties-linearized-no = No +pdfjs-document-properties-close-button = Chiudi + +## Print + +pdfjs-print-progress-message = Preparazione documento per la stampa… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Annulla +pdfjs-printing-not-supported = Attenzione: la stampa non è completamente supportata da questo browser. +pdfjs-printing-not-ready = Attenzione: il PDF non è ancora stato caricato completamente per la stampa. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Attiva/disattiva barra laterale +pdfjs-toggle-sidebar-notification-button = + .title = Attiva/disattiva barra laterale (il documento contiene struttura/allegati/livelli) +pdfjs-toggle-sidebar-button-label = Attiva/disattiva barra laterale +pdfjs-document-outline-button = + .title = Visualizza la struttura del documento (doppio clic per visualizzare/comprimere tutti gli elementi) +pdfjs-document-outline-button-label = Struttura documento +pdfjs-attachments-button = + .title = Visualizza allegati +pdfjs-attachments-button-label = Allegati +pdfjs-layers-button = + .title = Visualizza livelli (doppio clic per ripristinare tutti i livelli allo stato predefinito) +pdfjs-layers-button-label = Livelli +pdfjs-thumbs-button = + .title = Mostra le miniature +pdfjs-thumbs-button-label = Miniature +pdfjs-current-outline-item-button = + .title = Trova elemento struttura corrente +pdfjs-current-outline-item-button-label = Elemento struttura corrente +pdfjs-findbar-button = + .title = Trova nel documento +pdfjs-findbar-button-label = Trova +pdfjs-additional-layers = Livelli aggiuntivi + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Pagina { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura della pagina { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Trova + .placeholder = Trova nel documento… +pdfjs-find-previous-button = + .title = Trova l’occorrenza precedente del testo da cercare +pdfjs-find-previous-button-label = Precedente +pdfjs-find-next-button = + .title = Trova l’occorrenza successiva del testo da cercare +pdfjs-find-next-button-label = Successivo +pdfjs-find-highlight-checkbox = Evidenzia +pdfjs-find-match-case-checkbox-label = Maiuscole/minuscole +pdfjs-find-match-diacritics-checkbox-label = Segni diacritici +pdfjs-find-entire-word-checkbox-label = Parole intere +pdfjs-find-reached-top = Raggiunto l’inizio della pagina, continua dalla fine +pdfjs-find-reached-bottom = Raggiunta la fine della pagina, continua dall’inizio + +# 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 } di { $total } corrispondenza + *[other] { $current } di { $total } corrispondenze + } + +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Più di una { $limit } corrispondenza + *[other] Più di { $limit } corrispondenze + } + +pdfjs-find-not-found = Testo non trovato + +## Predefined zoom values + +pdfjs-page-scale-width = Larghezza pagina +pdfjs-page-scale-fit = Adatta a una pagina +pdfjs-page-scale-auto = Zoom automatico +pdfjs-page-scale-actual = Dimensioni effettive +# 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 = Pagina { $page } + +## Loading indicator messages + +pdfjs-loading-error = Si è verificato un errore durante il caricamento del PDF. +pdfjs-invalid-file-error = File PDF non valido o danneggiato. +pdfjs-missing-file-error = File PDF non disponibile. +pdfjs-unexpected-response-error = Risposta imprevista del server +pdfjs-rendering-error = Si è verificato un errore durante il rendering della pagina. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Annotazione: { $type }] + +## Password + +pdfjs-password-label = Inserire la password per aprire questo file PDF. +pdfjs-password-invalid = Password non corretta. Riprovare. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Annulla +pdfjs-web-fonts-disabled = I web font risultano disattivati: impossibile utilizzare i caratteri incorporati nel PDF. + +## Editing + +pdfjs-editor-free-text-button = + .title = Testo +pdfjs-editor-free-text-button-label = Testo +pdfjs-editor-ink-button = + .title = Disegno +pdfjs-editor-ink-button-label = Disegno +pdfjs-editor-stamp-button = + .title = Aggiungi o rimuovi immagine +pdfjs-editor-stamp-button-label = Aggiungi o rimuovi immagine +pdfjs-editor-highlight-button = + .title = Evidenzia +pdfjs-editor-highlight-button-label = Evidenzia +pdfjs-highlight-floating-button1 = + .title = Evidenzia + .aria-label = Evidenzia +pdfjs-highlight-floating-button-label = Evidenzia + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Rimuovi disegno +pdfjs-editor-remove-freetext-button = + .title = Rimuovi testo +pdfjs-editor-remove-stamp-button = + .title = Rimuovi immagine +pdfjs-editor-remove-highlight-button = + .title = Rimuovi evidenziazione + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Colore +pdfjs-editor-free-text-size-input = Dimensione +pdfjs-editor-ink-color-input = Colore +pdfjs-editor-ink-thickness-input = Spessore +pdfjs-editor-ink-opacity-input = Opacità +pdfjs-editor-stamp-add-image-button = + .title = Aggiungi immagine +pdfjs-editor-stamp-add-image-button-label = Aggiungi immagine +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Spessore +pdfjs-editor-free-highlight-thickness-title = + .title = Modifica lo spessore della selezione per elementi non testuali + +pdfjs-free-text = + .aria-label = Editor di testo +pdfjs-free-text-default-content = Inizia a digitare… +pdfjs-ink = + .aria-label = Editor disegni +pdfjs-ink-canvas = + .aria-label = Immagine creata dall’utente + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Testo alternativo +pdfjs-editor-alt-text-edit-button-label = Modifica testo alternativo +pdfjs-editor-alt-text-dialog-label = Scegli un’opzione +pdfjs-editor-alt-text-dialog-description = Il testo alternativo (“alt text”) aiuta quando le persone non possono vedere l’immagine o quando l’immagine non viene caricata. +pdfjs-editor-alt-text-add-description-label = Aggiungi una descrizione +pdfjs-editor-alt-text-add-description-description = Punta a una o due frasi che descrivono l’argomento, l’ambientazione o le azioni. +pdfjs-editor-alt-text-mark-decorative-label = Contrassegna come decorativa +pdfjs-editor-alt-text-mark-decorative-description = Viene utilizzato per immagini ornamentali, come bordi o filigrane. +pdfjs-editor-alt-text-cancel-button = Annulla +pdfjs-editor-alt-text-save-button = Salva +pdfjs-editor-alt-text-decorative-tooltip = Contrassegnata come decorativa +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Ad esempio, “Un giovane si siede a tavola per mangiare” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Angolo in alto a sinistra — ridimensiona +pdfjs-editor-resizer-label-top-middle = Lato superiore nel mezzo — ridimensiona +pdfjs-editor-resizer-label-top-right = Angolo in alto a destra — ridimensiona +pdfjs-editor-resizer-label-middle-right = Lato destro nel mezzo — ridimensiona +pdfjs-editor-resizer-label-bottom-right = Angolo in basso a destra — ridimensiona +pdfjs-editor-resizer-label-bottom-middle = Lato inferiore nel mezzo — ridimensiona +pdfjs-editor-resizer-label-bottom-left = Angolo in basso a sinistra — ridimensiona +pdfjs-editor-resizer-label-middle-left = Lato sinistro nel mezzo — ridimensiona + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Colore evidenziatore + +pdfjs-editor-colorpicker-button = + .title = Cambia colore +pdfjs-editor-colorpicker-dropdown = + .aria-label = Colori disponibili +pdfjs-editor-colorpicker-yellow = + .title = Giallo +pdfjs-editor-colorpicker-green = + .title = Verde +pdfjs-editor-colorpicker-blue = + .title = Blu +pdfjs-editor-colorpicker-pink = + .title = Rosa +pdfjs-editor-colorpicker-red = + .title = Rosso + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Mostra tutto +pdfjs-editor-highlight-show-all-button = + .title = Mostra tutto diff --git a/static/pdf.js/locale/it/viewer.properties b/static/pdf.js/locale/it/viewer.properties deleted file mode 100644 index 99064248..00000000 --- a/static/pdf.js/locale/it/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Pagina precedente -previous_label=Precedente -next.title=Pagina successiva -next_label=Successiva - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Pagina -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=di {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} di {{pagesCount}}) - -zoom_out.title=Riduci zoom -zoom_out_label=Riduci zoom -zoom_in.title=Aumenta zoom -zoom_in_label=Aumenta zoom -zoom.title=Zoom -presentation_mode.title=Passa alla modalità presentazione -presentation_mode_label=Modalità presentazione -open_file.title=Apri file -open_file_label=Apri -print.title=Stampa -print_label=Stampa -save.title=Salva -save_label=Salva -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Scarica -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Scarica -bookmark1.title=Pagina corrente (mostra URL della pagina corrente) -bookmark1_label=Pagina corrente -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Apri in app -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Apri in app - -# Secondary toolbar and context menu -tools.title=Strumenti -tools_label=Strumenti -first_page.title=Vai alla prima pagina -first_page_label=Vai alla prima pagina -last_page.title=Vai all’ultima pagina -last_page_label=Vai all’ultima pagina -page_rotate_cw.title=Ruota in senso orario -page_rotate_cw_label=Ruota in senso orario -page_rotate_ccw.title=Ruota in senso antiorario -page_rotate_ccw_label=Ruota in senso antiorario - -cursor_text_select_tool.title=Attiva strumento di selezione testo -cursor_text_select_tool_label=Strumento di selezione testo -cursor_hand_tool.title=Attiva strumento mano -cursor_hand_tool_label=Strumento mano - -scroll_page.title=Utilizza scorrimento pagine -scroll_page_label=Scorrimento pagine -scroll_vertical.title=Scorri le pagine in verticale -scroll_vertical_label=Scorrimento verticale -scroll_horizontal.title=Scorri le pagine in orizzontale -scroll_horizontal_label=Scorrimento orizzontale -scroll_wrapped.title=Scorri le pagine in verticale, disponendole da sinistra a destra e andando a capo automaticamente -scroll_wrapped_label=Scorrimento con a capo automatico - -spread_none.title=Non raggruppare pagine -spread_none_label=Nessun raggruppamento -spread_odd.title=Crea gruppi di pagine che iniziano con numeri di pagina dispari -spread_odd_label=Raggruppamento dispari -spread_even.title=Crea gruppi di pagine che iniziano con numeri di pagina pari -spread_even_label=Raggruppamento pari - -# Document properties dialog box -document_properties.title=Proprietà del documento… -document_properties_label=Proprietà del documento… -document_properties_file_name=Nome file: -document_properties_file_size=Dimensione file: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} kB ({{size_b}} byte) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} byte) -document_properties_title=Titolo: -document_properties_author=Autore: -document_properties_subject=Oggetto: -document_properties_keywords=Parole chiave: -document_properties_creation_date=Data creazione: -document_properties_modification_date=Data modifica: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Autore originale: -document_properties_producer=Produttore PDF: -document_properties_version=Versione PDF: -document_properties_page_count=Conteggio pagine: -document_properties_page_size=Dimensioni pagina: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=verticale -document_properties_page_size_orientation_landscape=orizzontale -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Lettera -document_properties_page_size_name_legal=Legale -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Visualizzazione web veloce: -document_properties_linearized_yes=Sì -document_properties_linearized_no=No -document_properties_close=Chiudi - -print_progress_message=Preparazione documento per la stampa… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Annulla - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Attiva/disattiva barra laterale -toggle_sidebar_notification2.title=Attiva/disattiva barra laterale (il documento contiene struttura/allegati/livelli) -toggle_sidebar_label=Attiva/disattiva barra laterale -document_outline.title=Visualizza la struttura del documento (doppio clic per visualizzare/comprimere tutti gli elementi) -document_outline_label=Struttura documento -attachments.title=Visualizza allegati -attachments_label=Allegati -layers.title=Visualizza livelli (doppio clic per ripristinare tutti i livelli allo stato predefinito) -layers_label=Livelli -thumbs.title=Mostra le miniature -thumbs_label=Miniature -current_outline_item.title=Trova elemento struttura corrente -current_outline_item_label=Elemento struttura corrente -findbar.title=Trova nel documento -findbar_label=Trova - -additional_layers=Livelli aggiuntivi -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Pagina {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Pagina {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura della pagina {{page}} - -# Find panel button title and messages -find_input.title=Trova -find_input.placeholder=Trova nel documento… -find_previous.title=Trova l’occorrenza precedente del testo da cercare -find_previous_label=Precedente -find_next.title=Trova l’occorrenza successiva del testo da cercare -find_next_label=Successivo -find_highlight=Evidenzia -find_match_case_label=Maiuscole/minuscole -find_match_diacritics_label=Segni diacritici -find_entire_word_label=Parole intere -find_reached_top=Raggiunto l’inizio della pagina, continua dalla fine -find_reached_bottom=Raggiunta la fine della pagina, continua dall’inizio -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} di {{total}} corrispondenza -find_match_count[two]={{current}} di {{total}} corrispondenze -find_match_count[few]={{current}} di {{total}} corrispondenze -find_match_count[many]={{current}} di {{total}} corrispondenze -find_match_count[other]={{current}} di {{total}} corrispondenze -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Più di {{limit}} corrispondenze -find_match_count_limit[one]=Più di {{limit}} corrispondenza -find_match_count_limit[two]=Più di {{limit}} corrispondenze -find_match_count_limit[few]=Più di {{limit}} corrispondenze -find_match_count_limit[many]=Più di {{limit}} corrispondenze -find_match_count_limit[other]=Più di {{limit}} corrispondenze -find_not_found=Testo non trovato - -# Predefined zoom values -page_scale_width=Larghezza pagina -page_scale_fit=Adatta a una pagina -page_scale_auto=Zoom automatico -page_scale_actual=Dimensioni effettive -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Si è verificato un errore durante il caricamento del PDF. -invalid_file_error=File PDF non valido o danneggiato. -missing_file_error=File PDF non disponibile. -unexpected_response_error=Risposta imprevista del server -rendering_error=Si è verificato un errore durante il rendering della pagina. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Annotazione: {{type}}] -password_label=Inserire la password per aprire questo file PDF. -password_invalid=Password non corretta. Riprovare. -password_ok=OK -password_cancel=Annulla - -printing_not_supported=Attenzione: la stampa non è completamente supportata da questo browser. -printing_not_ready=Attenzione: il PDF non è ancora stato caricato completamente per la stampa. -web_fonts_disabled=I web font risultano disattivati: impossibile utilizzare i caratteri incorporati nel PDF. - -# Editor -editor_free_text2.title=Testo -editor_free_text2_label=Testo -editor_ink2.title=Disegno -editor_ink2_label=Disegno - -editor_stamp1.title=Aggiungi o rimuovi immagine -editor_stamp1_label=Aggiungi o rimuovi immagine - -free_text2_default_content=Inizia a digitare… - -# Editor Parameters -editor_free_text_color=Colore -editor_free_text_size=Dimensione -editor_ink_color=Colore -editor_ink_thickness=Spessore -editor_ink_opacity=Opacità - -editor_stamp_add_image_label=Aggiungi immagine -editor_stamp_add_image.title=Aggiungi immagine - -# Editor aria -editor_free_text2_aria_label=Editor di testo -editor_ink2_aria_label=Editor disegni -editor_ink_canvas_aria_label=Immagine creata dall’utente - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Testo alternativo -editor_alt_text_edit_button_label=Modifica testo alternativo -editor_alt_text_dialog_label=Scegli un’opzione -editor_alt_text_dialog_description=Il testo alternativo (“alt text”) aiuta quando le persone non possono vedere l’immagine o quando l’immagine non viene caricata. -editor_alt_text_add_description_label=Aggiungi una descrizione -editor_alt_text_add_description_description=Punta a una o due frasi che descrivono l’argomento, l’ambientazione o le azioni. -editor_alt_text_mark_decorative_label=Contrassegna come decorativa -editor_alt_text_mark_decorative_description=Viene utilizzato per immagini ornamentali, come bordi o filigrane. -editor_alt_text_cancel_button=Annulla -editor_alt_text_save_button=Salva -editor_alt_text_decorative_tooltip=Contrassegnata come decorativa -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=Ad esempio, “Un giovane si siede a tavola per mangiare” diff --git a/static/pdf.js/locale/ja/viewer.ftl b/static/pdf.js/locale/ja/viewer.ftl new file mode 100644 index 00000000..2246cfd4 --- /dev/null +++ b/static/pdf.js/locale/ja/viewer.ftl @@ -0,0 +1,396 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = プレゼンテーションモードに切り替えます +pdfjs-presentation-mode-button-label = プレゼンテーションモード +pdfjs-open-file-button = + .title = ファイルを開きます +pdfjs-open-file-button-label = 開く +pdfjs-print-button = + .title = 印刷します +pdfjs-print-button-label = 印刷 +pdfjs-save-button = + .title = 保存します +pdfjs-save-button-label = 保存 +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = ダウンロードします +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = ダウンロード +pdfjs-bookmark-button = + .title = 現在のページの URL です (現在のページを表示する URL) +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 = 折り返しスクロール +pdfjs-spread-none-button = + .title = 見開きにしません +pdfjs-spread-none-button-label = 見開きにしない +pdfjs-spread-odd-button = + .title = 奇数ページ開始で見開きにします +pdfjs-spread-odd-button-label = 奇数ページ見開き +pdfjs-spread-even-button = + .title = 偶数ページ開始で見開きにします +pdfjs-spread-even-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 = ファイルサイズ: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } バイト) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } バイト) +pdfjs-document-properties-title = タイトル: +pdfjs-document-properties-author = 作成者: +pdfjs-document-properties-subject = 件名: +pdfjs-document-properties-keywords = キーワード: +pdfjs-document-properties-creation-date = 作成日: +pdfjs-document-properties-modification-date = 更新日: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = 縦 +pdfjs-document-properties-page-size-orientation-landscape = 横 +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = レター +pdfjs-document-properties-page-size-name-legal = リーガル + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = ウェブ表示用に最適化: +pdfjs-document-properties-linearized-yes = はい +pdfjs-document-properties-linearized-no = いいえ +pdfjs-document-properties-close-button = 閉じる + +## Print + +pdfjs-print-progress-message = 文書の印刷を準備しています... +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = キャンセル +pdfjs-printing-not-supported = 警告: このブラウザーでは印刷が完全にサポートされていません。 +pdfjs-printing-not-ready = 警告: PDF を印刷するための読み込みが終了していません。 + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = サイドバー表示を切り替えます +pdfjs-toggle-sidebar-notification-button = + .title = サイドバー表示を切り替えます (文書に含まれるアウトライン / 添付 / レイヤー) +pdfjs-toggle-sidebar-button-label = サイドバーの切り替え +pdfjs-document-outline-button = + .title = 文書の目次を表示します (ダブルクリックで項目を開閉します) +pdfjs-document-outline-button-label = 文書の目次 +pdfjs-attachments-button = + .title = 添付ファイルを表示します +pdfjs-attachments-button-label = 添付ファイル +pdfjs-layers-button = + .title = レイヤーを表示します (ダブルクリックですべてのレイヤーが初期状態に戻ります) +pdfjs-layers-button-label = レイヤー +pdfjs-thumbs-button = + .title = 縮小版を表示します +pdfjs-thumbs-button-label = 縮小版 +pdfjs-current-outline-item-button = + .title = 現在のアウトライン項目を検索 +pdfjs-current-outline-item-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 } ページ +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = { $page } ページの縮小版 + +## Find panel button title and messages + +pdfjs-find-input = + .title = 検索 + .placeholder = 文書内を検索... +pdfjs-find-previous-button = + .title = 現在より前の位置で指定文字列が現れる部分を検索します +pdfjs-find-previous-button-label = 前へ +pdfjs-find-next-button = + .title = 現在より後の位置で指定文字列が現れる部分を検索します +pdfjs-find-next-button-label = 次へ +pdfjs-find-highlight-checkbox = すべて強調表示 +pdfjs-find-match-case-checkbox-label = 大文字/小文字を区別 +pdfjs-find-match-diacritics-checkbox-label = 発音区別符号を区別 +pdfjs-find-entire-word-checkbox-label = 単語一致 +pdfjs-find-reached-top = 文書先頭に到達したので末尾から続けて検索します +pdfjs-find-reached-bottom = 文書末尾に到達したので先頭から続けて検索します +# 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] { $total } 件中 { $current } 件目 + *[other] { $total } 件中 { $current } 件目 + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] { $limit } 件以上一致 + *[other] { $limit } 件以上一致 + } +pdfjs-find-not-found = 見つかりませんでした + +## 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 } ページ + +## Loading indicator messages + +pdfjs-loading-error = PDF の読み込み中にエラーが発生しました。 +pdfjs-invalid-file-error = 無効または破損した PDF ファイル。 +pdfjs-missing-file-error = PDF ファイルが見つかりません。 +pdfjs-unexpected-response-error = サーバーから予期せぬ応答がありました。 +pdfjs-rendering-error = ページのレンダリング中にエラーが発生しました。 + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } 注釈] + +## Password + +pdfjs-password-label = この PDF ファイルを開くためのパスワードを入力してください。 +pdfjs-password-invalid = 無効なパスワードです。もう一度やり直してください。 +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = キャンセル +pdfjs-web-fonts-disabled = ウェブフォントが無効になっています: 埋め込まれた PDF のフォントを使用できません。 + +## Editing + +pdfjs-editor-free-text-button = + .title = フリーテキスト注釈を追加します +pdfjs-editor-free-text-button-label = フリーテキスト注釈 +pdfjs-editor-ink-button = + .title = インク注釈を追加します +pdfjs-editor-ink-button-label = インク注釈 +pdfjs-editor-stamp-button = + .title = 画像を追加または編集します +pdfjs-editor-stamp-button-label = 画像を追加または編集 +pdfjs-editor-highlight-button = + .title = 強調します +pdfjs-editor-highlight-button-label = 強調 +pdfjs-highlight-floating-button = + .title = 強調 +pdfjs-highlight-floating-button1 = + .title = 強調 + .aria-label = 強調します +pdfjs-highlight-floating-button-label = 強調 + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = インク注釈を削除します +pdfjs-editor-remove-freetext-button = + .title = テキストを削除します +pdfjs-editor-remove-stamp-button = + .title = 画像を削除します +pdfjs-editor-remove-highlight-button = + .title = 強調を削除します + +## + +# 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 = 不透明度 +pdfjs-editor-stamp-add-image-button = + .title = 画像を追加します +pdfjs-editor-stamp-add-image-button-label = 画像を追加 +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = 太さ +pdfjs-editor-free-highlight-thickness-title = + .title = テキスト以外のアイテムを強調する時の太さを変更します +pdfjs-free-text = + .aria-label = フリーテキスト注釈エディター +pdfjs-free-text-default-content = テキストを入力してください... +pdfjs-ink = + .aria-label = インク注釈エディター +pdfjs-ink-canvas = + .aria-label = ユーザー作成画像 + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = 代替テキスト +pdfjs-editor-alt-text-edit-button-label = 代替テキストを編集 +pdfjs-editor-alt-text-dialog-label = オプションの選択 +pdfjs-editor-alt-text-dialog-description = 代替テキストは画像が表示されない場合や読み込まれない場合にユーザーの助けになります。 +pdfjs-editor-alt-text-add-description-label = 説明を追加 +pdfjs-editor-alt-text-add-description-description = 対象や設定、動作を説明する短い文章を記入してください。 +pdfjs-editor-alt-text-mark-decorative-label = 装飾マークを付ける +pdfjs-editor-alt-text-mark-decorative-description = これは区切り線やウォーターマークなどの装飾画像に使用されます。 +pdfjs-editor-alt-text-cancel-button = キャンセル +pdfjs-editor-alt-text-save-button = 保存 +pdfjs-editor-alt-text-decorative-tooltip = 装飾マークが付いています +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = 例:「若い人がテーブルの席について食事をしています」 + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = 左上隅 — サイズ変更 +pdfjs-editor-resizer-label-top-middle = 上中央 — サイズ変更 +pdfjs-editor-resizer-label-top-right = 右上隅 — サイズ変更 +pdfjs-editor-resizer-label-middle-right = 右中央 — サイズ変更 +pdfjs-editor-resizer-label-bottom-right = 右下隅 — サイズ変更 +pdfjs-editor-resizer-label-bottom-middle = 下中央 — サイズ変更 +pdfjs-editor-resizer-label-bottom-left = 左下隅 — サイズ変更 +pdfjs-editor-resizer-label-middle-left = 左中央 — サイズ変更 + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = 強調色 +pdfjs-editor-colorpicker-button = + .title = 色を変更します +pdfjs-editor-colorpicker-dropdown = + .aria-label = 色の選択 +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 = 強調の表示を切り替えます diff --git a/static/pdf.js/locale/ja/viewer.properties b/static/pdf.js/locale/ja/viewer.properties deleted file mode 100644 index 797e6e6e..00000000 --- a/static/pdf.js/locale/ja/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=前のページへ戻ります -previous_label=前へ -next.title=次のページへ進みます -next_label=次へ - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=ページ -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=/ {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} / {{pagesCount}}) - -zoom_out.title=表示を縮小します -zoom_out_label=縮小 -zoom_in.title=表示を拡大します -zoom_in_label=拡大 -zoom.title=拡大/縮小 -presentation_mode.title=プレゼンテーションモードに切り替えます -presentation_mode_label=プレゼンテーションモード -open_file.title=ファイルを開きます -open_file_label=開く -print.title=印刷します -print_label=印刷 -save.title=保存します -save_label=保存 -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=ダウンロードします -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=ダウンロード -bookmark1.title=現在のページの URL です (現在のページを表示する URL) -bookmark1_label=現在のページ -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=アプリで開く -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=アプリで開く - -# Secondary toolbar and context menu -tools.title=ツール -tools_label=ツール -first_page.title=最初のページへ移動します -first_page_label=最初のページへ移動 -last_page.title=最後のページへ移動します -last_page_label=最後のページへ移動 -page_rotate_cw.title=ページを右へ回転します -page_rotate_cw_label=右回転 -page_rotate_ccw.title=ページを左へ回転します -page_rotate_ccw_label=左回転 - -cursor_text_select_tool.title=テキスト選択ツールを有効にします -cursor_text_select_tool_label=テキスト選択ツール -cursor_hand_tool.title=手のひらツールを有効にします -cursor_hand_tool_label=手のひらツール - -scroll_page.title=ページ単位でスクロールします -scroll_page_label=ページ単位でスクロール -scroll_vertical.title=縦スクロールにします -scroll_vertical_label=縦スクロール -scroll_horizontal.title=横スクロールにします -scroll_horizontal_label=横スクロール -scroll_wrapped.title=折り返しスクロールにします -scroll_wrapped_label=折り返しスクロール - -spread_none.title=見開きにしません -spread_none_label=見開きにしない -spread_odd.title=奇数ページ開始で見開きにします -spread_odd_label=奇数ページ見開き -spread_even.title=偶数ページ開始で見開きにします -spread_even_label=偶数ページ見開き - -# Document properties dialog box -document_properties.title=文書のプロパティ... -document_properties_label=文書のプロパティ... -document_properties_file_name=ファイル名: -document_properties_file_size=ファイルサイズ: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} バイト) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} バイト) -document_properties_title=タイトル: -document_properties_author=作成者: -document_properties_subject=件名: -document_properties_keywords=キーワード: -document_properties_creation_date=作成日: -document_properties_modification_date=更新日: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=アプリケーション: -document_properties_producer=PDF 作成: -document_properties_version=PDF のバージョン: -document_properties_page_count=ページ数: -document_properties_page_size=ページサイズ: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=縦 -document_properties_page_size_orientation_landscape=横 -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=レター -document_properties_page_size_name_legal=リーガル -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=ウェブ表示用に最適化: -document_properties_linearized_yes=はい -document_properties_linearized_no=いいえ -document_properties_close=閉じる - -print_progress_message=文書の印刷を準備しています... -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=キャンセル - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=サイドバー表示を切り替えます -toggle_sidebar_notification2.title=サイドバー表示を切り替えます (文書に含まれるアウトライン / 添付 / レイヤー) -toggle_sidebar_label=サイドバーの切り替え -document_outline.title=文書の目次を表示します (ダブルクリックで項目を開閉します) -document_outline_label=文書の目次 -attachments.title=添付ファイルを表示します -attachments_label=添付ファイル -layers.title=レイヤーを表示します (ダブルクリックですべてのレイヤーが初期状態に戻ります) -layers_label=レイヤー -thumbs.title=縮小版を表示します -thumbs_label=縮小版 -current_outline_item.title=現在のアウトライン項目を検索 -current_outline_item_label=現在のアウトライン項目 -findbar.title=文書内を検索します -findbar_label=検索 - -additional_layers=追加レイヤー -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark={{page}} ページ -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title={{page}} ページ -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas={{page}} ページの縮小版 - -# Find panel button title and messages -find_input.title=検索 -find_input.placeholder=文書内を検索... -find_previous.title=現在より前の位置で指定文字列が現れる部分を検索します -find_previous_label=前へ -find_next.title=現在より後の位置で指定文字列が現れる部分を検索します -find_next_label=次へ -find_highlight=すべて強調表示 -find_match_case_label=大文字/小文字を区別 -find_match_diacritics_label=発音区別符号を区別 -find_entire_word_label=単語一致 -find_reached_top=文書先頭に到達したので末尾から続けて検索します -find_reached_bottom=文書末尾に到達したので先頭から続けて検索します -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{total}} 件中 {{current}} 件目 -find_match_count[two]={{total}} 件中 {{current}} 件目 -find_match_count[few]={{total}} 件中 {{current}} 件目 -find_match_count[many]={{total}} 件中 {{current}} 件目 -find_match_count[other]={{total}} 件中 {{current}} 件目 -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]={{limit}} 件以上一致 -find_match_count_limit[one]={{limit}} 件以上一致 -find_match_count_limit[two]={{limit}} 件以上一致 -find_match_count_limit[few]={{limit}} 件以上一致 -find_match_count_limit[many]={{limit}} 件以上一致 -find_match_count_limit[other]={{limit}} 件以上一致 -find_not_found=見つかりませんでした - -# Predefined zoom values -page_scale_width=幅に合わせる -page_scale_fit=ページのサイズに合わせる -page_scale_auto=自動ズーム -page_scale_actual=実際のサイズ -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=PDF の読み込み中にエラーが発生しました。 -invalid_file_error=無効または破損した PDF ファイル。 -missing_file_error=PDF ファイルが見つかりません。 -unexpected_response_error=サーバーから予期せぬ応答がありました。 -rendering_error=ページのレンダリング中にエラーが発生しました。 - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} 注釈] -password_label=この PDF ファイルを開くためのパスワードを入力してください。 -password_invalid=無効なパスワードです。もう一度やり直してください。 -password_ok=OK -password_cancel=キャンセル - -printing_not_supported=警告: このブラウザーでは印刷が完全にサポートされていません。 -printing_not_ready=警告: PDF を印刷するための読み込みが終了していません。 -web_fonts_disabled=ウェブフォントが無効になっています: 埋め込まれた PDF のフォントを使用できません。 - -# Editor -editor_free_text2.title=フリーテキスト注釈 -editor_free_text2_label=フリーテキスト注釈 -editor_ink2.title=インク注釈 -editor_ink2_label=インク注釈 - -editor_stamp.title=画像を追加します -editor_stamp_label=画像を追加 - -editor_stamp1.title=画像を追加または編集します -editor_stamp1_label=画像を追加または編集 - -free_text2_default_content=テキストを入力してください... - -# Editor Parameters -editor_free_text_color=色 -editor_free_text_size=サイズ -editor_ink_color=色 -editor_ink_thickness=太さ -editor_ink_opacity=不透明度 - -editor_stamp_add_image_label=画像を追加 -editor_stamp_add_image.title=画像を追加します - -# Editor aria -editor_free_text2_aria_label=フリーテキスト注釈エディター -editor_ink2_aria_label=インク注釈エディター -editor_ink_canvas_aria_label=ユーザー作成画像 diff --git a/static/pdf.js/locale/ka/viewer.ftl b/static/pdf.js/locale/ka/viewer.ftl new file mode 100644 index 00000000..f31898fa --- /dev/null +++ b/static/pdf.js/locale/ka/viewer.ftl @@ -0,0 +1,387 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = ჩვენების რეჟიმზე გადართვა +pdfjs-presentation-mode-button-label = ჩვენების რეჟიმი +pdfjs-open-file-button = + .title = ფაილის გახსნა +pdfjs-open-file-button-label = გახსნა +pdfjs-print-button = + .title = ამობეჭდვა +pdfjs-print-button-label = ამობეჭდვა +pdfjs-save-button = + .title = შენახვა +pdfjs-save-button-label = შენახვა +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = ჩამოტვირთვა +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = ჩამოტვირთვა +pdfjs-bookmark-button = + .title = მიმდინარე გვერდი (ბმული ამ გვერდისთვის) +pdfjs-bookmark-button-label = მიმდინარე გვერდი +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = გახსნა პროგრამით +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-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 = ცხრილური გადაადგილება +pdfjs-spread-none-button = + .title = ორ გვერდზე გაშლის გარეშე +pdfjs-spread-none-button-label = ცალგვერდიანი ჩვენება +pdfjs-spread-odd-button = + .title = ორ გვერდზე გაშლა კენტი გვერდიდან +pdfjs-spread-odd-button-label = ორ გვერდზე კენტიდან +pdfjs-spread-even-button = + .title = ორ გვერდზე გაშლა ლუწი გვერდიდან +pdfjs-spread-even-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 = ფაილის მოცულობა: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } კბ ({ $size_b } ბაიტი) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } მბ ({ $size_b } ბაიტი) +pdfjs-document-properties-title = სათაური: +pdfjs-document-properties-author = შემქმნელი: +pdfjs-document-properties-subject = თემა: +pdfjs-document-properties-keywords = საკვანძო სიტყვები: +pdfjs-document-properties-creation-date = შექმნის დრო: +pdfjs-document-properties-modification-date = ჩასწორების დრო: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = შვეულად +pdfjs-document-properties-page-size-orientation-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 = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = მსუბუქი ვებჩვენება: +pdfjs-document-properties-linearized-yes = დიახ +pdfjs-document-properties-linearized-no = არა +pdfjs-document-properties-close-button = დახურვა + +## Print + +pdfjs-print-progress-message = დოკუმენტი მზადდება ამოსაბეჭდად… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = გაუქმება +pdfjs-printing-not-supported = გაფრთხილება: ამობეჭდვა ამ ბრაუზერში არაა სრულად მხარდაჭერილი. +pdfjs-printing-not-ready = გაფრთხილება: PDF სრულად ჩატვირთული არაა, ამობეჭდვის დასაწყებად. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = გვერდითა ზოლის გამოჩენა/დამალვა +pdfjs-toggle-sidebar-notification-button = + .title = გვერდითი ზოლის გამოჩენა (შეიცავს სარჩევს/დანართს/ფენებს) +pdfjs-toggle-sidebar-button-label = გვერდითა ზოლის გამოჩენა/დამალვა +pdfjs-document-outline-button = + .title = დოკუმენტის სარჩევის ჩვენება (ორმაგი წკაპით თითოეულის ჩამოშლა/აკეცვა) +pdfjs-document-outline-button-label = დოკუმენტის სარჩევი +pdfjs-attachments-button = + .title = დანართების ჩვენება +pdfjs-attachments-button-label = დანართები +pdfjs-layers-button = + .title = ფენების გამოჩენა (ორმაგი წკაპით ყველა ფენის ნაგულისხმევზე დაბრუნება) +pdfjs-layers-button-label = ფენები +pdfjs-thumbs-button = + .title = შეთვალიერება +pdfjs-thumbs-button-label = ესკიზები +pdfjs-current-outline-item-button = + .title = მიმდინარე გვერდის მონახვა სარჩევში +pdfjs-current-outline-item-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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = გვერდის შეთვალიერება { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = ძიება + .placeholder = პოვნა დოკუმენტში… +pdfjs-find-previous-button = + .title = ფრაზის წინა კონტექსტის პოვნა +pdfjs-find-previous-button-label = წინა +pdfjs-find-next-button = + .title = ფრაზის შემდეგი კონტექსტის პოვნა +pdfjs-find-next-button-label = შემდეგი +pdfjs-find-highlight-checkbox = ყველაფრის მონიშვნა +pdfjs-find-match-case-checkbox-label = მთავრულით +pdfjs-find-match-diacritics-checkbox-label = ნიშნებით +pdfjs-find-entire-word-checkbox-label = მთლიანი სიტყვები +pdfjs-find-reached-top = მიღწეულია დოკუმენტის დასაწყისი, გრძელდება ბოლოდან +pdfjs-find-reached-bottom = მიღწეულია დოკუმენტის ბოლო, გრძელდება დასაწყისიდან +# 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 }, სულ { $total } + *[other] თანხვედრა { $current }, სულ { $total } + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] არანაკლებ { $limit } თანხვედრა + *[other] არანაკლებ { $limit } თანხვედრა + } +pdfjs-find-not-found = ფრაზა ვერ მოიძებნა + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = შეცდომა, PDF-ფაილის ჩატვირთვისას. +pdfjs-invalid-file-error = არამართებული ან დაზიანებული PDF-ფაილი. +pdfjs-missing-file-error = ნაკლული PDF-ფაილი. +pdfjs-unexpected-response-error = სერვერის მოულოდნელი პასუხი. +pdfjs-rendering-error = შეცდომა, გვერდის ჩვენებისას. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } შენიშვნა] + +## Password + +pdfjs-password-label = შეიყვანეთ პაროლი PDF-ფაილის გასახსნელად. +pdfjs-password-invalid = არასწორი პაროლი. გთხოვთ, სცადოთ ხელახლა. +pdfjs-password-ok-button = კარგი +pdfjs-password-cancel-button = გაუქმება +pdfjs-web-fonts-disabled = ვებშრიფტები გამორთულია: ჩაშენებული PDF-შრიფტების გამოყენება ვერ ხერხდება. + +## Editing + +pdfjs-editor-free-text-button = + .title = წარწერა +pdfjs-editor-free-text-button-label = ტექსტი +pdfjs-editor-ink-button = + .title = ხაზვა +pdfjs-editor-ink-button-label = ხაზვა +pdfjs-editor-stamp-button = + .title = სურათების დართვა ან ჩასწორება +pdfjs-editor-stamp-button-label = სურათების დართვა ან ჩასწორება +pdfjs-editor-remove-button = + .title = მოცილება +pdfjs-editor-highlight-button = + .title = მონიშვნა +pdfjs-editor-highlight-button-label = მონიშვნა + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = დახაზულის მოცილება +pdfjs-editor-remove-freetext-button = + .title = წარწერის მოცილება +pdfjs-editor-remove-stamp-button = + .title = სურათის მოცილება +pdfjs-editor-remove-highlight-button = + .title = მონიშვნის მოცილება + +## + +# 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 = გაუმჭვირვალობა +pdfjs-editor-stamp-add-image-button = + .title = სურათის დამატება +pdfjs-editor-stamp-add-image-button-label = სურათის დამატება +pdfjs-free-text = + .aria-label = ნაწერის ჩასწორება +pdfjs-free-text-default-content = აკრიფეთ… +pdfjs-ink = + .aria-label = დახაზულის შესწორება +pdfjs-ink-canvas = + .aria-label = მომხმარებლის შექმნილი სურათი + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = თანდართული წარწერა +pdfjs-editor-alt-text-edit-button-label = თანდართული წარწერის ჩასწორება +pdfjs-editor-alt-text-dialog-label = არჩევა +pdfjs-editor-alt-text-dialog-description = თანდართული (შემნაცვლებელი) წარწერა გამოსადეგია მათთვის, ვინც ვერ ხედავს სურათებს ან გამოისახება მაშინ, როცა სურათი ვერ ჩაიტვირთება. +pdfjs-editor-alt-text-add-description-label = აღწერილობის მითითება +pdfjs-editor-alt-text-add-description-description = განკუთვნილია 1-2 წინადადებით საგნის, მახასიათებლის ან მოქმედების აღსაწერად. +pdfjs-editor-alt-text-mark-decorative-label = მოინიშნოს მორთულობად +pdfjs-editor-alt-text-mark-decorative-description = განკუთვნილია შესამკობი სურათებისთვის, გარსშემოსავლები ჩარჩოებისა და ჭვირნიშნებისთვის. +pdfjs-editor-alt-text-cancel-button = გაუქმება +pdfjs-editor-alt-text-save-button = შენახვა +pdfjs-editor-alt-text-decorative-tooltip = მოინიშნოს მორთულობად +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = მაგალითად, „ახალგაზრდა მამაკაცი მაგიდასთან ზის და სადილობს“ + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = ზევით მარცხნივ — ზომაცვლა +pdfjs-editor-resizer-label-top-middle = ზევით შუაში — ზომაცვლა +pdfjs-editor-resizer-label-top-right = ზევით მარჯვნივ — ზომაცვლა +pdfjs-editor-resizer-label-middle-right = შუაში მარჯვნივ — ზომაცვლა +pdfjs-editor-resizer-label-bottom-right = ქვევით მარჯვნივ — ზომაცვლა +pdfjs-editor-resizer-label-bottom-middle = ქვევით შუაში — ზომაცვლა +pdfjs-editor-resizer-label-bottom-left = ზვევით მარცხნივ — ზომაცვლა +pdfjs-editor-resizer-label-middle-left = შუაში მარცხნივ — ზომაცვლა + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = მოსანიშნი ფერი +pdfjs-editor-colorpicker-button = + .title = ფერის შეცვლა +pdfjs-editor-colorpicker-dropdown = + .aria-label = ფერის არჩევა +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 = წითელი diff --git a/static/pdf.js/locale/ka/viewer.properties b/static/pdf.js/locale/ka/viewer.properties deleted file mode 100644 index 9ea7a963..00000000 --- a/static/pdf.js/locale/ka/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=წინა გვერდი -previous_label=წინა -next.title=შემდეგი გვერდი -next_label=შემდეგი - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=გვერდი -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages={{pagesCount}}-დან -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} {{pagesCount}}-დან) - -zoom_out.title=ზომის შემცირება -zoom_out_label=დაშორება -zoom_in.title=ზომის გაზრდა -zoom_in_label=მოახლოება -zoom.title=ზომა -presentation_mode.title=ჩვენების რეჟიმზე გადართვა -presentation_mode_label=ჩვენების რეჟიმი -open_file.title=ფაილის გახსნა -open_file_label=გახსნა -print.title=ამობეჭდვა -print_label=ამობეჭდვა -save.title=შენახვა -save_label=შენახვა -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=ჩამოტვირთვა -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=ჩამოტვირთვა -bookmark1.title=მიმდინარე გვერდი (ბმული ამ გვერდისთვის) -bookmark1_label=მიმდინარე გვერდი -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=გახსნა პროგრამით -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=გახსნა პროგრამით - -# Secondary toolbar and context menu -tools.title=ხელსაწყოები -tools_label=ხელსაწყოები -first_page.title=პირველ გვერდზე გადასვლა -first_page_label=პირველ გვერდზე გადასვლა -last_page.title=ბოლო გვერდზე გადასვლა -last_page_label=ბოლო გვერდზე გადასვლა -page_rotate_cw.title=საათის ისრის მიმართულებით შებრუნება -page_rotate_cw_label=მარჯვნივ გადაბრუნება -page_rotate_ccw.title=საათის ისრის საპირისპიროდ შებრუნება -page_rotate_ccw_label=მარცხნივ გადაბრუნება - -cursor_text_select_tool.title=მოსანიშნი მაჩვენებლის გამოყენება -cursor_text_select_tool_label=მოსანიშნი მაჩვენებელი -cursor_hand_tool.title=გადასაადგილებელი მაჩვენებლის გამოყენება -cursor_hand_tool_label=გადასაადგილებელი - -scroll_page.title=გვერდზე გადაადგილების გამოყენება -scroll_page_label=გვერდზე გადაადგილება -scroll_vertical.title=გვერდების შვეულად ჩვენება -scroll_vertical_label=შვეული გადაადგილება -scroll_horizontal.title=გვერდების თარაზულად ჩვენება -scroll_horizontal_label=განივი გადაადგილება -scroll_wrapped.title=გვერდების ცხრილურად ჩვენება -scroll_wrapped_label=ცხრილური გადაადგილება - -spread_none.title=ორ გვერდზე გაშლის გარეშე -spread_none_label=ცალგვერდიანი ჩვენება -spread_odd.title=ორ გვერდზე გაშლა, კენტი გვერდიდან დაწყებული -spread_odd_label=ორ გვერდზე კენტიდან -spread_even.title=ორ გვერდზე გაშლა, ლუწი გვერდიდან დაწყებული -spread_even_label=ორ გვერდზე ლუწიდან - -# Document properties dialog box -document_properties.title=დოკუმენტის შესახებ… -document_properties_label=დოკუმენტის შესახებ… -document_properties_file_name=ფაილის სახელი: -document_properties_file_size=ფაილის მოცულობა: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} კბ ({{size_b}} ბაიტი) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} მბ ({{size_b}} ბაიტი) -document_properties_title=სათაური: -document_properties_author=შემქმნელი: -document_properties_subject=თემა: -document_properties_keywords=საკვანძო სიტყვები: -document_properties_creation_date=შექმნის დრო: -document_properties_modification_date=ჩასწორების დრო: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=გამომცემი: -document_properties_producer=PDF-შემდგენელი: -document_properties_version=PDF-ვერსია: -document_properties_page_count=გვერდები: -document_properties_page_size=გვერდის ზომა: -document_properties_page_size_unit_inches=დუიმი -document_properties_page_size_unit_millimeters=მმ -document_properties_page_size_orientation_portrait=შვეულად -document_properties_page_size_orientation_landscape=თარაზულად -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=მსუბუქი ვებჩვენება: -document_properties_linearized_yes=დიახ -document_properties_linearized_no=არა -document_properties_close=დახურვა - -print_progress_message=დოკუმენტი მზადდება ამოსაბეჭდად… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=გაუქმება - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=გვერდითა ზოლის გამოჩენა/დამალვა -toggle_sidebar_notification2.title=გვერდითი ზოლის გამოჩენა (შეიცავს სარჩევს/დანართს/ფენებს) -toggle_sidebar_label=გვერდითა ზოლის გამოჩენა/დამალვა -document_outline.title=დოკუმენტის სარჩევის ჩვენება (ორმაგი წკაპით თითოეულის ჩამოშლა/აკეცვა) -document_outline_label=დოკუმენტის სარჩევი -attachments.title=დანართების ჩვენება -attachments_label=დანართები -layers.title=ფენების გამოჩენა (ორმაგი წკაპით ყველა ფენის ნაგულისხმევზე დაბრუნება) -layers_label=ფენები -thumbs.title=შეთვალიერება -thumbs_label=ესკიზები -current_outline_item.title=მიმდინარე გვერდის მონახვა სარჩევში -current_outline_item_label=მიმდინარე გვერდი სარჩევში -findbar.title=პოვნა დოკუმენტში -findbar_label=ძიება - -additional_layers=დამატებითი ფენები -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=გვერდი {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=გვერდი {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=გვერდის შეთვალიერება {{page}} - -# Find panel button title and messages -find_input.title=ძიება -find_input.placeholder=პოვნა დოკუმენტში… -find_previous.title=ფრაზის წინა კონტექსტის პოვნა -find_previous_label=წინა -find_next.title=ფრაზის შემდეგი კონტექსტის პოვნა -find_next_label=შემდეგი -find_highlight=ყველას მონიშვნა -find_match_case_label=მთავრულით -find_match_diacritics_label=ნიშნებით -find_entire_word_label=მთლიანი სიტყვები -find_reached_top=მიღწეულია დოკუმენტის დასაწყისი, გრძელდება ბოლოდან -find_reached_bottom=მიღწეულია დოკუმენტის ბოლო, გრძელდება დასაწყისიდან -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} / {{total}} თანხვედრიდან -find_match_count[two]={{current}} / {{total}} თანხვედრიდან -find_match_count[few]={{current}} / {{total}} თანხვედრიდან -find_match_count[many]={{current}} / {{total}} თანხვედრიდან -find_match_count[other]={{current}} / {{total}} თანხვედრიდან -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=არანაკლებ {{limit}} თანხვედრა -find_match_count_limit[one]=არანაკლებ {{limit}} თანხვედრა -find_match_count_limit[two]=არანაკლებ {{limit}} თანხვედრა -find_match_count_limit[few]=არანაკლებ {{limit}} თანხვედრა -find_match_count_limit[many]=არანაკლებ {{limit}} თანხვედრა -find_match_count_limit[other]=არანაკლებ {{limit}} თანხვედრა -find_not_found=ფრაზა ვერ მოიძებნა - -# Predefined zoom values -page_scale_width=გვერდის სიგანეზე -page_scale_fit=მთლიანი გვერდი -page_scale_auto=ავტომატური -page_scale_actual=საწყისი ზომა -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=შეცდომა, PDF-ფაილის ჩატვირთვისას. -invalid_file_error=არამართებული ან დაზიანებული PDF-ფაილი. -missing_file_error=ნაკლული PDF-ფაილი. -unexpected_response_error=სერვერის მოულოდნელი პასუხი. -rendering_error=შეცდომა, გვერდის ჩვენებისას. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} შენიშვნა] -password_label=შეიყვანეთ პაროლი PDF-ფაილის გასახსნელად. -password_invalid=არასწორი პაროლი. გთხოვთ, სცადოთ ხელახლა. -password_ok=კარგი -password_cancel=გაუქმება - -printing_not_supported=გაფრთხილება: ამობეჭდვა ამ ბრაუზერში არაა სრულად მხარდაჭერილი. -printing_not_ready=გაფრთხილება: PDF სრულად ჩატვირთული არაა, ამობეჭდვის დასაწყებად. -web_fonts_disabled=ვებშრიფტები გამორთულია: ჩაშენებული PDF-შრიფტების გამოყენება ვერ ხერხდება. - -# Editor -editor_free_text2.title=წარწერა -editor_free_text2_label=ტექსტი -editor_ink2.title=დახატვა -editor_ink2_label=დახატვა - -editor_stamp1.title=სურათების დამატება ან ჩასწორება -editor_stamp1_label=სურათების დამატება ან ჩასწორება - -free_text2_default_content=აკრიფეთ… - -# Editor Parameters -editor_free_text_color=ფერი -editor_free_text_size=ზომა -editor_ink_color=ფერი -editor_ink_thickness=სისქე -editor_ink_opacity=გაუმჭვირვალობა - -editor_stamp_add_image_label=სურათის დამატება -editor_stamp_add_image.title=სურათის დამატება - -# Editor aria -editor_free_text2_aria_label=ნაწერის ჩასწორება -editor_ink2_aria_label=ნახატის ჩასწორება -editor_ink_canvas_aria_label=მომხმარებლის შექმნილი სურათი - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=დართული წარწერა -editor_alt_text_edit_button_label=დართული წარწერის ჩასწორება -editor_alt_text_dialog_label=არჩევა -editor_alt_text_dialog_description=დართული წარწერა (შემნაცვლებელი ტექსტი) გამოსადეგია მათთვის, ვინც ვერ ხედავს სურათებს ან როცა სურათი ვერ იტვირთება. -editor_alt_text_add_description_label=აღწერილობის დამატება -editor_alt_text_add_description_description=განკუთვნილია 1-2 წინადადებით საგნის, მახასიათებლის ან მოქმედების აღსაწერად. -editor_alt_text_mark_decorative_label=მოინიშნოს მოსართავად -editor_alt_text_mark_decorative_description=გამოიყენება შესამკობი სურათებისთვის, გარსშემოსავლები ჩარჩოებისა და ჭვირნიშნებისთვის. -editor_alt_text_cancel_button=გაუქმება -editor_alt_text_save_button=შენახვა -editor_alt_text_decorative_tooltip=მოინიშნოს მოსართავად -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=მაგალითად, „ახალგაზრდა მამაკაცი მაგიდასთან ზის და სადილობს“ diff --git a/static/pdf.js/locale/kab/viewer.ftl b/static/pdf.js/locale/kab/viewer.ftl new file mode 100644 index 00000000..5f16478e --- /dev/null +++ b/static/pdf.js/locale/kab/viewer.ftl @@ -0,0 +1,337 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Asebter azewwar +pdfjs-previous-button-label = Azewwar +pdfjs-next-button = + .title = Asebter d-iteddun +pdfjs-next-button-label = Ddu ɣer zdat +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Asebter +# 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 = ɣef { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } n { $pagesCount }) +pdfjs-zoom-out-button = + .title = Semẓi +pdfjs-zoom-out-button-label = Semẓi +pdfjs-zoom-in-button = + .title = Semɣeṛ +pdfjs-zoom-in-button-label = Semɣeṛ +pdfjs-zoom-select = + .title = Semɣeṛ/Semẓi +pdfjs-presentation-mode-button = + .title = Uɣal ɣer Uskar Tihawt +pdfjs-presentation-mode-button-label = Askar Tihawt +pdfjs-open-file-button = + .title = Ldi Afaylu +pdfjs-open-file-button-label = Ldi +pdfjs-print-button = + .title = Siggez +pdfjs-print-button-label = Siggez +pdfjs-save-button = + .title = Sekles +pdfjs-save-button-label = Sekles +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Sader +# 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 = Sader +pdfjs-bookmark-button = + .title = Asebter amiran (Sken-d tansa URL seg usebter amiran) +pdfjs-bookmark-button-label = Asebter amiran +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Ldi deg usnas +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Ldi deg usnas + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Ifecka +pdfjs-tools-button-label = Ifecka +pdfjs-first-page-button = + .title = Ddu ɣer usebter amezwaru +pdfjs-first-page-button-label = Ddu ɣer usebter amezwaru +pdfjs-last-page-button = + .title = Ddu ɣer usebter aneggaru +pdfjs-last-page-button-label = Ddu ɣer usebter aneggaru +pdfjs-page-rotate-cw-button = + .title = Tuzzya tusrigt +pdfjs-page-rotate-cw-button-label = Tuzzya tusrigt +pdfjs-page-rotate-ccw-button = + .title = Tuzzya amgal-usrig +pdfjs-page-rotate-ccw-button-label = Tuzzya amgal-usrig +pdfjs-cursor-text-select-tool-button = + .title = Rmed afecku n tefrant n uḍris +pdfjs-cursor-text-select-tool-button-label = Afecku n tefrant n uḍris +pdfjs-cursor-hand-tool-button = + .title = Rmed afecku afus +pdfjs-cursor-hand-tool-button-label = Afecku afus +pdfjs-scroll-page-button = + .title = Seqdec adrurem n usebter +pdfjs-scroll-page-button-label = Adrurem n usebter +pdfjs-scroll-vertical-button = + .title = Seqdec adrurem ubdid +pdfjs-scroll-vertical-button-label = Adrurem ubdid +pdfjs-scroll-horizontal-button = + .title = Seqdec adrurem aglawan +pdfjs-scroll-horizontal-button-label = Adrurem aglawan +pdfjs-scroll-wrapped-button = + .title = Seqdec adrurem yuẓen +pdfjs-scroll-wrapped-button-label = Adrurem yuẓen +pdfjs-spread-none-button = + .title = Ur sedday ara isiɣzaf n usebter +pdfjs-spread-none-button-label = Ulac isiɣzaf +pdfjs-spread-odd-button = + .title = Seddu isiɣzaf n usebter ibeddun s yisebtar irayuganen +pdfjs-spread-odd-button-label = Isiɣzaf irayuganen +pdfjs-spread-even-button = + .title = Seddu isiɣzaf n usebter ibeddun s yisebtar iyuganen +pdfjs-spread-even-button-label = Isiɣzaf iyuganen + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Taɣaṛa n isemli… +pdfjs-document-properties-button-label = Taɣaṛa n isemli… +pdfjs-document-properties-file-name = Isem n ufaylu: +pdfjs-document-properties-file-size = Teɣzi n ufaylu: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KAṬ ({ $size_b } ibiten) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MAṬ ({ $size_b } iṭamḍanen) +pdfjs-document-properties-title = Azwel: +pdfjs-document-properties-author = Ameskar: +pdfjs-document-properties-subject = Amgay: +pdfjs-document-properties-keywords = Awalen n tsaruţ +pdfjs-document-properties-creation-date = Azemz n tmerna: +pdfjs-document-properties-modification-date = Azemz n usnifel: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Yerna-t: +pdfjs-document-properties-producer = Afecku n uselket PDF: +pdfjs-document-properties-version = Lqem PDF: +pdfjs-document-properties-page-count = Amḍan n yisebtar: +pdfjs-document-properties-page-size = Tuγzi n usebter: +pdfjs-document-properties-page-size-unit-inches = deg +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = s teɣzi +pdfjs-document-properties-page-size-orientation-landscape = s tehri +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 = Asekkil +pdfjs-document-properties-page-size-name-legal = Usḍif + +## 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 = Taskant Web taruradt: +pdfjs-document-properties-linearized-yes = Ih +pdfjs-document-properties-linearized-no = Ala +pdfjs-document-properties-close-button = Mdel + +## Print + +pdfjs-print-progress-message = Aheggi i usiggez n isemli… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Sefsex +pdfjs-printing-not-supported = Ɣuṛ-k: Asiggez ur ittusefrak ara yakan imaṛṛa deg iminig-a. +pdfjs-printing-not-ready = Ɣuṛ-k: Afaylu PDF ur d-yuli ara imeṛṛa akken ad ittusiggez. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Sken/Fer agalis adisan +pdfjs-toggle-sidebar-notification-button = + .title = Ffer/Sekn agalis adisan (isemli yegber aɣawas/ticeqqufin yeddan/tissiwin) +pdfjs-toggle-sidebar-button-label = Sken/Fer agalis adisan +pdfjs-document-outline-button = + .title = Sken isemli (Senned snat tikal i wesemɣer/Afneẓ n iferdisen meṛṛa) +pdfjs-document-outline-button-label = Isɣalen n isebtar +pdfjs-attachments-button = + .title = Sken ticeqqufin yeddan +pdfjs-attachments-button-label = Ticeqqufin yeddan +pdfjs-layers-button = + .title = Skeen tissiwin (sit sin yiberdan i uwennez n meṛṛa tissiwin ɣer waddad amezwer) +pdfjs-layers-button-label = Tissiwin +pdfjs-thumbs-button = + .title = Sken tanfult. +pdfjs-thumbs-button-label = Tinfulin +pdfjs-current-outline-item-button = + .title = Af-d aferdis n uɣawas amiran +pdfjs-current-outline-item-button-label = Aferdis n uɣawas amiran +pdfjs-findbar-button = + .title = Nadi deg isemli +pdfjs-findbar-button-label = Nadi +pdfjs-additional-layers = Tissiwin-nniḍen + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Asebter { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Tanfult n usebter { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Nadi + .placeholder = Nadi deg isemli… +pdfjs-find-previous-button = + .title = Aff-d tamseḍriwt n twinest n deffir +pdfjs-find-previous-button-label = Azewwar +pdfjs-find-next-button = + .title = Aff-d timseḍriwt n twinest d-iteddun +pdfjs-find-next-button-label = Ddu ɣer zdat +pdfjs-find-highlight-checkbox = Err izirig imaṛṛa +pdfjs-find-match-case-checkbox-label = Qadeṛ amasal n isekkilen +pdfjs-find-match-diacritics-checkbox-label = Qadeṛ ifeskilen +pdfjs-find-entire-word-checkbox-label = Awalen iččuranen +pdfjs-find-reached-top = Yabbeḍ s afella n usebter, tuɣalin s wadda +pdfjs-find-reached-bottom = Tebḍeḍ s adda n usebter, tuɣalin s afella +# 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] Timeḍriwt { $current } ɣef { $total } + *[other] Timeḍriwin { $current } ɣef { $total } + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Ugar n { $limit } umṣada + *[other] Ugar n { $limit } yimṣadayen + } +pdfjs-find-not-found = Ulac tawinest + +## Predefined zoom values + +pdfjs-page-scale-width = Tehri n usebter +pdfjs-page-scale-fit = Asebter imaṛṛa +pdfjs-page-scale-auto = Asemɣeṛ/Asemẓi awurman +pdfjs-page-scale-actual = Teɣzi tilawt +# 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 = Asebter { $page } + +## Loading indicator messages + +pdfjs-loading-error = Teḍra-d tuccḍa deg alluy n PDF: +pdfjs-invalid-file-error = Afaylu PDF arameɣtu neɣ yexṣeṛ. +pdfjs-missing-file-error = Ulac afaylu PDF. +pdfjs-unexpected-response-error = Aqeddac yerra-d yir tiririt ur nettwaṛǧi ara. +pdfjs-rendering-error = Teḍra-d tuccḍa deg uskan n usebter. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Tabzimt { $type }] + +## Password + +pdfjs-password-label = Sekcem awal uffir akken ad ldiḍ afaylu-yagi PDF +pdfjs-password-invalid = Awal uffir mačči d ameɣtu, Ɛreḍ tikelt-nniḍen. +pdfjs-password-ok-button = IH +pdfjs-password-cancel-button = Sefsex +pdfjs-web-fonts-disabled = Tisefsiyin web ttwassensent; D awezɣi useqdec n tsefsiyin yettwarnan ɣer PDF. + +## Editing + +pdfjs-editor-free-text-button = + .title = Aḍris +pdfjs-editor-free-text-button-label = Aḍris +pdfjs-editor-ink-button = + .title = Suneɣ +pdfjs-editor-ink-button-label = Suneɣ +pdfjs-editor-stamp-button = + .title = Rnu neɣ ẓreg tugniwin +pdfjs-editor-stamp-button-label = Rnu neɣ ẓreg tugniwin +pdfjs-editor-remove-button = + .title = Kkes +# Editor Parameters +pdfjs-editor-free-text-color-input = Initen +pdfjs-editor-free-text-size-input = Teɣzi +pdfjs-editor-ink-color-input = Ini +pdfjs-editor-ink-thickness-input = Tuzert +pdfjs-editor-ink-opacity-input = Tebrek +pdfjs-editor-stamp-add-image-button = + .title = Rnu tawlaft +pdfjs-editor-stamp-add-image-button-label = Rnu tawlaft +pdfjs-free-text = + .aria-label = Amaẓrag n uḍris +pdfjs-free-text-default-content = Bdu tira... +pdfjs-ink = + .aria-label = Amaẓrag n usuneɣ +pdfjs-ink-canvas = + .aria-label = Tugna yettwarnan sɣur useqdac + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Aḍris amaskal +pdfjs-editor-alt-text-edit-button-label = Ẓreg aḍris amaskal +pdfjs-editor-alt-text-dialog-label = Fren taxtirt +pdfjs-editor-alt-text-add-description-label = Rnu aglam +pdfjs-editor-alt-text-mark-decorative-label = Creḍ d adlag +pdfjs-editor-alt-text-cancel-button = Sefsex +pdfjs-editor-alt-text-save-button = Sekles +pdfjs-editor-alt-text-decorative-tooltip = Yettwacreḍ d adlag + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/kab/viewer.properties b/static/pdf.js/locale/kab/viewer.properties deleted file mode 100644 index 8802ba82..00000000 --- a/static/pdf.js/locale/kab/viewer.properties +++ /dev/null @@ -1,264 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Asebter azewwar -previous_label=Azewwar -next.title=Asebter d-iteddun -next_label=Ddu ɣer zdat - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Asebter -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=ɣef {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} n {{pagesCount}}) - -zoom_out.title=Semẓi -zoom_out_label=Semẓi -zoom_in.title=Semɣeṛ -zoom_in_label=Semɣeṛ -zoom.title=Semɣeṛ/Semẓi -presentation_mode.title=Uɣal ɣer Uskar Tihawt -presentation_mode_label=Askar Tihawt -open_file.title=Ldi Afaylu -open_file_label=Ldi -print.title=Siggez -print_label=Siggez -save.title=Sekles -save_label=Sekles -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Sader -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Sader -bookmark1.title=Asebter amiran (Sken-d tansa URL seg usebter amiran) -bookmark1_label=Asebter amiran -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Ldi deg usnas -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Ldi deg usnas - -# Secondary toolbar and context menu -tools.title=Ifecka -tools_label=Ifecka -first_page.title=Ddu ɣer usebter amezwaru -first_page_label=Ddu ɣer usebter amezwaru -last_page.title=Ddu ɣer usebter aneggaru -last_page_label=Ddu ɣer usebter aneggaru -page_rotate_cw.title=Tuzzya tusrigt -page_rotate_cw_label=Tuzzya tusrigt -page_rotate_ccw.title=Tuzzya amgal-usrig -page_rotate_ccw_label=Tuzzya amgal-usrig - -cursor_text_select_tool.title=Rmed afecku n tefrant n uḍris -cursor_text_select_tool_label=Afecku n tefrant n uḍris -cursor_hand_tool.title=Rmed afecku afus -cursor_hand_tool_label=Afecku afus - -scroll_page.title=Seqdec adrurem n usebter -scroll_page_label=Adrurem n usebter -scroll_vertical.title=Seqdec adrurem ubdid -scroll_vertical_label=Adrurem ubdid -scroll_horizontal.title=Seqdec adrurem aglawan -scroll_horizontal_label=Adrurem aglawan -scroll_wrapped.title=Seqdec adrurem yuẓen -scroll_wrapped_label=Adrurem yuẓen - -spread_none.title=Ur sedday ara isiɣzaf n usebter -spread_none_label=Ulac isiɣzaf -spread_odd.title=Seddu isiɣzaf n usebter ibeddun s yisebtar irayuganen -spread_odd_label=Isiɣzaf irayuganen -spread_even.title=Seddu isiɣzaf n usebter ibeddun s yisebtar iyuganen -spread_even_label=Isiɣzaf iyuganen - -# Document properties dialog box -document_properties.title=Taɣaṛa n isemli… -document_properties_label=Taɣaṛa n isemli… -document_properties_file_name=Isem n ufaylu: -document_properties_file_size=Teɣzi n ufaylu: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KAṬ ({{size_b}} ibiten) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MAṬ ({{size_b}} iṭamḍanen) -document_properties_title=Azwel: -document_properties_author=Ameskar: -document_properties_subject=Amgay: -document_properties_keywords=Awalen n tsaruţ -document_properties_creation_date=Azemz n tmerna: -document_properties_modification_date=Azemz n usnifel: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Yerna-t: -document_properties_producer=Afecku n uselket PDF: -document_properties_version=Lqem PDF: -document_properties_page_count=Amḍan n yisebtar: -document_properties_page_size=Tuγzi n usebter: -document_properties_page_size_unit_inches=deg -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=s teɣzi -document_properties_page_size_orientation_landscape=s tehri -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Asekkil -document_properties_page_size_name_legal=Usḍif -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Taskant Web taruradt: -document_properties_linearized_yes=Ih -document_properties_linearized_no=Ala -document_properties_close=Mdel - -print_progress_message=Aheggi i usiggez n isemli… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Sefsex - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Sken/Fer agalis adisan -toggle_sidebar_notification2.title=Ffer/Sekn agalis adisan (isemli yegber aɣawas/ticeqqufin yeddan/tissiwin) -toggle_sidebar_label=Sken/Fer agalis adisan -document_outline.title=Sken isemli (Senned snat tikal i wesemɣer/Afneẓ n iferdisen meṛṛa) -document_outline_label=Isɣalen n isebtar -attachments.title=Sken ticeqqufin yeddan -attachments_label=Ticeqqufin yeddan -layers.title=Skeen tissiwin (sit sin yiberdan i uwennez n meṛṛa tissiwin ɣer waddad amezwer) -layers_label=Tissiwin -thumbs.title=Sken tanfult. -thumbs_label=Tinfulin -current_outline_item.title=Af-d aferdis n uɣawas amiran -current_outline_item_label=Aferdis n uɣawas amiran -findbar.title=Nadi deg isemli -findbar_label=Nadi - -additional_layers=Tissiwin-nniḍen -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Asebter {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Asebter {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Tanfult n usebter {{page}} - -# Find panel button title and messages -find_input.title=Nadi -find_input.placeholder=Nadi deg isemli… -find_previous.title=Aff-d tamseḍriwt n twinest n deffir -find_previous_label=Azewwar -find_next.title=Aff-d timseḍriwt n twinest d-iteddun -find_next_label=Ddu ɣer zdat -find_highlight=Err izirig imaṛṛa -find_match_case_label=Qadeṛ amasal n isekkilen -find_match_diacritics_label=Qadeṛ ifeskilen -find_entire_word_label=Awalen iččuranen -find_reached_top=Yabbeḍ s afella n usebter, tuɣalin s wadda -find_reached_bottom=Tebḍeḍ s adda n usebter, tuɣalin s afella -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} seg {{total}} n tmeɣṛuḍin -find_match_count[two]={{current}} seg {{total}} n tmeɣṛuḍin -find_match_count[few]={{current}} seg {{total}} n tmeɣṛuḍin -find_match_count[many]={{current}} seg {{total}} n tmeɣṛuḍin -find_match_count[other]={{current}} seg {{total}} n tmeɣṛuḍin -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Ugar n {{limit}} n tmeɣṛuḍin -find_match_count_limit[one]=Ugar n {{limit}} n tmeɣṛuḍin -find_match_count_limit[two]=Ugar n {{limit}} n tmeɣṛuḍin -find_match_count_limit[few]=Ugar n {{limit}} n tmeɣṛuḍin -find_match_count_limit[many]=Ugar n {{limit}} n tmeɣṛuḍin -find_match_count_limit[other]=Ugar n {{limit}} n tmeɣṛuḍin -find_not_found=Ulac tawinest - -# Predefined zoom values -page_scale_width=Tehri n usebter -page_scale_fit=Asebter imaṛṛa -page_scale_auto=Asemɣeṛ/Asemẓi awurman -page_scale_actual=Teɣzi tilawt -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Teḍra-d tuccḍa deg alluy n PDF: -invalid_file_error=Afaylu PDF arameɣtu neɣ yexṣeṛ. -missing_file_error=Ulac afaylu PDF. -unexpected_response_error=Aqeddac yerra-d yir tiririt ur nettwaṛǧi ara. -rendering_error=Teḍra-d tuccḍa deg uskan n usebter. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Tabzimt {{type}}] -password_label=Sekcem awal uffir akken ad ldiḍ afaylu-yagi PDF -password_invalid=Awal uffir mačči d ameɣtu, Ɛreḍ tikelt-nniḍen. -password_ok=IH -password_cancel=Sefsex - -printing_not_supported=Ɣuṛ-k: Asiggez ur ittusefrak ara yakan imaṛṛa deg iminig-a. -printing_not_ready=Ɣuṛ-k: Afaylu PDF ur d-yuli ara imeṛṛa akken ad ittusiggez. -web_fonts_disabled=Tisefsiyin web ttwassensent; D awezɣi useqdec n tsefsiyin yettwarnan ɣer PDF. - -# Editor -editor_free_text2.title=Aḍris -editor_free_text2_label=Aḍris -editor_ink2.title=Suneɣ -editor_ink2_label=Suneɣ - - - -free_text2_default_content=Bdu tira... - -# Editor Parameters -editor_free_text_color=Initen -editor_free_text_size=Teɣzi -editor_ink_color=Ini -editor_ink_thickness=Tuzert -editor_ink_opacity=Tebrek - - -# Editor aria -editor_free_text2_aria_label=Amaẓrag n uḍris -editor_ink2_aria_label=Amaẓrag n usuneɣ -editor_ink_canvas_aria_label=Tugna yettwarnan sɣur useqdac diff --git a/static/pdf.js/locale/kk/viewer.ftl b/static/pdf.js/locale/kk/viewer.ftl new file mode 100644 index 00000000..57260a2d --- /dev/null +++ b/static/pdf.js/locale/kk/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = Презентация режиміне ауысу +pdfjs-presentation-mode-button-label = Презентация режимі +pdfjs-open-file-button = + .title = Файлды ашу +pdfjs-open-file-button-label = Ашу +pdfjs-print-button = + .title = Баспаға шығару +pdfjs-print-button-label = Баспаға шығару +pdfjs-save-button = + .title = Сақтау +pdfjs-save-button-label = Сақтау +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Жүктеп алу +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = Жүктеп алу +pdfjs-bookmark-button = + .title = Ағымдағы бет (Ағымдағы беттен URL адресін көру) +pdfjs-bookmark-button-label = Ағымдағы бет +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Қолданбада ашу +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-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 = Масштабталатын айналдыру +pdfjs-spread-none-button = + .title = Жазық беттер режимін қолданбау +pdfjs-spread-none-button-label = Жазық беттер режимсіз +pdfjs-spread-odd-button = + .title = Жазық беттер тақ нөмірлі беттерден басталады +pdfjs-spread-odd-button-label = Тақ нөмірлі беттер сол жақтан +pdfjs-spread-even-button = + .title = Жазық беттер жұп нөмірлі беттерден басталады +pdfjs-spread-even-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 = Файл өлшемі: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } байт) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } МБ ({ $size_b } байт) +pdfjs-document-properties-title = Тақырыбы: +pdfjs-document-properties-author = Авторы: +pdfjs-document-properties-subject = Тақырыбы: +pdfjs-document-properties-keywords = Кілт сөздер: +pdfjs-document-properties-creation-date = Жасалған күні: +pdfjs-document-properties-modification-date = Түзету күні: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = тік +pdfjs-document-properties-page-size-orientation-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 = Letter +pdfjs-document-properties-page-size-name-legal = 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 = Жылдам Web көрінісі: +pdfjs-document-properties-linearized-yes = Иә +pdfjs-document-properties-linearized-no = Жоқ +pdfjs-document-properties-close-button = Жабу + +## Print + +pdfjs-print-progress-message = Құжатты баспаға шығару үшін дайындау… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Бас тарту +pdfjs-printing-not-supported = Ескерту: Баспаға шығаруды бұл браузер толығымен қолдамайды. +pdfjs-printing-not-ready = Ескерту: Баспаға шығару үшін, бұл PDF толығымен жүктеліп алынбады. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Бүйір панелін көрсету/жасыру +pdfjs-toggle-sidebar-notification-button = + .title = Бүйір панелін көрсету/жасыру (құжатта құрылымы/салынымдар/қабаттар бар) +pdfjs-toggle-sidebar-button-label = Бүйір панелін көрсету/жасыру +pdfjs-document-outline-button = + .title = Құжат құрылымын көрсету (барлық нәрселерді жазық қылу/жинау үшін қос шерту керек) +pdfjs-document-outline-button-label = Құжат құрамасы +pdfjs-attachments-button = + .title = Салынымдарды көрсету +pdfjs-attachments-button-label = Салынымдар +pdfjs-layers-button = + .title = Қабаттарды көрсету (барлық қабаттарды бастапқы күйге келтіру үшін екі рет шертіңіз) +pdfjs-layers-button-label = Қабаттар +pdfjs-thumbs-button = + .title = Кіші көріністерді көрсету +pdfjs-thumbs-button-label = Кіші көріністер +pdfjs-current-outline-item-button = + .title = Құрылымның ағымдағы элементін табу +pdfjs-current-outline-item-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 } парағы +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = { $page } парағы үшін кіші көрінісі + +## Find panel button title and messages + +pdfjs-find-input = + .title = Табу + .placeholder = Құжаттан табу… +pdfjs-find-previous-button = + .title = Осы сөздердің мәтіннен алдыңғы кездесуін табу +pdfjs-find-previous-button-label = Алдыңғысы +pdfjs-find-next-button = + .title = Осы сөздердің мәтіннен келесі кездесуін табу +pdfjs-find-next-button-label = Келесі +pdfjs-find-highlight-checkbox = Барлығын түспен ерекшелеу +pdfjs-find-match-case-checkbox-label = Регистрді ескеру +pdfjs-find-match-diacritics-checkbox-label = Диакритиканы ескеру +pdfjs-find-entire-word-checkbox-label = Сөздер толығымен +pdfjs-find-reached-top = Құжаттың басына жеттік, соңынан бастап жалғастырамыз +pdfjs-find-reached-bottom = Құжаттың соңына жеттік, басынан бастап жалғастырамыз +# 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 } сәйкестік, барлығы { $total } + *[other] { $current } сәйкестік, барлығы { $total } + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] { $limit } сәйкестіктен көп + *[other] { $limit } сәйкестіктен көп + } +pdfjs-find-not-found = Сөз(дер) табылмады + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = PDF жүктеу кезінде қате кетті. +pdfjs-invalid-file-error = Зақымдалған немесе қате PDF файл. +pdfjs-missing-file-error = PDF файлы жоқ. +pdfjs-unexpected-response-error = Сервердің күтпеген жауабы. +pdfjs-rendering-error = Парақты өңдеу кезінде қате кетті. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } аңдатпасы] + +## Password + +pdfjs-password-label = Бұл PDF файлын ашу үшін парольді енгізіңіз. +pdfjs-password-invalid = Пароль дұрыс емес. Қайталап көріңіз. +pdfjs-password-ok-button = ОК +pdfjs-password-cancel-button = Бас тарту +pdfjs-web-fonts-disabled = Веб қаріптері сөндірілген: құрамына енгізілген PDF қаріптерін қолдану мүмкін емес. + +## Editing + +pdfjs-editor-free-text-button = + .title = Мәтін +pdfjs-editor-free-text-button-label = Мәтін +pdfjs-editor-ink-button = + .title = Сурет салу +pdfjs-editor-ink-button-label = Сурет салу +pdfjs-editor-stamp-button = + .title = Суреттерді қосу немесе түзету +pdfjs-editor-stamp-button-label = Суреттерді қосу немесе түзету +pdfjs-editor-highlight-button = + .title = Ерекшелеу +pdfjs-editor-highlight-button-label = Ерекшелеу +pdfjs-highlight-floating-button = + .title = Ерекшелеу +pdfjs-highlight-floating-button1 = + .title = Ерекшелеу + .aria-label = Ерекшелеу +pdfjs-highlight-floating-button-label = Ерекшелеу + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Сызбаны өшіру +pdfjs-editor-remove-freetext-button = + .title = Мәтінді өшіру +pdfjs-editor-remove-stamp-button = + .title = Суретті өшіру +pdfjs-editor-remove-highlight-button = + .title = Түспен ерекшелеуді өшіру + +## + +# 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 = Мөлдірсіздігі +pdfjs-editor-stamp-add-image-button = + .title = Суретті қосу +pdfjs-editor-stamp-add-image-button-label = Суретті қосу +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Қалыңдығы +pdfjs-editor-free-highlight-thickness-title = + .title = Мәтіннен басқа элементтерді ерекшелеу кезінде қалыңдықты өзгерту +pdfjs-free-text = + .aria-label = Мәтін түзеткіші +pdfjs-free-text-default-content = Теруді бастау… +pdfjs-ink = + .aria-label = Сурет түзеткіші +pdfjs-ink-canvas = + .aria-label = Пайдаланушы жасаған сурет + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Балама мәтін +pdfjs-editor-alt-text-edit-button-label = Балама мәтінді өңдеу +pdfjs-editor-alt-text-dialog-label = Опцияны таңдау +pdfjs-editor-alt-text-dialog-description = Балама мәтін адамдар суретті көре алмағанда немесе ол жүктелмегенде көмектеседі. +pdfjs-editor-alt-text-add-description-label = Сипаттаманы қосу +pdfjs-editor-alt-text-add-description-description = Тақырыпты, баптауды немесе әрекетті сипаттайтын 1-2 сөйлемді қолдануға тырысыңыз. +pdfjs-editor-alt-text-mark-decorative-label = Декоративті деп белгілеу +pdfjs-editor-alt-text-mark-decorative-description = Бұл жиектер немесе су белгілері сияқты оюлық суреттер үшін пайдаланылады. +pdfjs-editor-alt-text-cancel-button = Бас тарту +pdfjs-editor-alt-text-save-button = Сақтау +pdfjs-editor-alt-text-decorative-tooltip = Декоративті деп белгіленген +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Мысалы, "Жас жігіт тамақ ішу үшін үстел басына отырады" + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Жоғарғы сол жақ бұрыш — өлшемін өзгерту +pdfjs-editor-resizer-label-top-middle = Жоғарғы ортасы — өлшемін өзгерту +pdfjs-editor-resizer-label-top-right = Жоғарғы оң жақ бұрыш — өлшемін өзгерту +pdfjs-editor-resizer-label-middle-right = Ортаңғы оң жақ — өлшемін өзгерту +pdfjs-editor-resizer-label-bottom-right = Төменгі оң жақ бұрыш — өлшемін өзгерту +pdfjs-editor-resizer-label-bottom-middle = Төменгі ортасы — өлшемін өзгерту +pdfjs-editor-resizer-label-bottom-left = Төменгі сол жақ бұрыш — өлшемін өзгерту +pdfjs-editor-resizer-label-middle-left = Ортаңғы сол жақ — өлшемін өзгерту + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Ерекшелеу түсі +pdfjs-editor-colorpicker-button = + .title = Түсті өзгерту +pdfjs-editor-colorpicker-dropdown = + .aria-label = Түс таңдаулары +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 = Барлығын көрсету diff --git a/static/pdf.js/locale/kk/viewer.properties b/static/pdf.js/locale/kk/viewer.properties deleted file mode 100644 index 920f0a3b..00000000 --- a/static/pdf.js/locale/kk/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Алдыңғы парақ -previous_label=Алдыңғысы -next.title=Келесі парақ -next_label=Келесі - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Парақ -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages={{pagesCount}} ішінен -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=(парақ {{pageNumber}}, {{pagesCount}} ішінен) - -zoom_out.title=Кішірейту -zoom_out_label=Кішірейту -zoom_in.title=Үлкейту -zoom_in_label=Үлкейту -zoom.title=Масштаб -presentation_mode.title=Презентация режиміне ауысу -presentation_mode_label=Презентация режимі -open_file.title=Файлды ашу -open_file_label=Ашу -print.title=Баспаға шығару -print_label=Баспаға шығару -save.title=Сақтау -save_label=Сақтау -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Жүктеп алу -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Жүктеп алу -bookmark1.title=Ағымдағы бет (Ағымдағы беттен URL адресін көру) -bookmark1_label=Ағымдағы бет -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Қолданбада ашу -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Қолданбада ашу - -# Secondary toolbar and context menu -tools.title=Құралдар -tools_label=Құралдар -first_page.title=Алғашқы параққа өту -first_page_label=Алғашқы параққа өту -last_page.title=Соңғы параққа өту -last_page_label=Соңғы параққа өту -page_rotate_cw.title=Сағат тілі бағытымен айналдыру -page_rotate_cw_label=Сағат тілі бағытымен бұру -page_rotate_ccw.title=Сағат тілі бағытына қарсы бұру -page_rotate_ccw_label=Сағат тілі бағытына қарсы бұру - -cursor_text_select_tool.title=Мәтінді таңдау құралын іске қосу -cursor_text_select_tool_label=Мәтінді таңдау құралы -cursor_hand_tool.title=Қол құралын іске қосу -cursor_hand_tool_label=Қол құралы - -scroll_page.title=Беттерді айналдыруды пайдалану -scroll_page_label=Беттерді айналдыру -scroll_vertical.title=Вертикалды айналдыруды қолдану -scroll_vertical_label=Вертикалды айналдыру -scroll_horizontal.title=Горизонталды айналдыруды қолдану -scroll_horizontal_label=Горизонталды айналдыру -scroll_wrapped.title=Масштабталатын айналдыруды қолдану -scroll_wrapped_label=Масштабталатын айналдыру - -spread_none.title=Жазық беттер режимін қолданбау -spread_none_label=Жазық беттер режимсіз -spread_odd.title=Жазық беттер тақ нөмірлі беттерден басталады -spread_odd_label=Тақ нөмірлі беттер сол жақтан -spread_even.title=Жазық беттер жұп нөмірлі беттерден басталады -spread_even_label=Жұп нөмірлі беттер сол жақтан - -# Document properties dialog box -document_properties.title=Құжат қасиеттері… -document_properties_label=Құжат қасиеттері… -document_properties_file_name=Файл аты: -document_properties_file_size=Файл өлшемі: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} КБ ({{size_b}} байт) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} МБ ({{size_b}} байт) -document_properties_title=Тақырыбы: -document_properties_author=Авторы: -document_properties_subject=Тақырыбы: -document_properties_keywords=Кілт сөздер: -document_properties_creation_date=Жасалған күні: -document_properties_modification_date=Түзету күні: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Жасаған: -document_properties_producer=PDF өндірген: -document_properties_version=PDF нұсқасы: -document_properties_page_count=Беттер саны: -document_properties_page_size=Бет өлшемі: -document_properties_page_size_unit_inches=дюйм -document_properties_page_size_unit_millimeters=мм -document_properties_page_size_orientation_portrait=тік -document_properties_page_size_orientation_landscape=жатық -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Жылдам Web көрінісі: -document_properties_linearized_yes=Иә -document_properties_linearized_no=Жоқ -document_properties_close=Жабу - -print_progress_message=Құжатты баспаға шығару үшін дайындау… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Бас тарту - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Бүйір панелін көрсету/жасыру -toggle_sidebar_notification2.title=Бүйір панелін көрсету/жасыру (құжатта құрылымы/салынымдар/қабаттар бар) -toggle_sidebar_label=Бүйір панелін көрсету/жасыру -document_outline.title=Құжат құрылымын көрсету (барлық нәрселерді жазық қылу/жинау үшін қос шерту керек) -document_outline_label=Құжат құрамасы -attachments.title=Салынымдарды көрсету -attachments_label=Салынымдар -layers.title=Қабаттарды көрсету (барлық қабаттарды бастапқы күйге келтіру үшін екі рет шертіңіз) -layers_label=Қабаттар -thumbs.title=Кіші көріністерді көрсету -thumbs_label=Кіші көріністер -current_outline_item.title=Құрылымның ағымдағы элементін табу -current_outline_item_label=Құрылымның ағымдағы элементі -findbar.title=Құжаттан табу -findbar_label=Табу - -additional_layers=Қосымша қабаттар -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Бет {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title={{page}} парағы -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas={{page}} парағы үшін кіші көрінісі - -# Find panel button title and messages -find_input.title=Табу -find_input.placeholder=Құжаттан табу… -find_previous.title=Осы сөздердің мәтіннен алдыңғы кездесуін табу -find_previous_label=Алдыңғысы -find_next.title=Осы сөздердің мәтіннен келесі кездесуін табу -find_next_label=Келесі -find_highlight=Барлығын түспен ерекшелеу -find_match_case_label=Регистрді ескеру -find_match_diacritics_label=Диакритиканы ескеру -find_entire_word_label=Сөздер толығымен -find_reached_top=Құжаттың басына жеттік, соңынан бастап жалғастырамыз -find_reached_bottom=Құжаттың соңына жеттік, басынан бастап жалғастырамыз -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} / {{total}} сәйкестік -find_match_count[two]={{current}} / {{total}} сәйкестік -find_match_count[few]={{current}} / {{total}} сәйкестік -find_match_count[many]={{current}} / {{total}} сәйкестік -find_match_count[other]={{current}} / {{total}} сәйкестік -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]={{limit}} сәйкестіктен көп -find_match_count_limit[one]={{limit}} сәйкестіктен көп -find_match_count_limit[two]={{limit}} сәйкестіктен көп -find_match_count_limit[few]={{limit}} сәйкестіктен көп -find_match_count_limit[many]={{limit}} сәйкестіктен көп -find_match_count_limit[other]={{limit}} сәйкестіктен көп -find_not_found=Сөз(дер) табылмады - -# Predefined zoom values -page_scale_width=Парақ ені -page_scale_fit=Парақты сыйдыру -page_scale_auto=Автомасштабтау -page_scale_actual=Нақты өлшемі -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=PDF жүктеу кезінде қате кетті. -invalid_file_error=Зақымдалған немесе қате PDF файл. -missing_file_error=PDF файлы жоқ. -unexpected_response_error=Сервердің күтпеген жауабы. -rendering_error=Парақты өңдеу кезінде қате кетті. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} аңдатпасы] -password_label=Бұл PDF файлын ашу үшін парольді енгізіңіз. -password_invalid=Пароль дұрыс емес. Қайталап көріңіз. -password_ok=ОК -password_cancel=Бас тарту - -printing_not_supported=Ескерту: Баспаға шығаруды бұл браузер толығымен қолдамайды. -printing_not_ready=Ескерту: Баспаға шығару үшін, бұл PDF толығымен жүктеліп алынбады. -web_fonts_disabled=Веб қаріптері сөндірілген: құрамына енгізілген PDF қаріптерін қолдану мүмкін емес. - -# Editor -editor_free_text2.title=Мәтін -editor_free_text2_label=Мәтін -editor_ink2.title=Сурет салу -editor_ink2_label=Сурет салу - -editor_stamp1.title=Суреттерді қосу немесе түзету -editor_stamp1_label=Суреттерді қосу немесе түзету - -free_text2_default_content=Теруді бастау… - -# Editor Parameters -editor_free_text_color=Түс -editor_free_text_size=Өлшемі -editor_ink_color=Түс -editor_ink_thickness=Қалыңдығы -editor_ink_opacity=Мөлдірсіздігі - -editor_stamp_add_image_label=Суретті қосу -editor_stamp_add_image.title=Суретті қосу - -# Editor aria -editor_free_text2_aria_label=Мәтін түзеткіші -editor_ink2_aria_label=Сурет түзеткіші -editor_ink_canvas_aria_label=Пайдаланушы жасаған сурет - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Балама мәтін -editor_alt_text_edit_button_label=Балама мәтінді өңдеу -editor_alt_text_dialog_label=Опцияны таңдау -editor_alt_text_dialog_description=Балама мәтін адамдар суретті көре алмағанда немесе ол жүктелмегенде көмектеседі. -editor_alt_text_add_description_label=Сипаттаманы қосу -editor_alt_text_add_description_description=Тақырыпты, баптауды немесе әрекетті сипаттайтын 1-2 сөйлемді қолдануға тырысыңыз. -editor_alt_text_mark_decorative_label=Декоративті деп белгілеу -editor_alt_text_mark_decorative_description=Бұл жиектер немесе су белгілері сияқты оюлық суреттер үшін пайдаланылады. -editor_alt_text_cancel_button=Бас тарту -editor_alt_text_save_button=Сақтау -editor_alt_text_decorative_tooltip=Декоративті деп белгіленген -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=Мысалы, "Жас жігіт тамақ ішу үшін үстел басына отырады" diff --git a/static/pdf.js/locale/km/viewer.ftl b/static/pdf.js/locale/km/viewer.ftl new file mode 100644 index 00000000..6efd1054 --- /dev/null +++ b/static/pdf.js/locale/km/viewer.ftl @@ -0,0 +1,223 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = ប្ដូរ​ទៅ​របៀប​បទ​បង្ហាញ +pdfjs-presentation-mode-button-label = របៀប​បទ​បង្ហាញ +pdfjs-open-file-button = + .title = បើក​ឯកសារ +pdfjs-open-file-button-label = បើក +pdfjs-print-button = + .title = បោះពុម្ព +pdfjs-print-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 = ឧបករណ៍​ដៃ + +## Document properties dialog + +pdfjs-document-properties-button = + .title = លក្ខណ​សម្បត្តិ​ឯកសារ… +pdfjs-document-properties-button-label = លក្ខណ​សម្បត្តិ​ឯកសារ… +pdfjs-document-properties-file-name = ឈ្មោះ​ឯកសារ៖ +pdfjs-document-properties-file-size = ទំហំ​ឯកសារ៖ +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } បៃ) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } បៃ) +pdfjs-document-properties-title = ចំណងជើង៖ +pdfjs-document-properties-author = អ្នក​និពន្ធ៖ +pdfjs-document-properties-subject = ប្រធានបទ៖ +pdfjs-document-properties-keywords = ពាក្យ​គន្លឹះ៖ +pdfjs-document-properties-creation-date = កាលបរិច្ឆេទ​បង្កើត៖ +pdfjs-document-properties-modification-date = កាលបរិច្ឆេទ​កែប្រែ៖ +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = អ្នក​បង្កើត៖ +pdfjs-document-properties-producer = កម្មវិធី​បង្កើត PDF ៖ +pdfjs-document-properties-version = កំណែ PDF ៖ +pdfjs-document-properties-page-count = ចំនួន​ទំព័រ៖ +pdfjs-document-properties-page-size-unit-inches = អ៊ីញ +pdfjs-document-properties-page-size-unit-millimeters = មម +pdfjs-document-properties-page-size-orientation-portrait = បញ្ឈរ +pdfjs-document-properties-page-size-orientation-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 = សំបុត្រ + +## 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 }) + +## + +pdfjs-document-properties-linearized-yes = បាទ/ចាស +pdfjs-document-properties-linearized-no = ទេ +pdfjs-document-properties-close-button = បិទ + +## Print + +pdfjs-print-progress-message = កំពុង​រៀបចំ​ឯកសារ​សម្រាប់​បោះពុម្ព… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = បោះបង់ +pdfjs-printing-not-supported = ការ​ព្រមាន ៖ កា​រ​បោះពុម្ព​មិន​ត្រូវ​បាន​គាំទ្រ​ពេញលេញ​ដោយ​កម្មវិធី​រុករក​នេះ​ទេ ។ +pdfjs-printing-not-ready = ព្រមាន៖ PDF មិន​ត្រូវ​បាន​ផ្ទុក​ទាំងស្រុង​ដើម្បី​បោះពុម្ព​ទេ។ + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = បិទ/បើក​គ្រាប់​រំកិល +pdfjs-toggle-sidebar-button-label = បិទ/បើក​គ្រាប់​រំកិល +pdfjs-document-outline-button = + .title = បង្ហាញ​គ្រោង​ឯកសារ (ចុច​ទ្វេ​ដង​ដើម្បី​ពង្រីក/បង្រួម​ធាតុ​ទាំងអស់) +pdfjs-document-outline-button-label = គ្រោង​ឯកសារ +pdfjs-attachments-button = + .title = បង្ហាញ​ឯកសារ​ភ្ជាប់ +pdfjs-attachments-button-label = ឯកសារ​ភ្ជាប់ +pdfjs-thumbs-button = + .title = បង្ហាញ​រូបភាព​តូចៗ +pdfjs-thumbs-button-label = រួបភាព​តូចៗ +pdfjs-findbar-button = + .title = រក​នៅ​ក្នុង​ឯកសារ +pdfjs-findbar-button-label = រក + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = ទំព័រ { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = រូបភាព​តូច​របស់​ទំព័រ { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = រក + .placeholder = រក​នៅ​ក្នុង​ឯកសារ... +pdfjs-find-previous-button = + .title = រក​ពាក្យ ឬ​ឃ្លា​ដែល​បាន​ជួប​មុន +pdfjs-find-previous-button-label = មុន +pdfjs-find-next-button = + .title = រក​ពាក្យ ឬ​ឃ្លា​ដែល​បាន​ជួប​បន្ទាប់ +pdfjs-find-next-button-label = បន្ទាប់ +pdfjs-find-highlight-checkbox = បន្លិច​ទាំងអស់ +pdfjs-find-match-case-checkbox-label = ករណី​ដំណូច +pdfjs-find-reached-top = បាន​បន្ត​ពី​ខាង​ក្រោម ទៅ​ដល់​ខាង​​លើ​នៃ​ឯកសារ +pdfjs-find-reached-bottom = បាន​បន្ត​ពី​ខាងលើ ទៅដល់​ចុង​​នៃ​ឯកសារ +pdfjs-find-not-found = រក​មិន​ឃើញ​ពាក្យ ឬ​ឃ្លា + +## 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 + + +## Loading indicator messages + +pdfjs-loading-error = មាន​កំហុស​បាន​កើតឡើង​ពេល​កំពុង​ផ្ទុក PDF ។ +pdfjs-invalid-file-error = ឯកសារ PDF ខូច ឬ​មិន​ត្រឹមត្រូវ ។ +pdfjs-missing-file-error = បាត់​ឯកសារ PDF +pdfjs-unexpected-response-error = ការ​ឆ្លើយ​តម​ម៉ាស៊ីន​មេ​ដែល​មិន​បាន​រំពឹង។ +pdfjs-rendering-error = មាន​កំហុស​បាន​កើតឡើង​ពេល​បង្ហាញ​ទំព័រ ។ + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } ចំណារ​ពន្យល់] + +## Password + +pdfjs-password-label = បញ្ចូល​ពាក្យសម្ងាត់​ដើម្បី​បើក​ឯកសារ PDF នេះ។ +pdfjs-password-invalid = ពាក្យសម្ងាត់​មិន​ត្រឹមត្រូវ។ សូម​ព្យាយាម​ម្ដងទៀត។ +pdfjs-password-ok-button = យល់​ព្រម +pdfjs-password-cancel-button = បោះបង់ +pdfjs-web-fonts-disabled = បាន​បិទ​ពុម្ពអក្សរ​បណ្ដាញ ៖ មិន​អាច​ប្រើ​ពុម្ពអក្សរ PDF ដែល​បាន​បង្កប់​បាន​ទេ ។ + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/km/viewer.properties b/static/pdf.js/locale/km/viewer.properties deleted file mode 100644 index 68a8f55f..00000000 --- a/static/pdf.js/locale/km/viewer.properties +++ /dev/null @@ -1,189 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=ទំព័រ​មុន -previous_label=មុន -next.title=ទំព័រ​បន្ទាប់ -next_label=បន្ទាប់ - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=ទំព័រ -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=នៃ {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} នៃ {{pagesCount}}) - -zoom_out.title=​បង្រួម -zoom_out_label=​បង្រួម -zoom_in.title=​ពង្រីក -zoom_in_label=​ពង្រីក -zoom.title=ពង្រីក -presentation_mode.title=ប្ដូរ​ទៅ​របៀប​បទ​បង្ហាញ -presentation_mode_label=របៀប​បទ​បង្ហាញ -open_file.title=បើក​ឯកសារ -open_file_label=បើក -print.title=បោះពុម្ព -print_label=បោះពុម្ព - -# Secondary toolbar and context menu -tools.title=ឧបករណ៍ -tools_label=ឧបករណ៍ -first_page.title=ទៅកាន់​ទំព័រ​ដំបូង​ -first_page_label=ទៅកាន់​ទំព័រ​ដំបូង​ -last_page.title=ទៅកាន់​ទំព័រ​ចុងក្រោយ​ -last_page_label=ទៅកាន់​ទំព័រ​ចុងក្រោយ -page_rotate_cw.title=បង្វិល​ស្រប​ទ្រនិច​នាឡិកា -page_rotate_cw_label=បង្វិល​ស្រប​ទ្រនិច​នាឡិកា -page_rotate_ccw.title=បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​ -page_rotate_ccw_label=បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​ - -cursor_text_select_tool.title=បើក​ឧបករណ៍​ជ្រើស​អត្ថបទ -cursor_text_select_tool_label=ឧបករណ៍​ជ្រើស​អត្ថបទ -cursor_hand_tool.title=បើក​ឧបករណ៍​ដៃ -cursor_hand_tool_label=ឧបករណ៍​ដៃ - - - -# Document properties dialog box -document_properties.title=លក្ខណ​សម្បត្តិ​ឯកសារ… -document_properties_label=លក្ខណ​សម្បត្តិ​ឯកសារ… -document_properties_file_name=ឈ្មោះ​ឯកសារ៖ -document_properties_file_size=ទំហំ​ឯកសារ៖ -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} បៃ) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} បៃ) -document_properties_title=ចំណងជើង៖ -document_properties_author=អ្នក​និពន្ធ៖ -document_properties_subject=ប្រធានបទ៖ -document_properties_keywords=ពាក្យ​គន្លឹះ៖ -document_properties_creation_date=កាលបរិច្ឆេទ​បង្កើត៖ -document_properties_modification_date=កាលបរិច្ឆេទ​កែប្រែ៖ -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=អ្នក​បង្កើត៖ -document_properties_producer=កម្មវិធី​បង្កើត PDF ៖ -document_properties_version=កំណែ PDF ៖ -document_properties_page_count=ចំនួន​ទំព័រ៖ -document_properties_page_size_unit_inches=អ៊ីញ -document_properties_page_size_unit_millimeters=មម -document_properties_page_size_orientation_portrait=បញ្ឈរ -document_properties_page_size_orientation_landscape=ផ្តេក -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=សំបុត្រ -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized_yes=បាទ/ចាស -document_properties_linearized_no=ទេ -document_properties_close=បិទ - -print_progress_message=កំពុង​រៀបចំ​ឯកសារ​សម្រាប់​បោះពុម្ព… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=បោះបង់ - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=បិទ/បើក​គ្រាប់​រំកិល -toggle_sidebar_label=បិទ/បើក​គ្រាប់​រំកិល -document_outline.title=បង្ហាញ​គ្រោង​ឯកសារ (ចុច​ទ្វេ​ដង​ដើម្បី​ពង្រីក/បង្រួម​ធាតុ​ទាំងអស់) -document_outline_label=គ្រោង​ឯកសារ -attachments.title=បង្ហាញ​ឯកសារ​ភ្ជាប់ -attachments_label=ឯកសារ​ភ្ជាប់ -thumbs.title=បង្ហាញ​រូបភាព​តូចៗ -thumbs_label=រួបភាព​តូចៗ -findbar.title=រក​នៅ​ក្នុង​ឯកសារ -findbar_label=រក - -# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=ទំព័រ {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=រូបភាព​តូច​របស់​ទំព័រ {{page}} - -# Find panel button title and messages -find_input.title=រក -find_input.placeholder=រក​នៅ​ក្នុង​ឯកសារ... -find_previous.title=រក​ពាក្យ ឬ​ឃ្លា​ដែល​បាន​ជួប​មុន -find_previous_label=មុន -find_next.title=រក​ពាក្យ ឬ​ឃ្លា​ដែល​បាន​ជួប​បន្ទាប់ -find_next_label=បន្ទាប់ -find_highlight=បន្លិច​ទាំងអស់ -find_match_case_label=ករណី​ដំណូច -find_reached_top=បាន​បន្ត​ពី​ខាង​ក្រោម ទៅ​ដល់​ខាង​​លើ​នៃ​ឯកសារ -find_reached_bottom=បាន​បន្ត​ពី​ខាងលើ ទៅដល់​ចុង​​នៃ​ឯកសារ -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_not_found=រក​មិន​ឃើញ​ពាក្យ ឬ​ឃ្លា - -# Predefined zoom values -page_scale_width=ទទឹង​ទំព័រ -page_scale_fit=សម​ទំព័រ -page_scale_auto=ពង្រីក​ស្វ័យប្រវត្តិ -page_scale_actual=ទំហំ​ជាក់ស្ដែង -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=មាន​កំហុស​បាន​កើតឡើង​ពេល​កំពុង​ផ្ទុក PDF ។ -invalid_file_error=ឯកសារ PDF ខូច ឬ​មិន​ត្រឹមត្រូវ ។ -missing_file_error=បាត់​ឯកសារ PDF -unexpected_response_error=ការ​ឆ្លើយ​តម​ម៉ាស៊ីន​មេ​ដែល​មិន​បាន​រំពឹង។ - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. - -rendering_error=មាន​កំហុស​បាន​កើតឡើង​ពេល​បង្ហាញ​ទំព័រ ។ - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} ចំណារ​ពន្យល់] -password_label=បញ្ចូល​ពាក្យសម្ងាត់​ដើម្បី​បើក​ឯកសារ PDF នេះ។ -password_invalid=ពាក្យសម្ងាត់​មិន​ត្រឹមត្រូវ។ សូម​ព្យាយាម​ម្ដងទៀត។ -password_ok=យល់​ព្រម -password_cancel=បោះបង់ - -printing_not_supported=ការ​ព្រមាន ៖ កា​រ​បោះពុម្ព​មិន​ត្រូវ​បាន​គាំទ្រ​ពេញលេញ​ដោយ​កម្មវិធី​រុករក​នេះ​ទេ ។ -printing_not_ready=ព្រមាន៖ PDF មិន​ត្រូវ​បាន​ផ្ទុក​ទាំងស្រុង​ដើម្បី​បោះពុម្ព​ទេ។ -web_fonts_disabled=បាន​បិទ​ពុម្ពអក្សរ​បណ្ដាញ ៖ មិន​អាច​ប្រើ​ពុម្ពអក្សរ PDF ដែល​បាន​បង្កប់​បាន​ទេ ។ - diff --git a/static/pdf.js/locale/kn/viewer.ftl b/static/pdf.js/locale/kn/viewer.ftl new file mode 100644 index 00000000..03322555 --- /dev/null +++ b/static/pdf.js/locale/kn/viewer.ftl @@ -0,0 +1,213 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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 = ({ $pagesCount } ರಲ್ಲಿ { $pageNumber }) +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-presentation-mode-button = + .title = ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮಕ್ಕೆ ಬದಲಾಯಿಸು +pdfjs-presentation-mode-button-label = ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮ +pdfjs-open-file-button = + .title = ಕಡತವನ್ನು ತೆರೆ +pdfjs-open-file-button-label = ತೆರೆಯಿರಿ +pdfjs-print-button = + .title = ಮುದ್ರಿಸು +pdfjs-print-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 = ಕೈ ಉಪಕರಣ + +## Document properties dialog + +pdfjs-document-properties-button = + .title = ಡಾಕ್ಯುಮೆಂಟ್‌ ಗುಣಗಳು... +pdfjs-document-properties-button-label = ಡಾಕ್ಯುಮೆಂಟ್‌ ಗುಣಗಳು... +pdfjs-document-properties-file-name = ಕಡತದ ಹೆಸರು: +pdfjs-document-properties-file-size = ಕಡತದ ಗಾತ್ರ: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } ಬೈಟ್‍ಗಳು) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } ಬೈಟ್‍ಗಳು) +pdfjs-document-properties-title = ಶೀರ್ಷಿಕೆ: +pdfjs-document-properties-author = ಕರ್ತೃ: +pdfjs-document-properties-subject = ವಿಷಯ: +pdfjs-document-properties-keywords = ಮುಖ್ಯಪದಗಳು: +pdfjs-document-properties-creation-date = ರಚಿಸಿದ ದಿನಾಂಕ: +pdfjs-document-properties-modification-date = ಮಾರ್ಪಡಿಸಲಾದ ದಿನಾಂಕ: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = ರಚಿಸಿದವರು: +pdfjs-document-properties-producer = PDF ಉತ್ಪಾದಕ: +pdfjs-document-properties-version = PDF ಆವೃತ್ತಿ: +pdfjs-document-properties-page-count = ಪುಟದ ಎಣಿಕೆ: +pdfjs-document-properties-page-size-unit-inches = ಇದರಲ್ಲಿ +pdfjs-document-properties-page-size-orientation-portrait = ಭಾವಚಿತ್ರ +pdfjs-document-properties-page-size-orientation-landscape = ಪ್ರಕೃತಿ ಚಿತ್ರ + +## 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-close-button = ಮುಚ್ಚು + +## Print + +pdfjs-print-progress-message = ಮುದ್ರಿಸುವುದಕ್ಕಾಗಿ ದಸ್ತಾವೇಜನ್ನು ಸಿದ್ಧಗೊಳಿಸಲಾಗುತ್ತಿದೆ… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = ರದ್ದು ಮಾಡು +pdfjs-printing-not-supported = ಎಚ್ಚರಿಕೆ: ಈ ಜಾಲವೀಕ್ಷಕದಲ್ಲಿ ಮುದ್ರಣಕ್ಕೆ ಸಂಪೂರ್ಣ ಬೆಂಬಲವಿಲ್ಲ. +pdfjs-printing-not-ready = ಎಚ್ಚರಿಕೆ: PDF ಕಡತವು ಮುದ್ರಿಸಲು ಸಂಪೂರ್ಣವಾಗಿ ಲೋಡ್ ಆಗಿಲ್ಲ. + +## 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-thumbs-button = + .title = ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು +pdfjs-thumbs-button-label = ಚಿಕ್ಕಚಿತ್ರಗಳು +pdfjs-findbar-button = + .title = ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು +pdfjs-findbar-button-label = ಹುಡುಕು + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = ಪುಟ { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = ಪುಟವನ್ನು ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = ಹುಡುಕು + .placeholder = ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು… +pdfjs-find-previous-button = + .title = ವಾಕ್ಯದ ಹಿಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು +pdfjs-find-previous-button-label = ಹಿಂದಿನ +pdfjs-find-next-button = + .title = ವಾಕ್ಯದ ಮುಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು +pdfjs-find-next-button-label = ಮುಂದಿನ +pdfjs-find-highlight-checkbox = ಎಲ್ಲವನ್ನು ಹೈಲೈಟ್ ಮಾಡು +pdfjs-find-match-case-checkbox-label = ಕೇಸನ್ನು ಹೊಂದಿಸು +pdfjs-find-reached-top = ದಸ್ತಾವೇಜಿನ ಮೇಲ್ಭಾಗವನ್ನು ತಲುಪಿದೆ, ಕೆಳಗಿನಿಂದ ಆರಂಭಿಸು +pdfjs-find-reached-bottom = ದಸ್ತಾವೇಜಿನ ಕೊನೆಯನ್ನು ತಲುಪಿದೆ, ಮೇಲಿನಿಂದ ಆರಂಭಿಸು +pdfjs-find-not-found = ವಾಕ್ಯವು ಕಂಡು ಬಂದಿಲ್ಲ + +## 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 + + +## Loading indicator messages + +pdfjs-loading-error = PDF ಅನ್ನು ಲೋಡ್ ಮಾಡುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ. +pdfjs-invalid-file-error = ಅಮಾನ್ಯವಾದ ಅಥವ ಹಾಳಾದ PDF ಕಡತ. +pdfjs-missing-file-error = PDF ಕಡತ ಇಲ್ಲ. +pdfjs-unexpected-response-error = ಅನಿರೀಕ್ಷಿತವಾದ ಪೂರೈಕೆಗಣಕದ ಪ್ರತಿಕ್ರಿಯೆ. +pdfjs-rendering-error = ಪುಟವನ್ನು ನಿರೂಪಿಸುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ. + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } ಟಿಪ್ಪಣಿ] + +## Password + +pdfjs-password-label = PDF ಅನ್ನು ತೆರೆಯಲು ಗುಪ್ತಪದವನ್ನು ನಮೂದಿಸಿ. +pdfjs-password-invalid = ಅಮಾನ್ಯವಾದ ಗುಪ್ತಪದ, ದಯವಿಟ್ಟು ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = ರದ್ದು ಮಾಡು +pdfjs-web-fonts-disabled = ಜಾಲ ಅಕ್ಷರಶೈಲಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ: ಅಡಕಗೊಳಿಸಿದ PDF ಅಕ್ಷರಶೈಲಿಗಳನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/kn/viewer.properties b/static/pdf.js/locale/kn/viewer.properties deleted file mode 100644 index aa458435..00000000 --- a/static/pdf.js/locale/kn/viewer.properties +++ /dev/null @@ -1,166 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=ಹಿಂದಿನ ಪುಟ -previous_label=ಹಿಂದಿನ -next.title=ಮುಂದಿನ ಪುಟ -next_label=ಮುಂದಿನ - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=ಪುಟ -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages={{pagesCount}} ರಲ್ಲಿ -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pagesCount}} ರಲ್ಲಿ {{pageNumber}}) - -zoom_out.title=ಕಿರಿದಾಗಿಸು -zoom_out_label=ಕಿರಿದಾಗಿಸಿ -zoom_in.title=ಹಿರಿದಾಗಿಸು -zoom_in_label=ಹಿರಿದಾಗಿಸಿ -zoom.title=ಗಾತ್ರಬದಲಿಸು -presentation_mode.title=ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮಕ್ಕೆ ಬದಲಾಯಿಸು -presentation_mode_label=ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮ -open_file.title=ಕಡತವನ್ನು ತೆರೆ -open_file_label=ತೆರೆಯಿರಿ -print.title=ಮುದ್ರಿಸು -print_label=ಮುದ್ರಿಸಿ - -# Secondary toolbar and context menu -tools.title=ಉಪಕರಣಗಳು -tools_label=ಉಪಕರಣಗಳು -first_page.title=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು -first_page_label=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು -last_page.title=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು -last_page_label=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು -page_rotate_cw.title=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು -page_rotate_cw_label=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು -page_rotate_ccw.title=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು -page_rotate_ccw_label=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು - -cursor_text_select_tool.title=ಪಠ್ಯ ಆಯ್ಕೆ ಉಪಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ -cursor_text_select_tool_label=ಪಠ್ಯ ಆಯ್ಕೆಯ ಉಪಕರಣ -cursor_hand_tool.title=ಕೈ ಉಪಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ -cursor_hand_tool_label=ಕೈ ಉಪಕರಣ - - - -# Document properties dialog box -document_properties.title=ಡಾಕ್ಯುಮೆಂಟ್‌ ಗುಣಗಳು... -document_properties_label=ಡಾಕ್ಯುಮೆಂಟ್‌ ಗುಣಗಳು... -document_properties_file_name=ಕಡತದ ಹೆಸರು: -document_properties_file_size=ಕಡತದ ಗಾತ್ರ: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} ಬೈಟ್‍ಗಳು) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} ಬೈಟ್‍ಗಳು) -document_properties_title=ಶೀರ್ಷಿಕೆ: -document_properties_author=ಕರ್ತೃ: -document_properties_subject=ವಿಷಯ: -document_properties_keywords=ಮುಖ್ಯಪದಗಳು: -document_properties_creation_date=ರಚಿಸಿದ ದಿನಾಂಕ: -document_properties_modification_date=ಮಾರ್ಪಡಿಸಲಾದ ದಿನಾಂಕ: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=ರಚಿಸಿದವರು: -document_properties_producer=PDF ಉತ್ಪಾದಕ: -document_properties_version=PDF ಆವೃತ್ತಿ: -document_properties_page_count=ಪುಟದ ಎಣಿಕೆ: -document_properties_page_size_unit_inches=ಇದರಲ್ಲಿ -document_properties_page_size_orientation_portrait=ಭಾವಚಿತ್ರ -document_properties_page_size_orientation_landscape=ಪ್ರಕೃತಿ ಚಿತ್ರ -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_close=ಮುಚ್ಚು - -print_progress_message=ಮುದ್ರಿಸುವುದಕ್ಕಾಗಿ ದಸ್ತಾವೇಜನ್ನು ಸಿದ್ಧಗೊಳಿಸಲಾಗುತ್ತಿದೆ… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=ರದ್ದು ಮಾಡು - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=ಬದಿಪಟ್ಟಿಯನ್ನು ಹೊರಳಿಸು -toggle_sidebar_label=ಬದಿಪಟ್ಟಿಯನ್ನು ಹೊರಳಿಸು -document_outline_label=ದಸ್ತಾವೇಜಿನ ಹೊರರೇಖೆ -attachments.title=ಲಗತ್ತುಗಳನ್ನು ತೋರಿಸು -attachments_label=ಲಗತ್ತುಗಳು -thumbs.title=ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು -thumbs_label=ಚಿಕ್ಕಚಿತ್ರಗಳು -findbar.title=ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು -findbar_label=ಹುಡುಕು - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=ಪುಟ {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=ಪುಟವನ್ನು ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು {{page}} - -# Find panel button title and messages -find_input.title=ಹುಡುಕು -find_input.placeholder=ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು… -find_previous.title=ವಾಕ್ಯದ ಹಿಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು -find_previous_label=ಹಿಂದಿನ -find_next.title=ವಾಕ್ಯದ ಮುಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು -find_next_label=ಮುಂದಿನ -find_highlight=ಎಲ್ಲವನ್ನು ಹೈಲೈಟ್ ಮಾಡು -find_match_case_label=ಕೇಸನ್ನು ಹೊಂದಿಸು -find_reached_top=ದಸ್ತಾವೇಜಿನ ಮೇಲ್ಭಾಗವನ್ನು ತಲುಪಿದೆ, ಕೆಳಗಿನಿಂದ ಆರಂಭಿಸು -find_reached_bottom=ದಸ್ತಾವೇಜಿನ ಕೊನೆಯನ್ನು ತಲುಪಿದೆ, ಮೇಲಿನಿಂದ ಆರಂಭಿಸು -find_not_found=ವಾಕ್ಯವು ಕಂಡು ಬಂದಿಲ್ಲ - -# Predefined zoom values -page_scale_width=ಪುಟದ ಅಗಲ -page_scale_fit=ಪುಟದ ಸರಿಹೊಂದಿಕೆ -page_scale_auto=ಸ್ವಯಂಚಾಲಿತ ಗಾತ್ರಬದಲಾವಣೆ -page_scale_actual=ನಿಜವಾದ ಗಾತ್ರ -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=PDF ಅನ್ನು ಲೋಡ್ ಮಾಡುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ. -invalid_file_error=ಅಮಾನ್ಯವಾದ ಅಥವ ಹಾಳಾದ PDF ಕಡತ. -missing_file_error=PDF ಕಡತ ಇಲ್ಲ. -unexpected_response_error=ಅನಿರೀಕ್ಷಿತವಾದ ಪೂರೈಕೆಗಣಕದ ಪ್ರತಿಕ್ರಿಯೆ. - -rendering_error=ಪುಟವನ್ನು ನಿರೂಪಿಸುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} ಟಿಪ್ಪಣಿ] -password_label=PDF ಅನ್ನು ತೆರೆಯಲು ಗುಪ್ತಪದವನ್ನು ನಮೂದಿಸಿ. -password_invalid=ಅಮಾನ್ಯವಾದ ಗುಪ್ತಪದ, ದಯವಿಟ್ಟು ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ. -password_ok=OK -password_cancel=ರದ್ದು ಮಾಡು - -printing_not_supported=ಎಚ್ಚರಿಕೆ: ಈ ಜಾಲವೀಕ್ಷಕದಲ್ಲಿ ಮುದ್ರಣಕ್ಕೆ ಸಂಪೂರ್ಣ ಬೆಂಬಲವಿಲ್ಲ. -printing_not_ready=ಎಚ್ಚರಿಕೆ: PDF ಕಡತವು ಮುದ್ರಿಸಲು ಸಂಪೂರ್ಣವಾಗಿ ಲೋಡ್ ಆಗಿಲ್ಲ. -web_fonts_disabled=ಜಾಲ ಅಕ್ಷರಶೈಲಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ: ಅಡಕಗೊಳಿಸಿದ PDF ಅಕ್ಷರಶೈಲಿಗಳನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ. - diff --git a/static/pdf.js/locale/ko/viewer.ftl b/static/pdf.js/locale/ko/viewer.ftl new file mode 100644 index 00000000..2afce144 --- /dev/null +++ b/static/pdf.js/locale/ko/viewer.ftl @@ -0,0 +1,394 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = 프레젠테이션 모드로 전환 +pdfjs-presentation-mode-button-label = 프레젠테이션 모드 +pdfjs-open-file-button = + .title = 파일 열기 +pdfjs-open-file-button-label = 열기 +pdfjs-print-button = + .title = 인쇄 +pdfjs-print-button-label = 인쇄 +pdfjs-save-button = + .title = 저장 +pdfjs-save-button-label = 저장 +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = 다운로드 +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = 다운로드 +pdfjs-bookmark-button = + .title = 현재 페이지 (현재 페이지에서 URL 보기) +pdfjs-bookmark-button-label = 현재 페이지 +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = 앱에서 열기 +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-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 = 래핑 스크롤 +pdfjs-spread-none-button = + .title = 한 페이지 보기 +pdfjs-spread-none-button-label = 펼침 없음 +pdfjs-spread-odd-button = + .title = 홀수 페이지로 시작하는 두 페이지 보기 +pdfjs-spread-odd-button-label = 홀수 펼침 +pdfjs-spread-even-button = + .title = 짝수 페이지로 시작하는 두 페이지 보기 +pdfjs-spread-even-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 = 파일 크기: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b }바이트) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b }바이트) +pdfjs-document-properties-title = 제목: +pdfjs-document-properties-author = 작성자: +pdfjs-document-properties-subject = 주제: +pdfjs-document-properties-keywords = 키워드: +pdfjs-document-properties-creation-date = 작성 날짜: +pdfjs-document-properties-modification-date = 수정 날짜: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = 세로 방향 +pdfjs-document-properties-page-size-orientation-landscape = 가로 방향 +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = 레터 +pdfjs-document-properties-page-size-name-legal = 리걸 + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = 빠른 웹 보기: +pdfjs-document-properties-linearized-yes = 예 +pdfjs-document-properties-linearized-no = 아니요 +pdfjs-document-properties-close-button = 닫기 + +## Print + +pdfjs-print-progress-message = 인쇄 문서 준비 중… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = 취소 +pdfjs-printing-not-supported = 경고: 이 브라우저는 인쇄를 완전히 지원하지 않습니다. +pdfjs-printing-not-ready = 경고: 이 PDF를 인쇄를 할 수 있을 정도로 읽어들이지 못했습니다. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = 사이드바 표시/숨기기 +pdfjs-toggle-sidebar-notification-button = + .title = 사이드바 표시/숨기기 (문서에 아웃라인/첨부파일/레이어 포함됨) +pdfjs-toggle-sidebar-button-label = 사이드바 표시/숨기기 +pdfjs-document-outline-button = + .title = 문서 아웃라인 보기 (더블 클릭해서 모든 항목 펼치기/접기) +pdfjs-document-outline-button-label = 문서 아웃라인 +pdfjs-attachments-button = + .title = 첨부파일 보기 +pdfjs-attachments-button-label = 첨부파일 +pdfjs-layers-button = + .title = 레이어 보기 (더블 클릭해서 모든 레이어를 기본 상태로 재설정) +pdfjs-layers-button-label = 레이어 +pdfjs-thumbs-button = + .title = 미리보기 +pdfjs-thumbs-button-label = 미리보기 +pdfjs-current-outline-item-button = + .title = 현재 아웃라인 항목 찾기 +pdfjs-current-outline-item-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 } 페이지 +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = { $page } 페이지 미리보기 + +## Find panel button title and messages + +pdfjs-find-input = + .title = 찾기 + .placeholder = 문서에서 찾기… +pdfjs-find-previous-button = + .title = 지정 문자열에 일치하는 1개 부분을 검색 +pdfjs-find-previous-button-label = 이전 +pdfjs-find-next-button = + .title = 지정 문자열에 일치하는 다음 부분을 검색 +pdfjs-find-next-button-label = 다음 +pdfjs-find-highlight-checkbox = 모두 강조 표시 +pdfjs-find-match-case-checkbox-label = 대/소문자 구분 +pdfjs-find-match-diacritics-checkbox-label = 분음 부호 일치 +pdfjs-find-entire-word-checkbox-label = 단어 단위로 +pdfjs-find-reached-top = 문서 처음까지 검색하고 끝으로 돌아와 검색했습니다. +pdfjs-find-reached-bottom = 문서 끝까지 검색하고 앞으로 돌아와 검색했습니다. +# 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 = { $current } / { $total } 일치 +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = { $limit }개 이상 일치 +pdfjs-find-not-found = 검색 결과 없음 + +## 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 } 페이지 + +## Loading indicator messages + +pdfjs-loading-error = PDF를 로드하는 동안 오류가 발생했습니다. +pdfjs-invalid-file-error = 잘못되었거나 손상된 PDF 파일. +pdfjs-missing-file-error = PDF 파일 없음. +pdfjs-unexpected-response-error = 예기치 않은 서버 응답입니다. +pdfjs-rendering-error = 페이지를 렌더링하는 동안 오류가 발생했습니다. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date } { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } 주석] + +## Password + +pdfjs-password-label = 이 PDF 파일을 열 수 있는 비밀번호를 입력하세요. +pdfjs-password-invalid = 잘못된 비밀번호입니다. 다시 시도하세요. +pdfjs-password-ok-button = 확인 +pdfjs-password-cancel-button = 취소 +pdfjs-web-fonts-disabled = 웹 폰트가 비활성화됨: 내장된 PDF 글꼴을 사용할 수 없습니다. + +## Editing + +pdfjs-editor-free-text-button = + .title = 텍스트 +pdfjs-editor-free-text-button-label = 텍스트 +pdfjs-editor-ink-button = + .title = 그리기 +pdfjs-editor-ink-button-label = 그리기 +pdfjs-editor-stamp-button = + .title = 이미지 추가 또는 편집 +pdfjs-editor-stamp-button-label = 이미지 추가 또는 편집 +pdfjs-editor-highlight-button = + .title = 강조 표시 +pdfjs-editor-highlight-button-label = 강조 표시 +pdfjs-highlight-floating-button = + .title = 강조 표시 +pdfjs-highlight-floating-button1 = + .title = 강조 표시 + .aria-label = 강조 표시 +pdfjs-highlight-floating-button-label = 강조 표시 + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = 그리기 제거 +pdfjs-editor-remove-freetext-button = + .title = 텍스트 제거 +pdfjs-editor-remove-stamp-button = + .title = 이미지 제거 +pdfjs-editor-remove-highlight-button = + .title = 강조 표시 제거 + +## + +# 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 = 불투명도 +pdfjs-editor-stamp-add-image-button = + .title = 이미지 추가 +pdfjs-editor-stamp-add-image-button-label = 이미지 추가 +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = 두께 +pdfjs-editor-free-highlight-thickness-title = + .title = 텍스트 이외의 항목을 강조 표시할 때 두께 변경 +pdfjs-free-text = + .aria-label = 텍스트 편집기 +pdfjs-free-text-default-content = 입력하세요… +pdfjs-ink = + .aria-label = 그리기 편집기 +pdfjs-ink-canvas = + .aria-label = 사용자 생성 이미지 + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = 대체 텍스트 +pdfjs-editor-alt-text-edit-button-label = 대체 텍스트 편집 +pdfjs-editor-alt-text-dialog-label = 옵션을 선택하세요 +pdfjs-editor-alt-text-dialog-description = 대체 텍스트는 사람들이 이미지를 볼 수 없거나 이미지가 로드되지 않을 때 도움이 됩니다. +pdfjs-editor-alt-text-add-description-label = 설명 추가 +pdfjs-editor-alt-text-add-description-description = 주제, 설정, 동작을 설명하는 1~2개의 문장을 목표로 하세요. +pdfjs-editor-alt-text-mark-decorative-label = 장식용으로 표시 +pdfjs-editor-alt-text-mark-decorative-description = 테두리나 워터마크와 같은 장식적인 이미지에 사용됩니다. +pdfjs-editor-alt-text-cancel-button = 취소 +pdfjs-editor-alt-text-save-button = 저장 +pdfjs-editor-alt-text-decorative-tooltip = 장식용으로 표시됨 +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = 예를 들어, “한 청년이 식탁에 앉아 식사를 하고 있습니다.” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = 왼쪽 위 — 크기 조정 +pdfjs-editor-resizer-label-top-middle = 가운데 위 - 크기 조정 +pdfjs-editor-resizer-label-top-right = 오른쪽 위 — 크기 조정 +pdfjs-editor-resizer-label-middle-right = 오른쪽 가운데 — 크기 조정 +pdfjs-editor-resizer-label-bottom-right = 오른쪽 아래 - 크기 조정 +pdfjs-editor-resizer-label-bottom-middle = 가운데 아래 — 크기 조정 +pdfjs-editor-resizer-label-bottom-left = 왼쪽 아래 - 크기 조정 +pdfjs-editor-resizer-label-middle-left = 왼쪽 가운데 — 크기 조정 + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = 색상 +pdfjs-editor-colorpicker-button = + .title = 색상 변경 +pdfjs-editor-colorpicker-dropdown = + .aria-label = 색상 선택 +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 = 모두 보기 diff --git a/static/pdf.js/locale/ko/viewer.properties b/static/pdf.js/locale/ko/viewer.properties deleted file mode 100644 index da4b0239..00000000 --- a/static/pdf.js/locale/ko/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=이전 페이지 -previous_label=이전 -next.title=다음 페이지 -next_label=다음 - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=페이지 -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=/ {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} / {{pagesCount}}) - -zoom_out.title=축소 -zoom_out_label=축소 -zoom_in.title=확대 -zoom_in_label=확대 -zoom.title=확대/축소 -presentation_mode.title=프레젠테이션 모드로 전환 -presentation_mode_label=프레젠테이션 모드 -open_file.title=파일 열기 -open_file_label=열기 -print.title=인쇄 -print_label=인쇄 -save.title=저장 -save_label=저장 -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=다운로드 -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=다운로드 -bookmark1.title=현재 페이지 (현재 페이지에서 URL 보기) -bookmark1_label=현재 페이지 -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=앱에서 열기 -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=앱에서 열기 - -# Secondary toolbar and context menu -tools.title=도구 -tools_label=도구 -first_page.title=첫 페이지로 이동 -first_page_label=첫 페이지로 이동 -last_page.title=마지막 페이지로 이동 -last_page_label=마지막 페이지로 이동 -page_rotate_cw.title=시계방향으로 회전 -page_rotate_cw_label=시계방향으로 회전 -page_rotate_ccw.title=시계 반대방향으로 회전 -page_rotate_ccw_label=시계 반대방향으로 회전 - -cursor_text_select_tool.title=텍스트 선택 도구 활성화 -cursor_text_select_tool_label=텍스트 선택 도구 -cursor_hand_tool.title=손 도구 활성화 -cursor_hand_tool_label=손 도구 - -scroll_page.title=페이지 스크롤 사용 -scroll_page_label=페이지 스크롤 -scroll_vertical.title=세로 스크롤 사용 -scroll_vertical_label=세로 스크롤 -scroll_horizontal.title=가로 스크롤 사용 -scroll_horizontal_label=가로 스크롤 -scroll_wrapped.title=래핑(자동 줄 바꿈) 스크롤 사용 -scroll_wrapped_label=래핑 스크롤 - -spread_none.title=한 페이지 보기 -spread_none_label=펼침 없음 -spread_odd.title=홀수 페이지로 시작하는 두 페이지 보기 -spread_odd_label=홀수 펼침 -spread_even.title=짝수 페이지로 시작하는 두 페이지 보기 -spread_even_label=짝수 펼침 - -# Document properties dialog box -document_properties.title=문서 속성… -document_properties_label=문서 속성… -document_properties_file_name=파일 이름: -document_properties_file_size=파일 크기: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}}바이트) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}}바이트) -document_properties_title=제목: -document_properties_author=작성자: -document_properties_subject=주제: -document_properties_keywords=키워드: -document_properties_creation_date=작성 날짜: -document_properties_modification_date=수정 날짜: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=작성 프로그램: -document_properties_producer=PDF 변환 소프트웨어: -document_properties_version=PDF 버전: -document_properties_page_count=페이지 수: -document_properties_page_size=페이지 크기: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=세로 방향 -document_properties_page_size_orientation_landscape=가로 방향 -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=레터 -document_properties_page_size_name_legal=리걸 -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=빠른 웹 보기: -document_properties_linearized_yes=예 -document_properties_linearized_no=아니요 -document_properties_close=닫기 - -print_progress_message=인쇄 문서 준비 중… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=취소 - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=사이드바 표시/숨기기 -toggle_sidebar_notification2.title=사이드바 표시/숨기기 (문서에 아웃라인/첨부파일/레이어 포함됨) -toggle_sidebar_label=사이드바 표시/숨기기 -document_outline.title=문서 아웃라인 보기 (더블 클릭해서 모든 항목 펼치기/접기) -document_outline_label=문서 아웃라인 -attachments.title=첨부파일 보기 -attachments_label=첨부파일 -layers.title=레이어 보기 (더블 클릭해서 모든 레이어를 기본 상태로 재설정) -layers_label=레이어 -thumbs.title=미리보기 -thumbs_label=미리보기 -current_outline_item.title=현재 아웃라인 항목 찾기 -current_outline_item_label=현재 아웃라인 항목 -findbar.title=검색 -findbar_label=검색 - -additional_layers=추가 레이어 -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark={{page}} 페이지 -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title={{page}} 페이지 -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas={{page}} 페이지 미리보기 - -# Find panel button title and messages -find_input.title=찾기 -find_input.placeholder=문서에서 찾기… -find_previous.title=지정 문자열에 일치하는 1개 부분을 검색 -find_previous_label=이전 -find_next.title=지정 문자열에 일치하는 다음 부분을 검색 -find_next_label=다음 -find_highlight=모두 강조 표시 -find_match_case_label=대/소문자 구분 -find_match_diacritics_label=분음 부호 일치 -find_entire_word_label=단어 단위로 -find_reached_top=문서 처음까지 검색하고 끝으로 돌아와 검색했습니다. -find_reached_bottom=문서 끝까지 검색하고 앞으로 돌아와 검색했습니다. -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{total}} 중 {{current}} 일치 -find_match_count[two]={{total}} 중 {{current}} 일치 -find_match_count[few]={{total}} 중 {{current}} 일치 -find_match_count[many]={{total}} 중 {{current}} 일치 -find_match_count[other]={{total}} 중 {{current}} 일치 -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]={{limit}} 이상 일치 -find_match_count_limit[one]={{limit}} 이상 일치 -find_match_count_limit[two]={{limit}} 이상 일치 -find_match_count_limit[few]={{limit}} 이상 일치 -find_match_count_limit[many]={{limit}} 이상 일치 -find_match_count_limit[other]={{limit}} 이상 일치 -find_not_found=검색 결과 없음 - -# Predefined zoom values -page_scale_width=페이지 너비에 맞추기 -page_scale_fit=페이지에 맞추기 -page_scale_auto=자동 -page_scale_actual=실제 크기 -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=PDF를 로드하는 동안 오류가 발생했습니다. -invalid_file_error=잘못되었거나 손상된 PDF 파일. -missing_file_error=PDF 파일 없음. -unexpected_response_error=예기치 않은 서버 응답입니다. -rendering_error=페이지를 렌더링하는 동안 오류가 발생했습니다. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}} {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} 주석] -password_label=이 PDF 파일을 열 수 있는 비밀번호를 입력하세요. -password_invalid=잘못된 비밀번호입니다. 다시 시도하세요. -password_ok=확인 -password_cancel=취소 - -printing_not_supported=경고: 이 브라우저는 인쇄를 완전히 지원하지 않습니다. -printing_not_ready=경고: 이 PDF를 인쇄를 할 수 있을 정도로 읽어들이지 못했습니다. -web_fonts_disabled=웹 폰트가 비활성화됨: 내장된 PDF 글꼴을 사용할 수 없습니다. - -# Editor -editor_free_text2.title=텍스트 -editor_free_text2_label=텍스트 -editor_ink2.title=그리기 -editor_ink2_label=그리기 - -editor_stamp1.title=이미지 추가 또는 편집 -editor_stamp1_label=이미지 추가 또는 편집 - -free_text2_default_content=입력하세요… - -# Editor Parameters -editor_free_text_color=색상 -editor_free_text_size=크기 -editor_ink_color=색상 -editor_ink_thickness=두께 -editor_ink_opacity=불투명도 - -editor_stamp_add_image_label=이미지 추가 -editor_stamp_add_image.title=이미지 추가 - -# Editor aria -editor_free_text2_aria_label=텍스트 편집기 -editor_ink2_aria_label=그리기 편집기 -editor_ink_canvas_aria_label=사용자 생성 이미지 - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=대체 텍스트 -editor_alt_text_edit_button_label=대체 텍스트 편집 -editor_alt_text_dialog_label=옵션을 선택하세요 -editor_alt_text_dialog_description=대체 텍스트는 사람들이 이미지를 볼 수 없거나 이미지가 로드되지 않을 때 도움이 됩니다. -editor_alt_text_add_description_label=설명 추가 -editor_alt_text_add_description_description=주제, 설정, 동작을 설명하는 1~2개의 문장을 목표로 하세요. -editor_alt_text_mark_decorative_label=장식용으로 표시 -editor_alt_text_mark_decorative_description=테두리나 워터마크와 같은 장식적인 이미지에 사용됩니다. -editor_alt_text_cancel_button=취소 -editor_alt_text_save_button=저장 -editor_alt_text_decorative_tooltip=장식용으로 표시됨 -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=예를 들어, “한 청년이 식탁에 앉아 식사를 하고 있습니다.” diff --git a/static/pdf.js/locale/lij/viewer.ftl b/static/pdf.js/locale/lij/viewer.ftl new file mode 100644 index 00000000..b2941f9f --- /dev/null +++ b/static/pdf.js/locale/lij/viewer.ftl @@ -0,0 +1,247 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Pagina primma +pdfjs-previous-button-label = Precedente +pdfjs-next-button = + .title = Pagina dòppo +pdfjs-next-button-label = Pròscima +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Pagina +# 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 = de { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount }) +pdfjs-zoom-out-button = + .title = Diminoisci zoom +pdfjs-zoom-out-button-label = Diminoisci zoom +pdfjs-zoom-in-button = + .title = Aomenta zoom +pdfjs-zoom-in-button-label = Aomenta zoom +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Vanni into mòddo de prezentaçion +pdfjs-presentation-mode-button-label = Mòddo de prezentaçion +pdfjs-open-file-button = + .title = Arvi file +pdfjs-open-file-button-label = Arvi +pdfjs-print-button = + .title = Stanpa +pdfjs-print-button-label = Stanpa + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Atressi +pdfjs-tools-button-label = Atressi +pdfjs-first-page-button = + .title = Vanni a-a primma pagina +pdfjs-first-page-button-label = Vanni a-a primma pagina +pdfjs-last-page-button = + .title = Vanni a l'urtima pagina +pdfjs-last-page-button-label = Vanni a l'urtima pagina +pdfjs-page-rotate-cw-button = + .title = Gia into verso oraio +pdfjs-page-rotate-cw-button-label = Gia into verso oraio +pdfjs-page-rotate-ccw-button = + .title = Gia into verso antioraio +pdfjs-page-rotate-ccw-button-label = Gia into verso antioraio +pdfjs-cursor-text-select-tool-button = + .title = Abilita strumento de seleçion do testo +pdfjs-cursor-text-select-tool-button-label = Strumento de seleçion do testo +pdfjs-cursor-hand-tool-button = + .title = Abilita strumento man +pdfjs-cursor-hand-tool-button-label = Strumento man +pdfjs-scroll-vertical-button = + .title = Deuvia rebelamento verticale +pdfjs-scroll-vertical-button-label = Rebelamento verticale +pdfjs-scroll-horizontal-button = + .title = Deuvia rebelamento orizontâ +pdfjs-scroll-horizontal-button-label = Rebelamento orizontâ +pdfjs-scroll-wrapped-button = + .title = Deuvia rebelamento incapsolou +pdfjs-scroll-wrapped-button-label = Rebelamento incapsolou +pdfjs-spread-none-button = + .title = No unite a-a difuxon de pagina +pdfjs-spread-none-button-label = No difuxon +pdfjs-spread-odd-button = + .title = Uniscite a-a difuxon de pagina co-o numero dèspa +pdfjs-spread-odd-button-label = Difuxon dèspa +pdfjs-spread-even-button = + .title = Uniscite a-a difuxon de pagina co-o numero pari +pdfjs-spread-even-button-label = Difuxon pari + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Propietæ do documento… +pdfjs-document-properties-button-label = Propietæ do documento… +pdfjs-document-properties-file-name = Nomme schedaio: +pdfjs-document-properties-file-size = Dimenscion schedaio: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } kB ({ $size_b } byte) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } byte) +pdfjs-document-properties-title = Titolo: +pdfjs-document-properties-author = Aoto: +pdfjs-document-properties-subject = Ogetto: +pdfjs-document-properties-keywords = Paròlle ciave: +pdfjs-document-properties-creation-date = Dæta creaçion: +pdfjs-document-properties-modification-date = Dæta cangiamento: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Aotô originale: +pdfjs-document-properties-producer = Produtô PDF: +pdfjs-document-properties-version = Verscion PDF: +pdfjs-document-properties-page-count = Contezzo pagine: +pdfjs-document-properties-page-size = Dimenscion da pagina: +pdfjs-document-properties-page-size-unit-inches = dii gròsci +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = drito +pdfjs-document-properties-page-size-orientation-landscape = desteizo +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 = Letia +pdfjs-document-properties-page-size-name-legal = Lezze + +## 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 = Vista veloce do Web: +pdfjs-document-properties-linearized-yes = Sci +pdfjs-document-properties-linearized-no = No +pdfjs-document-properties-close-button = Særa + +## Print + +pdfjs-print-progress-message = Praparo o documento pe-a stanpa… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Anulla +pdfjs-printing-not-supported = Atençion: a stanpa a no l'é conpletamente soportâ da sto navegatô. +pdfjs-printing-not-ready = Atençion: o PDF o no l'é ancon caregou conpletamente pe-a stanpa. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Ativa/dizativa bara de scianco +pdfjs-toggle-sidebar-button-label = Ativa/dizativa bara de scianco +pdfjs-document-outline-button = + .title = Fanni vedde o contorno do documento (scicca doggio pe espande/ridue tutti i elementi) +pdfjs-document-outline-button-label = Contorno do documento +pdfjs-attachments-button = + .title = Fanni vedde alegæ +pdfjs-attachments-button-label = Alegæ +pdfjs-thumbs-button = + .title = Mostra miniatue +pdfjs-thumbs-button-label = Miniatue +pdfjs-findbar-button = + .title = Treuva into documento +pdfjs-findbar-button-label = Treuva + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Pagina { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatua da pagina { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Treuva + .placeholder = Treuva into documento… +pdfjs-find-previous-button = + .title = Treuva a ripetiçion precedente do testo da çercâ +pdfjs-find-previous-button-label = Precedente +pdfjs-find-next-button = + .title = Treuva a ripetiçion dòppo do testo da çercâ +pdfjs-find-next-button-label = Segoente +pdfjs-find-highlight-checkbox = Evidençia +pdfjs-find-match-case-checkbox-label = Maioscole/minoscole +pdfjs-find-entire-word-checkbox-label = Poula intrega +pdfjs-find-reached-top = Razonto a fin da pagina, continoa da l'iniçio +pdfjs-find-reached-bottom = Razonto l'iniçio da pagina, continoa da-a fin +pdfjs-find-not-found = Testo no trovou + +## Predefined zoom values + +pdfjs-page-scale-width = Larghessa pagina +pdfjs-page-scale-fit = Adatta a una pagina +pdfjs-page-scale-auto = Zoom aotomatico +pdfjs-page-scale-actual = Dimenscioin efetive +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = S'é verificou 'n'erô itno caregamento do PDF. +pdfjs-invalid-file-error = O schedaio PDF o l'é no valido ò aroinou. +pdfjs-missing-file-error = O schedaio PDF o no gh'é. +pdfjs-unexpected-response-error = Risposta inprevista do-u server +pdfjs-rendering-error = Gh'é stæto 'n'erô itno rendering da pagina. + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Anotaçion: { $type }] + +## Password + +pdfjs-password-label = Dimme a paròlla segreta pe arvî sto schedaio PDF. +pdfjs-password-invalid = Paròlla segreta sbalia. Preuva torna. +pdfjs-password-ok-button = Va ben +pdfjs-password-cancel-button = Anulla +pdfjs-web-fonts-disabled = I font do web en dizativæ: inposcibile adeuviâ i carateri do PDF. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/lij/viewer.properties b/static/pdf.js/locale/lij/viewer.properties deleted file mode 100644 index 754a3938..00000000 --- a/static/pdf.js/locale/lij/viewer.properties +++ /dev/null @@ -1,214 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Pagina primma -previous_label=Precedente -next.title=Pagina dòppo -next_label=Pròscima - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Pagina -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=de {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} de {{pagesCount}}) - -zoom_out.title=Diminoisci zoom -zoom_out_label=Diminoisci zoom -zoom_in.title=Aomenta zoom -zoom_in_label=Aomenta zoom -zoom.title=Zoom -presentation_mode.title=Vanni into mòddo de prezentaçion -presentation_mode_label=Mòddo de prezentaçion -open_file.title=Arvi file -open_file_label=Arvi -print.title=Stanpa -print_label=Stanpa - -# Secondary toolbar and context menu -tools.title=Atressi -tools_label=Atressi -first_page.title=Vanni a-a primma pagina -first_page_label=Vanni a-a primma pagina -last_page.title=Vanni a l'urtima pagina -last_page_label=Vanni a l'urtima pagina -page_rotate_cw.title=Gia into verso oraio -page_rotate_cw_label=Gia into verso oraio -page_rotate_ccw.title=Gia into verso antioraio -page_rotate_ccw_label=Gia into verso antioraio - -cursor_text_select_tool.title=Abilita strumento de seleçion do testo -cursor_text_select_tool_label=Strumento de seleçion do testo -cursor_hand_tool.title=Abilita strumento man -cursor_hand_tool_label=Strumento man - -scroll_vertical.title=Deuvia rebelamento verticale -scroll_vertical_label=Rebelamento verticale -scroll_horizontal.title=Deuvia rebelamento orizontâ -scroll_horizontal_label=Rebelamento orizontâ -scroll_wrapped.title=Deuvia rebelamento incapsolou -scroll_wrapped_label=Rebelamento incapsolou - -spread_none.title=No unite a-a difuxon de pagina -spread_none_label=No difuxon -spread_odd.title=Uniscite a-a difuxon de pagina co-o numero dèspa -spread_odd_label=Difuxon dèspa -spread_even.title=Uniscite a-a difuxon de pagina co-o numero pari -spread_even_label=Difuxon pari - -# Document properties dialog box -document_properties.title=Propietæ do documento… -document_properties_label=Propietæ do documento… -document_properties_file_name=Nomme schedaio: -document_properties_file_size=Dimenscion schedaio: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} kB ({{size_b}} byte) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} byte) -document_properties_title=Titolo: -document_properties_author=Aoto: -document_properties_subject=Ogetto: -document_properties_keywords=Paròlle ciave: -document_properties_creation_date=Dæta creaçion: -document_properties_modification_date=Dæta cangiamento: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Aotô originale: -document_properties_producer=Produtô PDF: -document_properties_version=Verscion PDF: -document_properties_page_count=Contezzo pagine: -document_properties_page_size=Dimenscion da pagina: -document_properties_page_size_unit_inches=dii gròsci -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=drito -document_properties_page_size_orientation_landscape=desteizo -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letia -document_properties_page_size_name_legal=Lezze -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Vista veloce do Web: -document_properties_linearized_yes=Sci -document_properties_linearized_no=No -document_properties_close=Særa - -print_progress_message=Praparo o documento pe-a stanpa… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Anulla - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Ativa/dizativa bara de scianco -toggle_sidebar_label=Ativa/dizativa bara de scianco -document_outline.title=Fanni vedde o contorno do documento (scicca doggio pe espande/ridue tutti i elementi) -document_outline_label=Contorno do documento -attachments.title=Fanni vedde alegæ -attachments_label=Alegæ -thumbs.title=Mostra miniatue -thumbs_label=Miniatue -findbar.title=Treuva into documento -findbar_label=Treuva - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Pagina {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatua da pagina {{page}} - -# Find panel button title and messages -find_input.title=Treuva -find_input.placeholder=Treuva into documento… -find_previous.title=Treuva a ripetiçion precedente do testo da çercâ -find_previous_label=Precedente -find_next.title=Treuva a ripetiçion dòppo do testo da çercâ -find_next_label=Segoente -find_highlight=Evidençia -find_match_case_label=Maioscole/minoscole -find_entire_word_label=Poula intrega -find_reached_top=Razonto a fin da pagina, continoa da l'iniçio -find_reached_bottom=Razonto l'iniçio da pagina, continoa da-a fin -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} de {{total}} corispondensa -find_match_count[two]={{current}} de {{total}} corispondense -find_match_count[few]={{current}} de {{total}} corispondense -find_match_count[many]={{current}} de {{total}} corispondense -find_match_count[other]={{current}} de {{total}} corispondense -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Ciù de {{limit}} corispondense -find_match_count_limit[one]=Ciù de {{limit}} corispondensa -find_match_count_limit[two]=Ciù de {{limit}} corispondense -find_match_count_limit[few]=Ciù de {{limit}} corispondense -find_match_count_limit[many]=Ciù de {{limit}} corispondense -find_match_count_limit[other]=Ciù de {{limit}} corispondense -find_not_found=Testo no trovou - -# Predefined zoom values -page_scale_width=Larghessa pagina -page_scale_fit=Adatta a una pagina -page_scale_auto=Zoom aotomatico -page_scale_actual=Dimenscioin efetive -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=S'é verificou 'n'erô itno caregamento do PDF. -invalid_file_error=O schedaio PDF o l'é no valido ò aroinou. -missing_file_error=O schedaio PDF o no gh'é. -unexpected_response_error=Risposta inprevista do-u server - -rendering_error=Gh'é stæto 'n'erô itno rendering da pagina. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Anotaçion: {{type}}] -password_label=Dimme a paròlla segreta pe arvî sto schedaio PDF. -password_invalid=Paròlla segreta sbalia. Preuva torna. -password_ok=Va ben -password_cancel=Anulla - -printing_not_supported=Atençion: a stanpa a no l'é conpletamente soportâ da sto navegatô. -printing_not_ready=Atençion: o PDF o no l'é ancon caregou conpletamente pe-a stanpa. -web_fonts_disabled=I font do web en dizativæ: inposcibile adeuviâ i carateri do PDF. - diff --git a/static/pdf.js/locale/lo/viewer.ftl b/static/pdf.js/locale/lo/viewer.ftl new file mode 100644 index 00000000..fdad16ad --- /dev/null +++ b/static/pdf.js/locale/lo/viewer.ftl @@ -0,0 +1,299 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = ສັບປ່ຽນເປັນໂຫມດການນຳສະເຫນີ +pdfjs-presentation-mode-button-label = ໂຫມດການນຳສະເຫນີ +pdfjs-open-file-button = + .title = ເປີດໄຟລ໌ +pdfjs-open-file-button-label = ເປີດ +pdfjs-print-button = + .title = ພິມ +pdfjs-print-button-label = ພິມ +pdfjs-save-button = + .title = ບັນທຶກ +pdfjs-save-button-label = ບັນທຶກ +pdfjs-bookmark-button = + .title = ໜ້າປັດຈຸບັນ (ເບິ່ງ URL ຈາກໜ້າປັດຈຸບັນ) +pdfjs-bookmark-button-label = ຫນ້າ​ປັດ​ຈຸ​ບັນ +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = ເປີດໃນ App +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = ເປີດໃນ App + +## 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 = ໃຊ້ Wrapped Scrolling +pdfjs-scroll-wrapped-button-label = Wrapped Scrolling +pdfjs-spread-none-button = + .title = ບໍ່ຕ້ອງຮ່ວມການແຜ່ກະຈາຍຫນ້າ +pdfjs-spread-none-button-label = ບໍ່ມີການແຜ່ກະຈາຍ +pdfjs-spread-odd-button = + .title = ເຂົ້າຮ່ວມການແຜ່ກະຈາຍຫນ້າເລີ່ມຕົ້ນດ້ວຍຫນ້າເລກຄີກ +pdfjs-spread-odd-button-label = ການແຜ່ກະຈາຍຄີກ +pdfjs-spread-even-button = + .title = ເຂົ້າຮ່ວມການແຜ່ກະຈາຍຂອງຫນ້າເລີ່ມຕົ້ນດ້ວຍຫນ້າເລກຄູ່ +pdfjs-spread-even-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 = ຂະຫນາດໄຟລ໌: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } ໄບຕ໌) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } ໄບຕ໌) +pdfjs-document-properties-title = ຫົວຂໍ້: +pdfjs-document-properties-author = ຜູ້ຂຽນ: +pdfjs-document-properties-subject = ຫົວຂໍ້: +pdfjs-document-properties-keywords = ຄໍາທີ່ຕ້ອງການຄົ້ນຫາ: +pdfjs-document-properties-creation-date = ວັນທີສ້າງ: +pdfjs-document-properties-modification-date = ວັນທີແກ້ໄຂ: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = ລວງຕັ້ງ +pdfjs-document-properties-page-size-orientation-landscape = ລວງນອນ +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = ຈົດໝາຍ +pdfjs-document-properties-page-size-name-legal = ຂໍ້ກົດຫມາຍ + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = ມຸມມອງເວັບທີ່ໄວ: +pdfjs-document-properties-linearized-yes = ແມ່ນ +pdfjs-document-properties-linearized-no = ບໍ່ +pdfjs-document-properties-close-button = ປິດ + +## Print + +pdfjs-print-progress-message = ກຳລັງກະກຽມເອກະສານສຳລັບການພິມ... +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = ຍົກເລີກ +pdfjs-printing-not-supported = ຄຳເຕືອນ: ບຼາວເຊີນີ້ບໍ່ຮອງຮັບການພິມຢ່າງເຕັມທີ່. +pdfjs-printing-not-ready = ຄໍາ​ເຕືອນ​: PDF ບໍ່​ໄດ້​ຖືກ​ໂຫຼດ​ຢ່າງ​ເຕັມ​ທີ່​ສໍາ​ລັບ​ການ​ພິມ​. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = ເປີດ/ປິດແຖບຂ້າງ +pdfjs-toggle-sidebar-notification-button = + .title = ສະຫຼັບແຖບດ້ານຂ້າງ (ເອກະສານປະກອບມີໂຄງຮ່າງ/ໄຟລ໌ແນບ/ຊັ້ນຂໍ້ມູນ) +pdfjs-toggle-sidebar-button-label = ເປີດ/ປິດແຖບຂ້າງ +pdfjs-document-outline-button = + .title = ສະ​ແດງ​ໂຄງ​ຮ່າງ​ເອ​ກະ​ສານ (ກົດ​ສອງ​ຄັ້ງ​ເພື່ອ​ຂະ​ຫຍາຍ / ຫຍໍ້​ລາຍ​ການ​ທັງ​ຫມົດ​) +pdfjs-document-outline-button-label = ເຄົ້າຮ່າງເອກະສານ +pdfjs-attachments-button = + .title = ສະແດງໄຟລ໌ແນບ +pdfjs-attachments-button-label = ໄຟລ໌ແນບ +pdfjs-layers-button = + .title = ສະແດງຊັ້ນຂໍ້ມູນ (ຄລິກສອງເທື່ອເພື່ອຣີເຊັດຊັ້ນຂໍ້ມູນທັງໝົດໃຫ້ເປັນສະຖານະເລີ່ມຕົ້ນ) +pdfjs-layers-button-label = ຊັ້ນ +pdfjs-thumbs-button = + .title = ສະແດງຮູບຫຍໍ້ +pdfjs-thumbs-button-label = ຮູບຕົວຢ່າງ +pdfjs-current-outline-item-button = + .title = ຊອກຫາລາຍການໂຄງຮ່າງປະຈຸບັນ +pdfjs-current-outline-item-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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = ຮູບຕົວຢ່າງຂອງໜ້າ { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = ຄົ້ນຫາ + .placeholder = ຊອກຫາໃນເອກະສານ... +pdfjs-find-previous-button = + .title = ຊອກຫາການປະກົດຕົວທີ່ຜ່ານມາຂອງປະໂຫຍກ +pdfjs-find-previous-button-label = ກ່ອນຫນ້ານີ້ +pdfjs-find-next-button = + .title = ຊອກຫາຕຳແຫນ່ງຖັດໄປຂອງວະລີ +pdfjs-find-next-button-label = ຕໍ່ໄປ +pdfjs-find-highlight-checkbox = ໄຮໄລທ໌ທັງຫມົດ +pdfjs-find-match-case-checkbox-label = ກໍລະນີທີ່ກົງກັນ +pdfjs-find-match-diacritics-checkbox-label = ເຄື່ອງໝາຍກຳກັບການອອກສຽງກົງກັນ +pdfjs-find-entire-word-checkbox-label = ກົງກັນທຸກຄຳ +pdfjs-find-reached-top = ມາຮອດເທິງຂອງເອກະສານ, ສືບຕໍ່ຈາກລຸ່ມ +pdfjs-find-reached-bottom = ຮອດຕອນທ້າຍຂອງເອກະສານ, ສືບຕໍ່ຈາກເທິງ +pdfjs-find-not-found = ບໍ່ພົບວະລີທີ່ຕ້ອງການ + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງໂຫລດ PDF. +pdfjs-invalid-file-error = ໄຟລ໌ PDF ບໍ່ຖືກຕ້ອງຫລືເສຍຫາຍ. +pdfjs-missing-file-error = ບໍ່ມີໄຟລ໌ PDF. +pdfjs-unexpected-response-error = ການຕອບສະໜອງຂອງເຊີບເວີທີ່ບໍ່ຄາດຄິດ. +pdfjs-rendering-error = ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງເຣັນເດີຫນ້າ. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } ຄຳບັນຍາຍ] + +## Password + +pdfjs-password-label = ໃສ່ລະຫັດຜ່ານເພື່ອເປີດໄຟລ໌ PDF ນີ້. +pdfjs-password-invalid = ລະຫັດຜ່ານບໍ່ຖືກຕ້ອງ. ກະລຸນາລອງອີກຄັ້ງ. +pdfjs-password-ok-button = ຕົກລົງ +pdfjs-password-cancel-button = ຍົກເລີກ +pdfjs-web-fonts-disabled = ຟອນເວັບຖືກປິດໃຊ້ງານ: ບໍ່ສາມາດໃຊ້ຟອນ PDF ທີ່ຝັງໄວ້ໄດ້. + +## Editing + +pdfjs-editor-free-text-button = + .title = ຂໍ້ຄວາມ +pdfjs-editor-free-text-button-label = ຂໍ້ຄວາມ +pdfjs-editor-ink-button = + .title = ແຕ້ມ +pdfjs-editor-ink-button-label = ແຕ້ມ +# 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 = ຄວາມໂປ່ງໃສ +pdfjs-free-text = + .aria-label = ຕົວແກ້ໄຂຂໍ້ຄວາມ +pdfjs-free-text-default-content = ເລີ່ມພິມ... +pdfjs-ink = + .aria-label = ຕົວແກ້ໄຂຮູບແຕ້ມ +pdfjs-ink-canvas = + .aria-label = ຮູບພາບທີ່ຜູ້ໃຊ້ສ້າງ + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/lo/viewer.properties b/static/pdf.js/locale/lo/viewer.properties deleted file mode 100644 index d0adc709..00000000 --- a/static/pdf.js/locale/lo/viewer.properties +++ /dev/null @@ -1,257 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=ຫນ້າກ່ອນຫນ້າ -previous_label=ກ່ອນຫນ້າ -next.title=ຫນ້າຖັດໄປ -next_label=ຖັດໄປ - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=ຫນ້າ -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=ຈາກ {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} ຈາກ {{pagesCount}}) - -zoom_out.title=ຂະຫຍາຍອອກ -zoom_out_label=ຂະຫຍາຍອອກ -zoom_in.title=ຂະຫຍາຍເຂົ້າ -zoom_in_label=ຂະຫຍາຍເຂົ້າ -zoom.title=ຂະຫຍາຍ -presentation_mode.title=ສັບປ່ຽນເປັນໂຫມດການນຳສະເຫນີ -presentation_mode_label=ໂຫມດການນຳສະເຫນີ -open_file.title=ເປີດໄຟລ໌ -open_file_label=ເປີດ -print.title=ພິມ -print_label=ພິມ - -save.title=ບັນທຶກ -save_label=ບັນທຶກ -bookmark1.title=ໜ້າປັດຈຸບັນ (ເບິ່ງ URL ຈາກໜ້າປັດຈຸບັນ) -bookmark1_label=ຫນ້າ​ປັດ​ຈຸ​ບັນ - -open_in_app.title=ເປີດໃນ App -open_in_app_label=ເປີດໃນ App - -# Secondary toolbar and context menu -tools.title=ເຄື່ອງມື -tools_label=ເຄື່ອງມື -first_page.title=ໄປທີ່ຫນ້າທຳອິດ -first_page_label=ໄປທີ່ຫນ້າທຳອິດ -last_page.title=ໄປທີ່ຫນ້າສຸດທ້າຍ -last_page_label=ໄປທີ່ຫນ້າສຸດທ້າຍ -page_rotate_cw.title=ຫມູນຕາມເຂັມໂມງ -page_rotate_cw_label=ຫມູນຕາມເຂັມໂມງ -page_rotate_ccw.title=ຫມູນທວນເຂັມໂມງ -page_rotate_ccw_label=ຫມູນທວນເຂັມໂມງ - -cursor_text_select_tool.title=ເປີດໃຊ້ເຄື່ອງມືການເລືອກຂໍ້ຄວາມ -cursor_text_select_tool_label=ເຄື່ອງມືເລືອກຂໍ້ຄວາມ -cursor_hand_tool.title=ເປີດໃຊ້ເຄື່ອງມືມື -cursor_hand_tool_label=ເຄື່ອງມືມື - -scroll_page.title=ໃຊ້ການເລື່ອນໜ້າ -scroll_page_label=ເລື່ອນໜ້າ -scroll_vertical.title=ໃຊ້ການເລື່ອນແນວຕັ້ງ -scroll_vertical_label=ເລື່ອນແນວຕັ້ງ -scroll_horizontal.title=ໃຊ້ການເລື່ອນແນວນອນ -scroll_horizontal_label=ເລື່ອນແນວນອນ -scroll_wrapped.title=ໃຊ້ Wrapped Scrolling -scroll_wrapped_label=Wrapped Scrolling - -spread_none.title=ບໍ່ຕ້ອງຮ່ວມການແຜ່ກະຈາຍຫນ້າ -spread_none_label=ບໍ່ມີການແຜ່ກະຈາຍ -spread_odd.title=ເຂົ້າຮ່ວມການແຜ່ກະຈາຍຫນ້າເລີ່ມຕົ້ນດ້ວຍຫນ້າເລກຄີກ -spread_odd_label=ການແຜ່ກະຈາຍຄີກ -spread_even.title=ເຂົ້າຮ່ວມການແຜ່ກະຈາຍຂອງຫນ້າເລີ່ມຕົ້ນດ້ວຍຫນ້າເລກຄູ່ -spread_even_label=ການແຜ່ກະຈາຍຄູ່ - -# Document properties dialog box -document_properties.title=ຄຸນສົມບັດເອກະສານ... -document_properties_label=ຄຸນສົມບັດເອກະສານ... -document_properties_file_name=ຊື່ໄຟລ໌: -document_properties_file_size=ຂະຫນາດໄຟລ໌: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} ໄບຕ໌) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} ໄບຕ໌) -document_properties_title=ຫົວຂໍ້: -document_properties_author=ຜູ້ຂຽນ: -document_properties_subject=ຫົວຂໍ້: -document_properties_keywords=ຄໍາທີ່ຕ້ອງການຄົ້ນຫາ: -document_properties_creation_date=ວັນທີສ້າງ: -document_properties_modification_date=ວັນທີແກ້ໄຂ: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=ຜູ້ສ້າງ: -document_properties_producer=ຜູ້ຜະລິດ PDF: -document_properties_version=ເວີຊັ່ນ PDF: -document_properties_page_count=ຈຳນວນໜ້າ: -document_properties_page_size=ຂະໜາດໜ້າ: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=ລວງຕັ້ງ -document_properties_page_size_orientation_landscape=ລວງນອນ -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=ຈົດໝາຍ -document_properties_page_size_name_legal=ຂໍ້ກົດຫມາຍ -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=ມຸມມອງເວັບທີ່ໄວ: -document_properties_linearized_yes=ແມ່ນ -document_properties_linearized_no=ບໍ່ -document_properties_close=ປິດ - -print_progress_message=ກຳລັງກະກຽມເອກະສານສຳລັບການພິມ... -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=ຍົກເລີກ - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=ເປີດ/ປິດແຖບຂ້າງ -toggle_sidebar_notification2.title=ສະຫຼັບແຖບດ້ານຂ້າງ (ເອກະສານປະກອບມີໂຄງຮ່າງ/ໄຟລ໌ແນບ/ຊັ້ນຂໍ້ມູນ) -toggle_sidebar_label=ເປີດ/ປິດແຖບຂ້າງ -document_outline.title=ສະ​ແດງ​ໂຄງ​ຮ່າງ​ເອ​ກະ​ສານ (ກົດ​ສອງ​ຄັ້ງ​ເພື່ອ​ຂະ​ຫຍາຍ / ຫຍໍ້​ລາຍ​ການ​ທັງ​ຫມົດ​) -document_outline_label=ເຄົ້າຮ່າງເອກະສານ -attachments.title=ສະແດງໄຟລ໌ແນບ -attachments_label=ໄຟລ໌ແນບ -layers.title=ສະແດງຊັ້ນຂໍ້ມູນ (ຄລິກສອງເທື່ອເພື່ອຣີເຊັດຊັ້ນຂໍ້ມູນທັງໝົດໃຫ້ເປັນສະຖານະເລີ່ມຕົ້ນ) -layers_label=ຊັ້ນ -thumbs.title=ສະແດງຮູບຫຍໍ້ -thumbs_label=ຮູບຕົວຢ່າງ -current_outline_item.title=ຊອກຫາລາຍການໂຄງຮ່າງປະຈຸບັນ -current_outline_item_label=ລາຍການໂຄງຮ່າງປະຈຸບັນ -findbar.title=ຊອກຫາໃນເອກະສານ -findbar_label=ຄົ້ນຫາ - -additional_layers=ຊັ້ນຂໍ້ມູນເພີ່ມເຕີມ -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=ໜ້າ {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=ໜ້າ {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=ຮູບຕົວຢ່າງຂອງໜ້າ {{page}} - -# Find panel button title and messages -find_input.title=ຄົ້ນຫາ -find_input.placeholder=ຊອກຫາໃນເອກະສານ... -find_previous.title=ຊອກຫາການປະກົດຕົວທີ່ຜ່ານມາຂອງປະໂຫຍກ -find_previous_label=ກ່ອນຫນ້ານີ້ -find_next.title=ຊອກຫາຕຳແຫນ່ງຖັດໄປຂອງວະລີ -find_next_label=ຕໍ່ໄປ -find_highlight=ໄຮໄລທ໌ທັງຫມົດ -find_match_case_label=ກໍລະນີທີ່ກົງກັນ -find_match_diacritics_label=ເຄື່ອງໝາຍກຳກັບການອອກສຽງກົງກັນ -find_entire_word_label=ກົງກັນທຸກຄຳ -find_reached_top=ມາຮອດເທິງຂອງເອກະສານ, ສືບຕໍ່ຈາກລຸ່ມ -find_reached_bottom=ຮອດຕອນທ້າຍຂອງເອກະສານ, ສືບຕໍ່ຈາກເທິງ -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} ຂອງ {{total}} ກົງກັນ -find_match_count[two]={{current}} ຂອງ {{total}} ກົງກັນ -find_match_count[few]={{current}} ຂອງ {{total}} ກົງກັນ -find_match_count[many]={{current}} ຂອງ {{total}} ກົງກັນ -find_match_count[other]={{current}} ຂອງ {{total}} ກົງກັນ -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=ຫຼາຍກວ່າ {{limit}} ກົງກັນ -find_match_count_limit[one]=ກົງກັນຫຼາຍກວ່າ {{limit}} -find_match_count_limit[two]=ຫຼາຍກວ່າ {{limit}} ກົງກັນ -find_match_count_limit[few]=ຫຼາຍກວ່າ {{limit}} ກົງກັນ -find_match_count_limit[many]=ຫຼາຍກວ່າ {{limit}} ກົງກັນ -find_match_count_limit[other]=ຫຼາຍກວ່າ {{limit}} ກົງກັນ -find_not_found=ບໍ່ພົບວະລີທີ່ຕ້ອງການ - -# Predefined zoom values -page_scale_width=ຄວາມກວ້າງໜ້າ -page_scale_fit=ໜ້າພໍດີ -page_scale_auto=ຊູມອັດຕະໂນມັດ -page_scale_actual=ຂະໜາດຕົວຈິງ -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງໂຫລດ PDF. -invalid_file_error=ໄຟລ໌ PDF ບໍ່ຖືກຕ້ອງຫລືເສຍຫາຍ. -missing_file_error=ບໍ່ມີໄຟລ໌ PDF. -unexpected_response_error=ການຕອບສະໜອງຂອງເຊີບເວີທີ່ບໍ່ຄາດຄິດ. - -rendering_error=ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງເຣັນເດີຫນ້າ. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} ຄຳບັນຍາຍ] -password_label=ໃສ່ລະຫັດຜ່ານເພື່ອເປີດໄຟລ໌ PDF ນີ້. -password_invalid=ລະຫັດຜ່ານບໍ່ຖືກຕ້ອງ. ກະລຸນາລອງອີກຄັ້ງ. -password_ok=ຕົກລົງ -password_cancel=ຍົກເລີກ - -printing_not_supported=ຄຳເຕືອນ: ບຼາວເຊີນີ້ບໍ່ຮອງຮັບການພິມຢ່າງເຕັມທີ່. -printing_not_ready=ຄໍາ​ເຕືອນ​: PDF ບໍ່​ໄດ້​ຖືກ​ໂຫຼດ​ຢ່າງ​ເຕັມ​ທີ່​ສໍາ​ລັບ​ການ​ພິມ​. -web_fonts_disabled=ຟອນເວັບຖືກປິດໃຊ້ງານ: ບໍ່ສາມາດໃຊ້ຟອນ PDF ທີ່ຝັງໄວ້ໄດ້. - -# Editor -editor_free_text2.title=ຂໍ້ຄວາມ -editor_free_text2_label=ຂໍ້ຄວາມ -editor_ink2.title=ແຕ້ມ -editor_ink2_label=ແຕ້ມ - -free_text2_default_content=ເລີ່ມພິມ... - -# Editor Parameters -editor_free_text_color=ສີ -editor_free_text_size=ຂະຫນາດ -editor_ink_color=ສີ -editor_ink_thickness=ຄວາມຫນາ -editor_ink_opacity=ຄວາມໂປ່ງໃສ - -# Editor aria -editor_free_text2_aria_label=ຕົວແກ້ໄຂຂໍ້ຄວາມ -editor_ink2_aria_label=ຕົວແກ້ໄຂຮູບແຕ້ມ -editor_ink_canvas_aria_label=ຮູບພາບທີ່ຜູ້ໃຊ້ສ້າງ diff --git a/static/pdf.js/locale/locale.json b/static/pdf.js/locale/locale.json new file mode 100644 index 00000000..20122111 --- /dev/null +++ b/static/pdf.js/locale/locale.json @@ -0,0 +1 @@ +{"ach":"ach/viewer.ftl","af":"af/viewer.ftl","an":"an/viewer.ftl","ar":"ar/viewer.ftl","ast":"ast/viewer.ftl","az":"az/viewer.ftl","be":"be/viewer.ftl","bg":"bg/viewer.ftl","bn":"bn/viewer.ftl","bo":"bo/viewer.ftl","br":"br/viewer.ftl","brx":"brx/viewer.ftl","bs":"bs/viewer.ftl","ca":"ca/viewer.ftl","cak":"cak/viewer.ftl","ckb":"ckb/viewer.ftl","cs":"cs/viewer.ftl","cy":"cy/viewer.ftl","da":"da/viewer.ftl","de":"de/viewer.ftl","dsb":"dsb/viewer.ftl","el":"el/viewer.ftl","en-ca":"en-CA/viewer.ftl","en-gb":"en-GB/viewer.ftl","en-us":"en-US/viewer.ftl","eo":"eo/viewer.ftl","es-ar":"es-AR/viewer.ftl","es-cl":"es-CL/viewer.ftl","es-es":"es-ES/viewer.ftl","es-mx":"es-MX/viewer.ftl","et":"et/viewer.ftl","eu":"eu/viewer.ftl","fa":"fa/viewer.ftl","ff":"ff/viewer.ftl","fi":"fi/viewer.ftl","fr":"fr/viewer.ftl","fur":"fur/viewer.ftl","fy-nl":"fy-NL/viewer.ftl","ga-ie":"ga-IE/viewer.ftl","gd":"gd/viewer.ftl","gl":"gl/viewer.ftl","gn":"gn/viewer.ftl","gu-in":"gu-IN/viewer.ftl","he":"he/viewer.ftl","hi-in":"hi-IN/viewer.ftl","hr":"hr/viewer.ftl","hsb":"hsb/viewer.ftl","hu":"hu/viewer.ftl","hy-am":"hy-AM/viewer.ftl","hye":"hye/viewer.ftl","ia":"ia/viewer.ftl","id":"id/viewer.ftl","is":"is/viewer.ftl","it":"it/viewer.ftl","ja":"ja/viewer.ftl","ka":"ka/viewer.ftl","kab":"kab/viewer.ftl","kk":"kk/viewer.ftl","km":"km/viewer.ftl","kn":"kn/viewer.ftl","ko":"ko/viewer.ftl","lij":"lij/viewer.ftl","lo":"lo/viewer.ftl","lt":"lt/viewer.ftl","ltg":"ltg/viewer.ftl","lv":"lv/viewer.ftl","meh":"meh/viewer.ftl","mk":"mk/viewer.ftl","mr":"mr/viewer.ftl","ms":"ms/viewer.ftl","my":"my/viewer.ftl","nb-no":"nb-NO/viewer.ftl","ne-np":"ne-NP/viewer.ftl","nl":"nl/viewer.ftl","nn-no":"nn-NO/viewer.ftl","oc":"oc/viewer.ftl","pa-in":"pa-IN/viewer.ftl","pl":"pl/viewer.ftl","pt-br":"pt-BR/viewer.ftl","pt-pt":"pt-PT/viewer.ftl","rm":"rm/viewer.ftl","ro":"ro/viewer.ftl","ru":"ru/viewer.ftl","sat":"sat/viewer.ftl","sc":"sc/viewer.ftl","scn":"scn/viewer.ftl","sco":"sco/viewer.ftl","si":"si/viewer.ftl","sk":"sk/viewer.ftl","skr":"skr/viewer.ftl","sl":"sl/viewer.ftl","son":"son/viewer.ftl","sq":"sq/viewer.ftl","sr":"sr/viewer.ftl","sv-se":"sv-SE/viewer.ftl","szl":"szl/viewer.ftl","ta":"ta/viewer.ftl","te":"te/viewer.ftl","tg":"tg/viewer.ftl","th":"th/viewer.ftl","tl":"tl/viewer.ftl","tr":"tr/viewer.ftl","trs":"trs/viewer.ftl","uk":"uk/viewer.ftl","ur":"ur/viewer.ftl","uz":"uz/viewer.ftl","vi":"vi/viewer.ftl","wo":"wo/viewer.ftl","xh":"xh/viewer.ftl","zh-cn":"zh-CN/viewer.ftl","zh-tw":"zh-TW/viewer.ftl"} \ No newline at end of file diff --git a/static/pdf.js/locale/locale.properties b/static/pdf.js/locale/locale.properties deleted file mode 100644 index 38680157..00000000 --- a/static/pdf.js/locale/locale.properties +++ /dev/null @@ -1,333 +0,0 @@ -[ach] -@import url(ach/viewer.properties) - -[af] -@import url(af/viewer.properties) - -[an] -@import url(an/viewer.properties) - -[ar] -@import url(ar/viewer.properties) - -[ast] -@import url(ast/viewer.properties) - -[az] -@import url(az/viewer.properties) - -[be] -@import url(be/viewer.properties) - -[bg] -@import url(bg/viewer.properties) - -[bn] -@import url(bn/viewer.properties) - -[bo] -@import url(bo/viewer.properties) - -[br] -@import url(br/viewer.properties) - -[brx] -@import url(brx/viewer.properties) - -[bs] -@import url(bs/viewer.properties) - -[ca] -@import url(ca/viewer.properties) - -[cak] -@import url(cak/viewer.properties) - -[ckb] -@import url(ckb/viewer.properties) - -[cs] -@import url(cs/viewer.properties) - -[cy] -@import url(cy/viewer.properties) - -[da] -@import url(da/viewer.properties) - -[de] -@import url(de/viewer.properties) - -[dsb] -@import url(dsb/viewer.properties) - -[el] -@import url(el/viewer.properties) - -[en-CA] -@import url(en-CA/viewer.properties) - -[en-GB] -@import url(en-GB/viewer.properties) - -[en-US] -@import url(en-US/viewer.properties) - -[eo] -@import url(eo/viewer.properties) - -[es-AR] -@import url(es-AR/viewer.properties) - -[es-CL] -@import url(es-CL/viewer.properties) - -[es-ES] -@import url(es-ES/viewer.properties) - -[es-MX] -@import url(es-MX/viewer.properties) - -[et] -@import url(et/viewer.properties) - -[eu] -@import url(eu/viewer.properties) - -[fa] -@import url(fa/viewer.properties) - -[ff] -@import url(ff/viewer.properties) - -[fi] -@import url(fi/viewer.properties) - -[fr] -@import url(fr/viewer.properties) - -[fur] -@import url(fur/viewer.properties) - -[fy-NL] -@import url(fy-NL/viewer.properties) - -[ga-IE] -@import url(ga-IE/viewer.properties) - -[gd] -@import url(gd/viewer.properties) - -[gl] -@import url(gl/viewer.properties) - -[gn] -@import url(gn/viewer.properties) - -[gu-IN] -@import url(gu-IN/viewer.properties) - -[he] -@import url(he/viewer.properties) - -[hi-IN] -@import url(hi-IN/viewer.properties) - -[hr] -@import url(hr/viewer.properties) - -[hsb] -@import url(hsb/viewer.properties) - -[hu] -@import url(hu/viewer.properties) - -[hy-AM] -@import url(hy-AM/viewer.properties) - -[hye] -@import url(hye/viewer.properties) - -[ia] -@import url(ia/viewer.properties) - -[id] -@import url(id/viewer.properties) - -[is] -@import url(is/viewer.properties) - -[it] -@import url(it/viewer.properties) - -[ja] -@import url(ja/viewer.properties) - -[ka] -@import url(ka/viewer.properties) - -[kab] -@import url(kab/viewer.properties) - -[kk] -@import url(kk/viewer.properties) - -[km] -@import url(km/viewer.properties) - -[kn] -@import url(kn/viewer.properties) - -[ko] -@import url(ko/viewer.properties) - -[lij] -@import url(lij/viewer.properties) - -[lo] -@import url(lo/viewer.properties) - -[lt] -@import url(lt/viewer.properties) - -[ltg] -@import url(ltg/viewer.properties) - -[lv] -@import url(lv/viewer.properties) - -[meh] -@import url(meh/viewer.properties) - -[mk] -@import url(mk/viewer.properties) - -[mr] -@import url(mr/viewer.properties) - -[ms] -@import url(ms/viewer.properties) - -[my] -@import url(my/viewer.properties) - -[nb-NO] -@import url(nb-NO/viewer.properties) - -[ne-NP] -@import url(ne-NP/viewer.properties) - -[nl] -@import url(nl/viewer.properties) - -[nn-NO] -@import url(nn-NO/viewer.properties) - -[oc] -@import url(oc/viewer.properties) - -[pa-IN] -@import url(pa-IN/viewer.properties) - -[pl] -@import url(pl/viewer.properties) - -[pt-BR] -@import url(pt-BR/viewer.properties) - -[pt-PT] -@import url(pt-PT/viewer.properties) - -[rm] -@import url(rm/viewer.properties) - -[ro] -@import url(ro/viewer.properties) - -[ru] -@import url(ru/viewer.properties) - -[sat] -@import url(sat/viewer.properties) - -[sc] -@import url(sc/viewer.properties) - -[scn] -@import url(scn/viewer.properties) - -[sco] -@import url(sco/viewer.properties) - -[si] -@import url(si/viewer.properties) - -[sk] -@import url(sk/viewer.properties) - -[skr] -@import url(skr/viewer.properties) - -[sl] -@import url(sl/viewer.properties) - -[son] -@import url(son/viewer.properties) - -[sq] -@import url(sq/viewer.properties) - -[sr] -@import url(sr/viewer.properties) - -[sv-SE] -@import url(sv-SE/viewer.properties) - -[szl] -@import url(szl/viewer.properties) - -[ta] -@import url(ta/viewer.properties) - -[te] -@import url(te/viewer.properties) - -[tg] -@import url(tg/viewer.properties) - -[th] -@import url(th/viewer.properties) - -[tl] -@import url(tl/viewer.properties) - -[tr] -@import url(tr/viewer.properties) - -[trs] -@import url(trs/viewer.properties) - -[uk] -@import url(uk/viewer.properties) - -[ur] -@import url(ur/viewer.properties) - -[uz] -@import url(uz/viewer.properties) - -[vi] -@import url(vi/viewer.properties) - -[wo] -@import url(wo/viewer.properties) - -[xh] -@import url(xh/viewer.properties) - -[zh-CN] -@import url(zh-CN/viewer.properties) - -[zh-TW] -@import url(zh-TW/viewer.properties) - diff --git a/static/pdf.js/locale/lt/viewer.ftl b/static/pdf.js/locale/lt/viewer.ftl new file mode 100644 index 00000000..a8ee7a08 --- /dev/null +++ b/static/pdf.js/locale/lt/viewer.ftl @@ -0,0 +1,268 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Ankstesnis puslapis +pdfjs-previous-button-label = Ankstesnis +pdfjs-next-button = + .title = Kitas puslapis +pdfjs-next-button-label = Kitas +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Puslapis +# 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 = iš { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } iš { $pagesCount }) +pdfjs-zoom-out-button = + .title = Sumažinti +pdfjs-zoom-out-button-label = Sumažinti +pdfjs-zoom-in-button = + .title = Padidinti +pdfjs-zoom-in-button-label = Padidinti +pdfjs-zoom-select = + .title = Mastelis +pdfjs-presentation-mode-button = + .title = Pereiti į pateikties veikseną +pdfjs-presentation-mode-button-label = Pateikties veiksena +pdfjs-open-file-button = + .title = Atverti failą +pdfjs-open-file-button-label = Atverti +pdfjs-print-button = + .title = Spausdinti +pdfjs-print-button-label = Spausdinti + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Priemonės +pdfjs-tools-button-label = Priemonės +pdfjs-first-page-button = + .title = Eiti į pirmą puslapį +pdfjs-first-page-button-label = Eiti į pirmą puslapį +pdfjs-last-page-button = + .title = Eiti į paskutinį puslapį +pdfjs-last-page-button-label = Eiti į paskutinį puslapį +pdfjs-page-rotate-cw-button = + .title = Pasukti pagal laikrodžio rodyklę +pdfjs-page-rotate-cw-button-label = Pasukti pagal laikrodžio rodyklę +pdfjs-page-rotate-ccw-button = + .title = Pasukti prieš laikrodžio rodyklę +pdfjs-page-rotate-ccw-button-label = Pasukti prieš laikrodžio rodyklę +pdfjs-cursor-text-select-tool-button = + .title = Įjungti teksto žymėjimo įrankį +pdfjs-cursor-text-select-tool-button-label = Teksto žymėjimo įrankis +pdfjs-cursor-hand-tool-button = + .title = Įjungti vilkimo įrankį +pdfjs-cursor-hand-tool-button-label = Vilkimo įrankis +pdfjs-scroll-page-button = + .title = Naudoti puslapio slinkimą +pdfjs-scroll-page-button-label = Puslapio slinkimas +pdfjs-scroll-vertical-button = + .title = Naudoti vertikalų slinkimą +pdfjs-scroll-vertical-button-label = Vertikalus slinkimas +pdfjs-scroll-horizontal-button = + .title = Naudoti horizontalų slinkimą +pdfjs-scroll-horizontal-button-label = Horizontalus slinkimas +pdfjs-scroll-wrapped-button = + .title = Naudoti išklotą slinkimą +pdfjs-scroll-wrapped-button-label = Išklotas slinkimas +pdfjs-spread-none-button = + .title = Nejungti puslapių į dvilapius +pdfjs-spread-none-button-label = Be dvilapių +pdfjs-spread-odd-button = + .title = Sujungti į dvilapius pradedant nelyginiais puslapiais +pdfjs-spread-odd-button-label = Nelyginiai dvilapiai +pdfjs-spread-even-button = + .title = Sujungti į dvilapius pradedant lyginiais puslapiais +pdfjs-spread-even-button-label = Lyginiai dvilapiai + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Dokumento savybės… +pdfjs-document-properties-button-label = Dokumento savybės… +pdfjs-document-properties-file-name = Failo vardas: +pdfjs-document-properties-file-size = Failo dydis: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } B) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } B) +pdfjs-document-properties-title = Antraštė: +pdfjs-document-properties-author = Autorius: +pdfjs-document-properties-subject = Tema: +pdfjs-document-properties-keywords = Reikšminiai žodžiai: +pdfjs-document-properties-creation-date = Sukūrimo data: +pdfjs-document-properties-modification-date = Modifikavimo data: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Kūrėjas: +pdfjs-document-properties-producer = PDF generatorius: +pdfjs-document-properties-version = PDF versija: +pdfjs-document-properties-page-count = Puslapių skaičius: +pdfjs-document-properties-page-size = Puslapio dydis: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = stačias +pdfjs-document-properties-page-size-orientation-landscape = gulsčias +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 = Laiškas +pdfjs-document-properties-page-size-name-legal = Dokumentas + +## 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 = Spartus žiniatinklio rodinys: +pdfjs-document-properties-linearized-yes = Taip +pdfjs-document-properties-linearized-no = Ne +pdfjs-document-properties-close-button = Užverti + +## Print + +pdfjs-print-progress-message = Dokumentas ruošiamas spausdinimui… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Atsisakyti +pdfjs-printing-not-supported = Dėmesio! Spausdinimas šioje naršyklėje nėra pilnai realizuotas. +pdfjs-printing-not-ready = Dėmesio! PDF failas dar nėra pilnai įkeltas spausdinimui. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Rodyti / slėpti šoninį polangį +pdfjs-toggle-sidebar-notification-button = + .title = Parankinė (dokumentas turi struktūrą / priedų / sluoksnių) +pdfjs-toggle-sidebar-button-label = Šoninis polangis +pdfjs-document-outline-button = + .title = Rodyti dokumento struktūrą (spustelėkite dukart norėdami išplėsti/suskleisti visus elementus) +pdfjs-document-outline-button-label = Dokumento struktūra +pdfjs-attachments-button = + .title = Rodyti priedus +pdfjs-attachments-button-label = Priedai +pdfjs-layers-button = + .title = Rodyti sluoksnius (spustelėkite dukart, norėdami atstatyti visus sluoksnius į numatytąją būseną) +pdfjs-layers-button-label = Sluoksniai +pdfjs-thumbs-button = + .title = Rodyti puslapių miniatiūras +pdfjs-thumbs-button-label = Miniatiūros +pdfjs-current-outline-item-button = + .title = Rasti dabartinį struktūros elementą +pdfjs-current-outline-item-button-label = Dabartinis struktūros elementas +pdfjs-findbar-button = + .title = Ieškoti dokumente +pdfjs-findbar-button-label = Rasti +pdfjs-additional-layers = Papildomi sluoksniai + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = { $page } puslapis +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = { $page } puslapio miniatiūra + +## Find panel button title and messages + +pdfjs-find-input = + .title = Rasti + .placeholder = Rasti dokumente… +pdfjs-find-previous-button = + .title = Ieškoti ankstesnio frazės egzemplioriaus +pdfjs-find-previous-button-label = Ankstesnis +pdfjs-find-next-button = + .title = Ieškoti tolesnio frazės egzemplioriaus +pdfjs-find-next-button-label = Tolesnis +pdfjs-find-highlight-checkbox = Viską paryškinti +pdfjs-find-match-case-checkbox-label = Skirti didžiąsias ir mažąsias raides +pdfjs-find-match-diacritics-checkbox-label = Skirti diakritinius ženklus +pdfjs-find-entire-word-checkbox-label = Ištisi žodžiai +pdfjs-find-reached-top = Pasiekus dokumento pradžią, paieška pratęsta nuo pabaigos +pdfjs-find-reached-bottom = Pasiekus dokumento pabaigą, paieška pratęsta nuo pradžios +pdfjs-find-not-found = Ieškoma frazė nerasta + +## Predefined zoom values + +pdfjs-page-scale-width = Priderinti prie lapo pločio +pdfjs-page-scale-fit = Pritaikyti prie lapo dydžio +pdfjs-page-scale-auto = Automatinis mastelis +pdfjs-page-scale-actual = Tikras dydis +# 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 } puslapis + +## Loading indicator messages + +pdfjs-loading-error = Įkeliant PDF failą įvyko klaida. +pdfjs-invalid-file-error = Tai nėra PDF failas arba jis yra sugadintas. +pdfjs-missing-file-error = PDF failas nerastas. +pdfjs-unexpected-response-error = Netikėtas serverio atsakas. +pdfjs-rendering-error = Atvaizduojant puslapį įvyko klaida. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [„{ $type }“ tipo anotacija] + +## Password + +pdfjs-password-label = Įveskite slaptažodį šiam PDF failui atverti. +pdfjs-password-invalid = Slaptažodis neteisingas. Bandykite dar kartą. +pdfjs-password-ok-button = Gerai +pdfjs-password-cancel-button = Atsisakyti +pdfjs-web-fonts-disabled = Saityno šriftai išjungti – PDF faile esančių šriftų naudoti negalima. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/lt/viewer.properties b/static/pdf.js/locale/lt/viewer.properties deleted file mode 100644 index 6d83b07e..00000000 --- a/static/pdf.js/locale/lt/viewer.properties +++ /dev/null @@ -1,229 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Ankstesnis puslapis -previous_label=Ankstesnis -next.title=Kitas puslapis -next_label=Kitas - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Puslapis -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=iš {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} iš {{pagesCount}}) - -zoom_out.title=Sumažinti -zoom_out_label=Sumažinti -zoom_in.title=Padidinti -zoom_in_label=Padidinti -zoom.title=Mastelis -presentation_mode.title=Pereiti į pateikties veikseną -presentation_mode_label=Pateikties veiksena -open_file.title=Atverti failą -open_file_label=Atverti -print.title=Spausdinti -print_label=Spausdinti - -# Secondary toolbar and context menu -tools.title=Priemonės -tools_label=Priemonės -first_page.title=Eiti į pirmą puslapį -first_page_label=Eiti į pirmą puslapį -last_page.title=Eiti į paskutinį puslapį -last_page_label=Eiti į paskutinį puslapį -page_rotate_cw.title=Pasukti pagal laikrodžio rodyklę -page_rotate_cw_label=Pasukti pagal laikrodžio rodyklę -page_rotate_ccw.title=Pasukti prieš laikrodžio rodyklę -page_rotate_ccw_label=Pasukti prieš laikrodžio rodyklę - -cursor_text_select_tool.title=Įjungti teksto žymėjimo įrankį -cursor_text_select_tool_label=Teksto žymėjimo įrankis -cursor_hand_tool.title=Įjungti vilkimo įrankį -cursor_hand_tool_label=Vilkimo įrankis - -scroll_page.title=Naudoti puslapio slinkimą -scroll_page_label=Puslapio slinkimas -scroll_vertical.title=Naudoti vertikalų slinkimą -scroll_vertical_label=Vertikalus slinkimas -scroll_horizontal.title=Naudoti horizontalų slinkimą -scroll_horizontal_label=Horizontalus slinkimas -scroll_wrapped.title=Naudoti išklotą slinkimą -scroll_wrapped_label=Išklotas slinkimas - -spread_none.title=Nejungti puslapių į dvilapius -spread_none_label=Be dvilapių -spread_odd.title=Sujungti į dvilapius pradedant nelyginiais puslapiais -spread_odd_label=Nelyginiai dvilapiai -spread_even.title=Sujungti į dvilapius pradedant lyginiais puslapiais -spread_even_label=Lyginiai dvilapiai - -# Document properties dialog box -document_properties.title=Dokumento savybės… -document_properties_label=Dokumento savybės… -document_properties_file_name=Failo vardas: -document_properties_file_size=Failo dydis: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} B) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} B) -document_properties_title=Antraštė: -document_properties_author=Autorius: -document_properties_subject=Tema: -document_properties_keywords=Reikšminiai žodžiai: -document_properties_creation_date=Sukūrimo data: -document_properties_modification_date=Modifikavimo data: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Kūrėjas: -document_properties_producer=PDF generatorius: -document_properties_version=PDF versija: -document_properties_page_count=Puslapių skaičius: -document_properties_page_size=Puslapio dydis: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=stačias -document_properties_page_size_orientation_landscape=gulsčias -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Laiškas -document_properties_page_size_name_legal=Dokumentas -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Spartus žiniatinklio rodinys: -document_properties_linearized_yes=Taip -document_properties_linearized_no=Ne -document_properties_close=Užverti - -print_progress_message=Dokumentas ruošiamas spausdinimui… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Atsisakyti - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Rodyti / slėpti šoninį polangį -toggle_sidebar_notification2.title=Parankinė (dokumentas turi struktūrą / priedų / sluoksnių) -toggle_sidebar_label=Šoninis polangis -document_outline.title=Rodyti dokumento struktūrą (spustelėkite dukart norėdami išplėsti/suskleisti visus elementus) -document_outline_label=Dokumento struktūra -attachments.title=Rodyti priedus -attachments_label=Priedai -layers.title=Rodyti sluoksnius (spustelėkite dukart, norėdami atstatyti visus sluoksnius į numatytąją būseną) -layers_label=Sluoksniai -thumbs.title=Rodyti puslapių miniatiūras -thumbs_label=Miniatiūros -current_outline_item.title=Rasti dabartinį struktūros elementą -current_outline_item_label=Dabartinis struktūros elementas -findbar.title=Ieškoti dokumente -findbar_label=Rasti - -additional_layers=Papildomi sluoksniai -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark={{page}} puslapis -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title={{page}} puslapis -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas={{page}} puslapio miniatiūra - -# Find panel button title and messages -find_input.title=Rasti -find_input.placeholder=Rasti dokumente… -find_previous.title=Ieškoti ankstesnio frazės egzemplioriaus -find_previous_label=Ankstesnis -find_next.title=Ieškoti tolesnio frazės egzemplioriaus -find_next_label=Tolesnis -find_highlight=Viską paryškinti -find_match_case_label=Skirti didžiąsias ir mažąsias raides -find_match_diacritics_label=Skirti diakritinius ženklus -find_entire_word_label=Ištisi žodžiai -find_reached_top=Pasiekus dokumento pradžią, paieška pratęsta nuo pabaigos -find_reached_bottom=Pasiekus dokumento pabaigą, paieška pratęsta nuo pradžios -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} iš {{total}} atitikmens -find_match_count[two]={{current}} iš {{total}} atitikmenų -find_match_count[few]={{current}} iš {{total}} atitikmenų -find_match_count[many]={{current}} iš {{total}} atitikmenų -find_match_count[other]={{current}} iš {{total}} atitikmens -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Daugiau nei {{limit}} atitikmenų -find_match_count_limit[one]=Daugiau nei {{limit}} atitikmuo -find_match_count_limit[two]=Daugiau nei {{limit}} atitikmenys -find_match_count_limit[few]=Daugiau nei {{limit}} atitikmenys -find_match_count_limit[many]=Daugiau nei {{limit}} atitikmenų -find_match_count_limit[other]=Daugiau nei {{limit}} atitikmuo -find_not_found=Ieškoma frazė nerasta - -# Predefined zoom values -page_scale_width=Priderinti prie lapo pločio -page_scale_fit=Pritaikyti prie lapo dydžio -page_scale_auto=Automatinis mastelis -page_scale_actual=Tikras dydis -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=Įkeliant PDF failą įvyko klaida. -invalid_file_error=Tai nėra PDF failas arba jis yra sugadintas. -missing_file_error=PDF failas nerastas. -unexpected_response_error=Netikėtas serverio atsakas. - -rendering_error=Atvaizduojant puslapį įvyko klaida. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[„{{type}}“ tipo anotacija] -password_label=Įveskite slaptažodį šiam PDF failui atverti. -password_invalid=Slaptažodis neteisingas. Bandykite dar kartą. -password_ok=Gerai -password_cancel=Atsisakyti - -printing_not_supported=Dėmesio! Spausdinimas šioje naršyklėje nėra pilnai realizuotas. -printing_not_ready=Dėmesio! PDF failas dar nėra pilnai įkeltas spausdinimui. -web_fonts_disabled=Saityno šriftai išjungti – PDF faile esančių šriftų naudoti negalima. - diff --git a/static/pdf.js/locale/ltg/viewer.ftl b/static/pdf.js/locale/ltg/viewer.ftl new file mode 100644 index 00000000..d2621654 --- /dev/null +++ b/static/pdf.js/locale/ltg/viewer.ftl @@ -0,0 +1,246 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Īprīkšejā lopa +pdfjs-previous-button-label = Īprīkšejā +pdfjs-next-button = + .title = Nuokomuo lopa +pdfjs-next-button-label = Nuokomuo +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Lopa +# 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 = nu { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } nu { $pagesCount }) +pdfjs-zoom-out-button = + .title = Attuolynuot +pdfjs-zoom-out-button-label = Attuolynuot +pdfjs-zoom-in-button = + .title = Pītuvynuot +pdfjs-zoom-in-button-label = Pītuvynuot +pdfjs-zoom-select = + .title = Palelynuojums +pdfjs-presentation-mode-button = + .title = Puorslēgtīs iz Prezentacejis režymu +pdfjs-presentation-mode-button-label = Prezentacejis režyms +pdfjs-open-file-button = + .title = Attaiseit failu +pdfjs-open-file-button-label = Attaiseit +pdfjs-print-button = + .title = Drukuošona +pdfjs-print-button-label = Drukōt + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Reiki +pdfjs-tools-button-label = Reiki +pdfjs-first-page-button = + .title = Īt iz pyrmū lopu +pdfjs-first-page-button-label = Īt iz pyrmū lopu +pdfjs-last-page-button = + .title = Īt iz piedejū lopu +pdfjs-last-page-button-label = Īt iz piedejū lopu +pdfjs-page-rotate-cw-button = + .title = Pagrīzt pa pulksteni +pdfjs-page-rotate-cw-button-label = Pagrīzt pa pulksteni +pdfjs-page-rotate-ccw-button = + .title = Pagrīzt pret pulksteni +pdfjs-page-rotate-ccw-button-label = Pagrīzt pret pulksteni +pdfjs-cursor-text-select-tool-button = + .title = Aktivizēt teksta izvieles reiku +pdfjs-cursor-text-select-tool-button-label = Teksta izvieles reiks +pdfjs-cursor-hand-tool-button = + .title = Aktivēt rūkys reiku +pdfjs-cursor-hand-tool-button-label = Rūkys reiks +pdfjs-scroll-vertical-button = + .title = Izmontōt vertikalū ritinōšonu +pdfjs-scroll-vertical-button-label = Vertikalō ritinōšona +pdfjs-scroll-horizontal-button = + .title = Izmontōt horizontalū ritinōšonu +pdfjs-scroll-horizontal-button-label = Horizontalō ritinōšona +pdfjs-scroll-wrapped-button = + .title = Izmontōt mārūgojamū ritinōšonu +pdfjs-scroll-wrapped-button-label = Mārūgojamō ritinōšona +pdfjs-spread-none-button = + .title = Naizmontōt lopu atvāruma režimu +pdfjs-spread-none-button-label = Bez atvārumim +pdfjs-spread-odd-button = + .title = Izmontōt lopu atvārumus sōkut nu napōra numeru lopom +pdfjs-spread-odd-button-label = Napōra lopys pa kreisi +pdfjs-spread-even-button = + .title = Izmontōt lopu atvārumus sōkut nu pōra numeru lopom +pdfjs-spread-even-button-label = Pōra lopys pa kreisi + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Dokumenta īstatiejumi… +pdfjs-document-properties-button-label = Dokumenta īstatiejumi… +pdfjs-document-properties-file-name = Faila nūsaukums: +pdfjs-document-properties-file-size = Faila izmārs: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } biti) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } biti) +pdfjs-document-properties-title = Nūsaukums: +pdfjs-document-properties-author = Autors: +pdfjs-document-properties-subject = Tema: +pdfjs-document-properties-keywords = Atslāgi vuordi: +pdfjs-document-properties-creation-date = Izveides datums: +pdfjs-document-properties-modification-date = lobuošonys datums: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Radeituojs: +pdfjs-document-properties-producer = PDF producents: +pdfjs-document-properties-version = PDF verseja: +pdfjs-document-properties-page-count = Lopu skaits: +pdfjs-document-properties-page-size = Lopas izmārs: +pdfjs-document-properties-page-size-unit-inches = collas +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = portreta orientaceja +pdfjs-document-properties-page-size-orientation-landscape = ainovys orientaceja +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Fast Web View: +pdfjs-document-properties-linearized-yes = Jā +pdfjs-document-properties-linearized-no = Nā +pdfjs-document-properties-close-button = Aiztaiseit + +## Print + +pdfjs-print-progress-message = Preparing document for printing… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Atceļt +pdfjs-printing-not-supported = Uzmaneibu: Drukuošona nu itei puorlūka dorbojās tikai daleji. +pdfjs-printing-not-ready = Uzmaneibu: PDF nav pilneibā īluodeits drukuošonai. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Puorslēgt suonu jūslu +pdfjs-toggle-sidebar-button-label = Puorslēgt suonu jūslu +pdfjs-document-outline-button = + .title = Show Document Outline (double-click to expand/collapse all items) +pdfjs-document-outline-button-label = Dokumenta saturs +pdfjs-attachments-button = + .title = Show Attachments +pdfjs-attachments-button-label = Attachments +pdfjs-thumbs-button = + .title = Paruodeit seiktālus +pdfjs-thumbs-button-label = Seiktāli +pdfjs-findbar-button = + .title = Mekleit dokumentā +pdfjs-findbar-button-label = Mekleit + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Lopa { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Lopys { $page } seiktāls + +## Find panel button title and messages + +pdfjs-find-input = + .title = Mekleit + .placeholder = Mekleit dokumentā… +pdfjs-find-previous-button = + .title = Atrast īprīkšejū +pdfjs-find-previous-button-label = Īprīkšejā +pdfjs-find-next-button = + .title = Atrast nuokamū +pdfjs-find-next-button-label = Nuokomuo +pdfjs-find-highlight-checkbox = Īkruosuot vysys +pdfjs-find-match-case-checkbox-label = Lelū, mozū burtu jiuteigs +pdfjs-find-reached-top = Sasnīgts dokumenta suokums, turpynojom nu beigom +pdfjs-find-reached-bottom = Sasnīgtys dokumenta beigys, turpynojom nu suokuma +pdfjs-find-not-found = Frāze nav atrosta + +## Predefined zoom values + +pdfjs-page-scale-width = Lopys plotumā +pdfjs-page-scale-fit = Ītylpynūt lopu +pdfjs-page-scale-auto = Automatiskais izmārs +pdfjs-page-scale-actual = Patīsais izmārs +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = Īluodejūt PDF nūtyka klaida. +pdfjs-invalid-file-error = Nadereigs voi būjuots PDF fails. +pdfjs-missing-file-error = PDF fails nav atrosts. +pdfjs-unexpected-response-error = Unexpected server response. +pdfjs-rendering-error = Attālojūt lopu rodās klaida + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Annotation] + +## Password + +pdfjs-password-label = Īvodit paroli, kab attaiseitu PDF failu. +pdfjs-password-invalid = Napareiza parole, raugit vēļreiz. +pdfjs-password-ok-button = Labi +pdfjs-password-cancel-button = Atceļt +pdfjs-web-fonts-disabled = Šķārsteikla fonti nav aktivizāti: Navar īgult PDF fontus. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/ltg/viewer.properties b/static/pdf.js/locale/ltg/viewer.properties deleted file mode 100644 index 26ee0696..00000000 --- a/static/pdf.js/locale/ltg/viewer.properties +++ /dev/null @@ -1,192 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Īprīkšejā lopa -previous_label=Īprīkšejā -next.title=Nuokomuo lopa -next_label=Nuokomuo - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Lopa -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=nu {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} nu {{pagesCount}}) - -zoom_out.title=Attuolynuot -zoom_out_label=Attuolynuot -zoom_in.title=Pītuvynuot -zoom_in_label=Pītuvynuot -zoom.title=Palelynuojums -presentation_mode.title=Puorslēgtīs iz Prezentacejis režymu -presentation_mode_label=Prezentacejis režyms -open_file.title=Attaiseit failu -open_file_label=Attaiseit -print.title=Drukuošona -print_label=Drukōt - -# Secondary toolbar and context menu -tools.title=Reiki -tools_label=Reiki -first_page.title=Īt iz pyrmū lopu -first_page_label=Īt iz pyrmū lopu -last_page.title=Īt iz piedejū lopu -last_page_label=Īt iz piedejū lopu -page_rotate_cw.title=Pagrīzt pa pulksteni -page_rotate_cw_label=Pagrīzt pa pulksteni -page_rotate_ccw.title=Pagrīzt pret pulksteni -page_rotate_ccw_label=Pagrīzt pret pulksteni - -cursor_text_select_tool.title=Aktivizēt teksta izvieles reiku -cursor_text_select_tool_label=Teksta izvieles reiks -cursor_hand_tool.title=Aktivēt rūkys reiku -cursor_hand_tool_label=Rūkys reiks - -scroll_vertical.title=Izmontōt vertikalū ritinōšonu -scroll_vertical_label=Vertikalō ritinōšona -scroll_horizontal.title=Izmontōt horizontalū ritinōšonu -scroll_horizontal_label=Horizontalō ritinōšona -scroll_wrapped.title=Izmontōt mārūgojamū ritinōšonu -scroll_wrapped_label=Mārūgojamō ritinōšona - -spread_none.title=Naizmontōt lopu atvāruma režimu -spread_none_label=Bez atvārumim -spread_odd.title=Izmontōt lopu atvārumus sōkut nu napōra numeru lopom -spread_odd_label=Napōra lopys pa kreisi -spread_even.title=Izmontōt lopu atvārumus sōkut nu pōra numeru lopom -spread_even_label=Pōra lopys pa kreisi - -# Document properties dialog box -document_properties.title=Dokumenta īstatiejumi… -document_properties_label=Dokumenta īstatiejumi… -document_properties_file_name=Faila nūsaukums: -document_properties_file_size=Faila izmārs: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} biti) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} biti) -document_properties_title=Nūsaukums: -document_properties_author=Autors: -document_properties_subject=Tema: -document_properties_keywords=Atslāgi vuordi: -document_properties_creation_date=Izveides datums: -document_properties_modification_date=lobuošonys datums: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Radeituojs: -document_properties_producer=PDF producents: -document_properties_version=PDF verseja: -document_properties_page_count=Lopu skaits: -document_properties_page_size=Lopas izmārs: -document_properties_page_size_unit_inches=collas -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=portreta orientaceja -document_properties_page_size_orientation_landscape=ainovys orientaceja -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Fast Web View: -document_properties_linearized_yes=Jā -document_properties_linearized_no=Nā -document_properties_close=Aiztaiseit - -print_progress_message=Preparing document for printing… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Atceļt - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Puorslēgt suonu jūslu -toggle_sidebar_label=Puorslēgt suonu jūslu -document_outline.title=Show Document Outline (double-click to expand/collapse all items) -document_outline_label=Dokumenta saturs -attachments.title=Show Attachments -attachments_label=Attachments -thumbs.title=Paruodeit seiktālus -thumbs_label=Seiktāli -findbar.title=Mekleit dokumentā -findbar_label=Mekleit - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Lopa {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Lopys {{page}} seiktāls - -# Find panel button title and messages -find_input.title=Mekleit -find_input.placeholder=Mekleit dokumentā… -find_previous.title=Atrast īprīkšejū -find_previous_label=Īprīkšejā -find_next.title=Atrast nuokamū -find_next_label=Nuokomuo -find_highlight=Īkruosuot vysys -find_match_case_label=Lelū, mozū burtu jiuteigs -find_reached_top=Sasnīgts dokumenta suokums, turpynojom nu beigom -find_reached_bottom=Sasnīgtys dokumenta beigys, turpynojom nu suokuma -find_not_found=Frāze nav atrosta - -# Predefined zoom values -page_scale_width=Lopys plotumā -page_scale_fit=Ītylpynūt lopu -page_scale_auto=Automatiskais izmārs -page_scale_actual=Patīsais izmārs -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=Īluodejūt PDF nūtyka klaida. -invalid_file_error=Nadereigs voi būjuots PDF fails. -missing_file_error=PDF fails nav atrosts. -unexpected_response_error=Unexpected server response. - -rendering_error=Attālojūt lopu rodās klaida - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Annotation] -password_label=Īvodit paroli, kab attaiseitu PDF failu. -password_invalid=Napareiza parole, raugit vēļreiz. -password_ok=Labi -password_cancel=Atceļt - -printing_not_supported=Uzmaneibu: Drukuošona nu itei puorlūka dorbojās tikai daleji. -printing_not_ready=Uzmaneibu: PDF nav pilneibā īluodeits drukuošonai. -web_fonts_disabled=Šķārsteikla fonti nav aktivizāti: Navar īgult PDF fontus. - diff --git a/static/pdf.js/locale/lv/viewer.ftl b/static/pdf.js/locale/lv/viewer.ftl new file mode 100644 index 00000000..067dc105 --- /dev/null +++ b/static/pdf.js/locale/lv/viewer.ftl @@ -0,0 +1,247 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Iepriekšējā lapa +pdfjs-previous-button-label = Iepriekšējā +pdfjs-next-button = + .title = Nākamā lapa +pdfjs-next-button-label = Nākamā +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Lapa +# 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 = no { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } no { $pagesCount }) +pdfjs-zoom-out-button = + .title = Attālināt +pdfjs-zoom-out-button-label = Attālināt +pdfjs-zoom-in-button = + .title = Pietuvināt +pdfjs-zoom-in-button-label = Pietuvināt +pdfjs-zoom-select = + .title = Palielinājums +pdfjs-presentation-mode-button = + .title = Pārslēgties uz Prezentācijas režīmu +pdfjs-presentation-mode-button-label = Prezentācijas režīms +pdfjs-open-file-button = + .title = Atvērt failu +pdfjs-open-file-button-label = Atvērt +pdfjs-print-button = + .title = Drukāšana +pdfjs-print-button-label = Drukāt + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Rīki +pdfjs-tools-button-label = Rīki +pdfjs-first-page-button = + .title = Iet uz pirmo lapu +pdfjs-first-page-button-label = Iet uz pirmo lapu +pdfjs-last-page-button = + .title = Iet uz pēdējo lapu +pdfjs-last-page-button-label = Iet uz pēdējo lapu +pdfjs-page-rotate-cw-button = + .title = Pagriezt pa pulksteni +pdfjs-page-rotate-cw-button-label = Pagriezt pa pulksteni +pdfjs-page-rotate-ccw-button = + .title = Pagriezt pret pulksteni +pdfjs-page-rotate-ccw-button-label = Pagriezt pret pulksteni +pdfjs-cursor-text-select-tool-button = + .title = Aktivizēt teksta izvēles rīku +pdfjs-cursor-text-select-tool-button-label = Teksta izvēles rīks +pdfjs-cursor-hand-tool-button = + .title = Aktivēt rokas rīku +pdfjs-cursor-hand-tool-button-label = Rokas rīks +pdfjs-scroll-vertical-button = + .title = Izmantot vertikālo ritināšanu +pdfjs-scroll-vertical-button-label = Vertikālā ritināšana +pdfjs-scroll-horizontal-button = + .title = Izmantot horizontālo ritināšanu +pdfjs-scroll-horizontal-button-label = Horizontālā ritināšana +pdfjs-scroll-wrapped-button = + .title = Izmantot apkļauto ritināšanu +pdfjs-scroll-wrapped-button-label = Apkļautā ritināšana +pdfjs-spread-none-button = + .title = Nepievienoties lapu izpletumiem +pdfjs-spread-none-button-label = Neizmantot izpletumus +pdfjs-spread-odd-button = + .title = Izmantot lapu izpletumus sākot ar nepāra numuru lapām +pdfjs-spread-odd-button-label = Nepāra izpletumi +pdfjs-spread-even-button = + .title = Izmantot lapu izpletumus sākot ar pāra numuru lapām +pdfjs-spread-even-button-label = Pāra izpletumi + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Dokumenta iestatījumi… +pdfjs-document-properties-button-label = Dokumenta iestatījumi… +pdfjs-document-properties-file-name = Faila nosaukums: +pdfjs-document-properties-file-size = Faila izmērs: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } biti) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } biti) +pdfjs-document-properties-title = Nosaukums: +pdfjs-document-properties-author = Autors: +pdfjs-document-properties-subject = Tēma: +pdfjs-document-properties-keywords = Atslēgas vārdi: +pdfjs-document-properties-creation-date = Izveides datums: +pdfjs-document-properties-modification-date = LAbošanas datums: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Radītājs: +pdfjs-document-properties-producer = PDF producents: +pdfjs-document-properties-version = PDF versija: +pdfjs-document-properties-page-count = Lapu skaits: +pdfjs-document-properties-page-size = Papīra izmērs: +pdfjs-document-properties-page-size-unit-inches = collas +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = portretorientācija +pdfjs-document-properties-page-size-orientation-landscape = ainavorientācija +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 = Vēstule +pdfjs-document-properties-page-size-name-legal = Juridiskie teksti + +## 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 = Ātrā tīmekļa skats: +pdfjs-document-properties-linearized-yes = Jā +pdfjs-document-properties-linearized-no = Nē +pdfjs-document-properties-close-button = Aizvērt + +## Print + +pdfjs-print-progress-message = Gatavo dokumentu drukāšanai... +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Atcelt +pdfjs-printing-not-supported = Uzmanību: Drukāšana no šī pārlūka darbojas tikai daļēji. +pdfjs-printing-not-ready = Uzmanību: PDF nav pilnībā ielādēts drukāšanai. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Pārslēgt sānu joslu +pdfjs-toggle-sidebar-button-label = Pārslēgt sānu joslu +pdfjs-document-outline-button = + .title = Rādīt dokumenta struktūru (veiciet dubultklikšķi lai izvērstu/sakļautu visus vienumus) +pdfjs-document-outline-button-label = Dokumenta saturs +pdfjs-attachments-button = + .title = Rādīt pielikumus +pdfjs-attachments-button-label = Pielikumi +pdfjs-thumbs-button = + .title = Parādīt sīktēlus +pdfjs-thumbs-button-label = Sīktēli +pdfjs-findbar-button = + .title = Meklēt dokumentā +pdfjs-findbar-button-label = Meklēt + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Lapa { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Lapas { $page } sīktēls + +## Find panel button title and messages + +pdfjs-find-input = + .title = Meklēt + .placeholder = Meklēt dokumentā… +pdfjs-find-previous-button = + .title = Atrast iepriekšējo +pdfjs-find-previous-button-label = Iepriekšējā +pdfjs-find-next-button = + .title = Atrast nākamo +pdfjs-find-next-button-label = Nākamā +pdfjs-find-highlight-checkbox = Iekrāsot visas +pdfjs-find-match-case-checkbox-label = Lielo, mazo burtu jutīgs +pdfjs-find-entire-word-checkbox-label = Veselus vārdus +pdfjs-find-reached-top = Sasniegts dokumenta sākums, turpinām no beigām +pdfjs-find-reached-bottom = Sasniegtas dokumenta beigas, turpinām no sākuma +pdfjs-find-not-found = Frāze nav atrasta + +## Predefined zoom values + +pdfjs-page-scale-width = Lapas platumā +pdfjs-page-scale-fit = Ietilpinot lapu +pdfjs-page-scale-auto = Automātiskais izmērs +pdfjs-page-scale-actual = Patiesais izmērs +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = Ielādējot PDF notika kļūda. +pdfjs-invalid-file-error = Nederīgs vai bojāts PDF fails. +pdfjs-missing-file-error = PDF fails nav atrasts. +pdfjs-unexpected-response-error = Negaidīa servera atbilde. +pdfjs-rendering-error = Attēlojot lapu radās kļūda + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } anotācija] + +## Password + +pdfjs-password-label = Ievadiet paroli, lai atvērtu PDF failu. +pdfjs-password-invalid = Nepareiza parole, mēģiniet vēlreiz. +pdfjs-password-ok-button = Labi +pdfjs-password-cancel-button = Atcelt +pdfjs-web-fonts-disabled = Tīmekļa fonti nav aktivizēti: Nevar iegult PDF fontus. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/lv/viewer.properties b/static/pdf.js/locale/lv/viewer.properties deleted file mode 100644 index 70e258dd..00000000 --- a/static/pdf.js/locale/lv/viewer.properties +++ /dev/null @@ -1,214 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Iepriekšējā lapa -previous_label=Iepriekšējā -next.title=Nākamā lapa -next_label=Nākamā - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Lapa -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=no {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} no {{pagesCount}}) - -zoom_out.title=Attālināt\u0020 -zoom_out_label=Attālināt -zoom_in.title=Pietuvināt -zoom_in_label=Pietuvināt -zoom.title=Palielinājums -presentation_mode.title=Pārslēgties uz Prezentācijas režīmu -presentation_mode_label=Prezentācijas režīms -open_file.title=Atvērt failu -open_file_label=Atvērt -print.title=Drukāšana -print_label=Drukāt - -# Secondary toolbar and context menu -tools.title=Rīki -tools_label=Rīki -first_page.title=Iet uz pirmo lapu -first_page_label=Iet uz pirmo lapu -last_page.title=Iet uz pēdējo lapu -last_page_label=Iet uz pēdējo lapu -page_rotate_cw.title=Pagriezt pa pulksteni -page_rotate_cw_label=Pagriezt pa pulksteni -page_rotate_ccw.title=Pagriezt pret pulksteni -page_rotate_ccw_label=Pagriezt pret pulksteni - -cursor_text_select_tool.title=Aktivizēt teksta izvēles rīku -cursor_text_select_tool_label=Teksta izvēles rīks -cursor_hand_tool.title=Aktivēt rokas rīku -cursor_hand_tool_label=Rokas rīks - -scroll_vertical.title=Izmantot vertikālo ritināšanu -scroll_vertical_label=Vertikālā ritināšana -scroll_horizontal.title=Izmantot horizontālo ritināšanu -scroll_horizontal_label=Horizontālā ritināšana -scroll_wrapped.title=Izmantot apkļauto ritināšanu -scroll_wrapped_label=Apkļautā ritināšana - -spread_none.title=Nepievienoties lapu izpletumiem -spread_none_label=Neizmantot izpletumus -spread_odd.title=Izmantot lapu izpletumus sākot ar nepāra numuru lapām -spread_odd_label=Nepāra izpletumi -spread_even.title=Izmantot lapu izpletumus sākot ar pāra numuru lapām -spread_even_label=Pāra izpletumi - -# Document properties dialog box -document_properties.title=Dokumenta iestatījumi… -document_properties_label=Dokumenta iestatījumi… -document_properties_file_name=Faila nosaukums: -document_properties_file_size=Faila izmērs: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} biti) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} biti) -document_properties_title=Nosaukums: -document_properties_author=Autors: -document_properties_subject=Tēma: -document_properties_keywords=Atslēgas vārdi: -document_properties_creation_date=Izveides datums: -document_properties_modification_date=LAbošanas datums: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Radītājs: -document_properties_producer=PDF producents: -document_properties_version=PDF versija: -document_properties_page_count=Lapu skaits: -document_properties_page_size=Papīra izmērs: -document_properties_page_size_unit_inches=collas -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=portretorientācija -document_properties_page_size_orientation_landscape=ainavorientācija -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Vēstule -document_properties_page_size_name_legal=Juridiskie teksti -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Ātrā tīmekļa skats: -document_properties_linearized_yes=Jā -document_properties_linearized_no=Nē -document_properties_close=Aizvērt - -print_progress_message=Gatavo dokumentu drukāšanai... -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Atcelt - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Pārslēgt sānu joslu -toggle_sidebar_label=Pārslēgt sānu joslu -document_outline.title=Rādīt dokumenta struktūru (veiciet dubultklikšķi lai izvērstu/sakļautu visus vienumus) -document_outline_label=Dokumenta saturs -attachments.title=Rādīt pielikumus -attachments_label=Pielikumi -thumbs.title=Parādīt sīktēlus -thumbs_label=Sīktēli -findbar.title=Meklēt dokumentā -findbar_label=Meklēt - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Lapa {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Lapas {{page}} sīktēls - -# Find panel button title and messages -find_input.title=Meklēt -find_input.placeholder=Meklēt dokumentā… -find_previous.title=Atrast iepriekšējo -find_previous_label=Iepriekšējā -find_next.title=Atrast nākamo -find_next_label=Nākamā -find_highlight=Iekrāsot visas -find_match_case_label=Lielo, mazo burtu jutīgs -find_entire_word_label=Veselus vārdus -find_reached_top=Sasniegts dokumenta sākums, turpinām no beigām -find_reached_bottom=Sasniegtas dokumenta beigas, turpinām no sākuma -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} no {{total}} rezultāta -find_match_count[two]={{current}} no {{total}} rezultātiem -find_match_count[few]={{current}} no {{total}} rezultātiem -find_match_count[many]={{current}} no {{total}} rezultātiem -find_match_count[other]={{current}} no {{total}} rezultātiem -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Vairāk nekā {{limit}} rezultāti -find_match_count_limit[one]=Vairāk nekā {{limit}} rezultāti -find_match_count_limit[two]=Vairāk nekā {{limit}} rezultāti -find_match_count_limit[few]=Vairāk nekā {{limit}} rezultāti -find_match_count_limit[many]=Vairāk nekā {{limit}} rezultāti -find_match_count_limit[other]=Vairāk nekā {{limit}} rezultāti -find_not_found=Frāze nav atrasta - -# Predefined zoom values -page_scale_width=Lapas platumā -page_scale_fit=Ietilpinot lapu -page_scale_auto=Automātiskais izmērs -page_scale_actual=Patiesais izmērs -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=Ielādējot PDF notika kļūda. -invalid_file_error=Nederīgs vai bojāts PDF fails. -missing_file_error=PDF fails nav atrasts. -unexpected_response_error=Negaidīa servera atbilde. - -rendering_error=Attēlojot lapu radās kļūda - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} anotācija] -password_label=Ievadiet paroli, lai atvērtu PDF failu. -password_invalid=Nepareiza parole, mēģiniet vēlreiz. -password_ok=Labi -password_cancel=Atcelt - -printing_not_supported=Uzmanību: Drukāšana no šī pārlūka darbojas tikai daļēji. -printing_not_ready=Uzmanību: PDF nav pilnībā ielādēts drukāšanai. -web_fonts_disabled=Tīmekļa fonti nav aktivizēti: Nevar iegult PDF fontus. - diff --git a/static/pdf.js/locale/meh/viewer.ftl b/static/pdf.js/locale/meh/viewer.ftl new file mode 100644 index 00000000..d8bddc9d --- /dev/null +++ b/static/pdf.js/locale/meh/viewer.ftl @@ -0,0 +1,87 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Página yata +pdfjs-zoom-select = + .title = Nasa´a ka´nu/Nasa´a luli +pdfjs-open-file-button-label = Síne + +## Secondary toolbar and context menu + + +## Document properties dialog + +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } + +## 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 }) + +## + +pdfjs-document-properties-linearized-yes = Kuvi +pdfjs-document-properties-close-button = Nakasɨ + +## Print + +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Nkuvi-ka + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-findbar-button-label = Nánuku + +## Thumbnails panel item (tooltip and alt text for images) + + +## Find panel button title and messages + + +## Predefined zoom values + +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } + +## Password + +pdfjs-password-cancel-button = Nkuvi-ka + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/meh/viewer.properties b/static/pdf.js/locale/meh/viewer.properties deleted file mode 100644 index 6ba24cd0..00000000 --- a/static/pdf.js/locale/meh/viewer.properties +++ /dev/null @@ -1,106 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Página yata - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. - -zoom.title=Nasa´a ka´nu/Nasa´a luli -open_file_label=Síne - -# Secondary toolbar and context menu - - - - -# Document properties dialog box -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized_yes=Kuvi -document_properties_close=Nakasɨ - -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Nkuvi-ka - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -findbar_label=Nánuku - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. - -# Find panel button title and messages -find_input.title=Nánuku -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} - -# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an -# english string describing the error. -# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack -# trace. -# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename -# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number - -# Predefined zoom values -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -password_cancel=Nkuvi-ka - diff --git a/static/pdf.js/locale/mk/viewer.ftl b/static/pdf.js/locale/mk/viewer.ftl new file mode 100644 index 00000000..47d24b24 --- /dev/null +++ b/static/pdf.js/locale/mk/viewer.ftl @@ -0,0 +1,215 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = Премини во презентациски режим +pdfjs-presentation-mode-button-label = Презентациски режим +pdfjs-open-file-button = + .title = Отворање датотека +pdfjs-open-file-button-label = Отвори +pdfjs-print-button = + .title = Печатење +pdfjs-print-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 = Алатка за избор на текст + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Својства на документот… +pdfjs-document-properties-button-label = Својства на документот… +pdfjs-document-properties-file-name = Име на датотека: +pdfjs-document-properties-file-size = Големина на датотеката: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } бајти) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } МБ ({ $size_b } бајти) +pdfjs-document-properties-title = Наслов: +pdfjs-document-properties-author = Автор: +pdfjs-document-properties-subject = Тема: +pdfjs-document-properties-keywords = Клучни зборови: +pdfjs-document-properties-creation-date = Датум на создавање: +pdfjs-document-properties-modification-date = Датум на промена: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Креатор: +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 = портрет +pdfjs-document-properties-page-size-orientation-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 = Писмо + +## 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 }) + +## + +pdfjs-document-properties-linearized-yes = Да +pdfjs-document-properties-linearized-no = Не +pdfjs-document-properties-close-button = Затвори + +## Print + +pdfjs-print-progress-message = Документ се подготвува за печатење… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Откажи +pdfjs-printing-not-supported = Предупредување: Печатењето не е целосно поддржано во овој прелистувач. +pdfjs-printing-not-ready = Предупредување: PDF документот не е целосно вчитан за печатење. + +## 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-thumbs-button = + .title = Прикажување на икони +pdfjs-thumbs-button-label = Икони +pdfjs-findbar-button = + .title = Најди во документот +pdfjs-findbar-button-label = Најди + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Страница { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Икона од страница { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Пронајди + .placeholder = Пронајди во документот… +pdfjs-find-previous-button = + .title = Најди ја предходната појава на фразата +pdfjs-find-previous-button-label = Претходно +pdfjs-find-next-button = + .title = Најди ја следната појава на фразата +pdfjs-find-next-button-label = Следно +pdfjs-find-highlight-checkbox = Означи сѐ +pdfjs-find-match-case-checkbox-label = Токму така +pdfjs-find-entire-word-checkbox-label = Цели зборови +pdfjs-find-reached-top = Барањето стигна до почетокот на документот и почнува од крајот +pdfjs-find-reached-bottom = Барањето стигна до крајот на документот и почнува од почеток +pdfjs-find-not-found = Фразата не е пронајдена + +## 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 + + +## Loading indicator messages + +pdfjs-loading-error = Настана грешка при вчитувањето на PDF-от. +pdfjs-invalid-file-error = Невалидна или корумпирана PDF датотека. +pdfjs-missing-file-error = Недостасува PDF документ. +pdfjs-unexpected-response-error = Неочекуван одговор од серверот. +pdfjs-rendering-error = Настана грешка при прикажувањето на страницата. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } + +## Password + +pdfjs-password-label = Внесете ја лозинката за да ја отворите оваа датотека. +pdfjs-password-invalid = Невалидна лозинка. Обидете се повторно. +pdfjs-password-ok-button = Во ред +pdfjs-password-cancel-button = Откажи +pdfjs-web-fonts-disabled = Интернет фонтовите се оневозможени: не може да се користат вградените PDF фонтови. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/mk/viewer.properties b/static/pdf.js/locale/mk/viewer.properties deleted file mode 100644 index 13cc47bd..00000000 --- a/static/pdf.js/locale/mk/viewer.properties +++ /dev/null @@ -1,211 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Претходна страница -previous_label=Претходна -next.title=Следна страница -next_label=Следна - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Страница -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=од {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} од {{pagesCount}}) - -zoom_out.title=Намалување -zoom_out_label=Намали -zoom_in.title=Зголемување -zoom_in_label=Зголеми -zoom.title=Променување на големина -presentation_mode.title=Премини во презентациски режим -presentation_mode_label=Презентациски режим -open_file.title=Отворање датотека -open_file_label=Отвори -print.title=Печатење -print_label=Печати -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -# LOCALIZATION NOTE (download_button_label): 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. -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. - -# Secondary toolbar and context menu -tools.title=Алатки -tools_label=Алатки -first_page.title=Оди до првата страница -first_page_label=Оди до првата страница -last_page.title=Оди до последната страница -last_page_label=Оди до последната страница -page_rotate_cw.title=Ротирај по стрелките на часовникот -page_rotate_cw_label=Ротирај по стрелките на часовникот -page_rotate_ccw.title=Ротирај спротивно од стрелките на часовникот -page_rotate_ccw_label=Ротирај спротивно од стрелките на часовникот - -cursor_text_select_tool.title=Овозможи алатка за избор на текст -cursor_text_select_tool_label=Алатка за избор на текст - - - -# Document properties dialog box -document_properties.title=Својства на документот… -document_properties_label=Својства на документот… -document_properties_file_name=Име на датотека: -document_properties_file_size=Големина на датотеката: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} КБ ({{size_b}} бајти) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} МБ ({{size_b}} бајти) -document_properties_title=Наслов: -document_properties_author=Автор: -document_properties_subject=Тема: -document_properties_keywords=Клучни зборови: -document_properties_creation_date=Датум на создавање: -document_properties_modification_date=Датум на промена: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Креатор: -document_properties_version=Верзија на PDF: -document_properties_page_count=Број на страници: -document_properties_page_size=Големина на страница: -document_properties_page_size_unit_inches=инч -document_properties_page_size_unit_millimeters=мм -document_properties_page_size_orientation_portrait=портрет -document_properties_page_size_orientation_landscape=пејзаж -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Писмо -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized_yes=Да -document_properties_linearized_no=Не -document_properties_close=Затвори - -print_progress_message=Документ се подготвува за печатење… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Откажи - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Вклучи странична лента -toggle_sidebar_label=Вклучи странична лента -document_outline_label=Содржина на документот -attachments.title=Прикажи додатоци -thumbs.title=Прикажување на икони -thumbs_label=Икони -findbar.title=Најди во документот -findbar_label=Најди - -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Страница {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Икона од страница {{page}} - -# Find panel button title and messages -find_input.title=Пронајди -find_input.placeholder=Пронајди во документот… -find_previous.title=Најди ја предходната појава на фразата -find_previous_label=Претходно -find_next.title=Најди ја следната појава на фразата -find_next_label=Следно -find_highlight=Означи сѐ -find_match_case_label=Токму така -find_entire_word_label=Цели зборови -find_reached_top=Барањето стигна до почетокот на документот и почнува од крајот -find_reached_bottom=Барањето стигна до крајот на документот и почнува од почеток -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} од {{total}} совпаѓања -find_match_count[two]={{current}} од {{total}} совпаѓања -find_match_count[few]={{current}} од {{total}} совпаѓања -find_match_count[many]={{current}} од {{total}} совпаѓања -find_match_count[other]={{current}} од {{total}} совпаѓања -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Повеќе од {{limit}} совпаѓања -find_match_count_limit[one]=Повеќе од {{limit}} совпаѓање -find_match_count_limit[two]=Повеќе од {{limit}} совпаѓања -find_match_count_limit[few]=Повеќе од {{limit}} совпаѓања -find_match_count_limit[many]=Повеќе од {{limit}} совпаѓања -find_match_count_limit[other]=Повеќе од {{limit}} совпаѓања -find_not_found=Фразата не е пронајдена - -# Predefined zoom values -page_scale_width=Ширина на страница -page_scale_fit=Цела страница -page_scale_auto=Автоматска големина -page_scale_actual=Вистинска големина -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Настана грешка при вчитувањето на PDF-от. -invalid_file_error=Невалидна или корумпирана PDF датотека. -missing_file_error=Недостасува PDF документ. -unexpected_response_error=Неочекуван одговор од серверот. -rendering_error=Настана грешка при прикажувањето на страницата. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -password_label=Внесете ја лозинката за да ја отворите оваа датотека. -password_invalid=Невалидна лозинка. Обидете се повторно. -password_ok=Во ред -password_cancel=Откажи - -printing_not_supported=Предупредување: Печатењето не е целосно поддржано во овој прелистувач. -printing_not_ready=Предупредување: PDF документот не е целосно вчитан за печатење. -web_fonts_disabled=Интернет фонтовите се оневозможени: не може да се користат вградените PDF фонтови. - -# Editor - - - -# Editor Parameters - -# Editor aria diff --git a/static/pdf.js/locale/mr/viewer.ftl b/static/pdf.js/locale/mr/viewer.ftl new file mode 100644 index 00000000..49948b19 --- /dev/null +++ b/static/pdf.js/locale/mr/viewer.ftl @@ -0,0 +1,239 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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 = ({ $pagesCount } पैकी { $pageNumber }) +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-presentation-mode-button = + .title = प्रस्तुतिकरण मोडचा वापर करा +pdfjs-presentation-mode-button-label = प्रस्तुतिकरण मोड +pdfjs-open-file-button = + .title = फाइल उघडा +pdfjs-open-file-button-label = उघडा +pdfjs-print-button = + .title = छपाई करा +pdfjs-print-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-vertical-button = + .title = अनुलंब स्क्रोलिंग वापरा +pdfjs-scroll-vertical-button-label = अनुलंब स्क्रोलिंग +pdfjs-scroll-horizontal-button = + .title = क्षैतिज स्क्रोलिंग वापरा +pdfjs-scroll-horizontal-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 = फाइल आकार: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } बाइट्स) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } बाइट्स) +pdfjs-document-properties-title = शिर्षक: +pdfjs-document-properties-author = लेखक: +pdfjs-document-properties-subject = विषय: +pdfjs-document-properties-keywords = मुख्यशब्द: +pdfjs-document-properties-creation-date = निर्माण दिनांक: +pdfjs-document-properties-modification-date = दुरूस्ती दिनांक: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = उभी मांडणी +pdfjs-document-properties-page-size-orientation-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 = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = जलद वेब दृष्य: +pdfjs-document-properties-linearized-yes = हो +pdfjs-document-properties-linearized-no = नाही +pdfjs-document-properties-close-button = बंद करा + +## Print + +pdfjs-print-progress-message = छपाई करीता पृष्ठ तयार करीत आहे… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = रद्द करा +pdfjs-printing-not-supported = सावधानता: या ब्राउझरतर्फे छपाइ पूर्णपणे समर्थीत नाही. +pdfjs-printing-not-ready = सावधानता: छपाईकरिता PDF पूर्णतया लोड झाले नाही. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = बाजूचीपट्टी टॉगल करा +pdfjs-toggle-sidebar-button-label = बाजूचीपट्टी टॉगल करा +pdfjs-document-outline-button = + .title = दस्तऐवज बाह्यरेखा दर्शवा (विस्तृत करण्यासाठी दोनवेळा क्लिक करा /सर्व घटक दाखवा) +pdfjs-document-outline-button-label = दस्तऐवज रूपरेषा +pdfjs-attachments-button = + .title = जोडपत्र दाखवा +pdfjs-attachments-button-label = जोडपत्र +pdfjs-thumbs-button = + .title = थंबनेल्स् दाखवा +pdfjs-thumbs-button-label = थंबनेल्स् +pdfjs-findbar-button = + .title = दस्तऐवजात शोधा +pdfjs-findbar-button-label = शोधा + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = पृष्ठ { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = पृष्ठाचे थंबनेल { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = शोधा + .placeholder = दस्तऐवजात शोधा… +pdfjs-find-previous-button = + .title = वाकप्रयोगची मागील घटना शोधा +pdfjs-find-previous-button-label = मागील +pdfjs-find-next-button = + .title = वाकप्रयोगची पुढील घटना शोधा +pdfjs-find-next-button-label = पुढील +pdfjs-find-highlight-checkbox = सर्व ठळक करा +pdfjs-find-match-case-checkbox-label = आकार जुळवा +pdfjs-find-entire-word-checkbox-label = संपूर्ण शब्द +pdfjs-find-reached-top = दस्तऐवजाच्या शीर्षकास पोहचले, तळपासून पुढे +pdfjs-find-reached-bottom = दस्तऐवजाच्या तळाला पोहचले, शीर्षकापासून पुढे +pdfjs-find-not-found = वाकप्रयोग आढळले नाही + +## 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 + + +## Loading indicator messages + +pdfjs-loading-error = PDF लोड करतेवेळी त्रुटी आढळली. +pdfjs-invalid-file-error = अवैध किंवा दोषीत PDF फाइल. +pdfjs-missing-file-error = न आढळणारी PDF फाइल. +pdfjs-unexpected-response-error = अनपेक्षित सर्व्हर प्रतिसाद. +pdfjs-rendering-error = पृष्ठ दाखवतेवेळी त्रुटी आढळली. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } टिपण्णी] + +## Password + +pdfjs-password-label = ही PDF फाइल उघडण्याकरिता पासवर्ड द्या. +pdfjs-password-invalid = अवैध पासवर्ड. कृपया पुन्हा प्रयत्न करा. +pdfjs-password-ok-button = ठीक आहे +pdfjs-password-cancel-button = रद्द करा +pdfjs-web-fonts-disabled = वेब टंक असमर्थीत आहेत: एम्बेडेड PDF टंक वापर अशक्य. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/mr/viewer.properties b/static/pdf.js/locale/mr/viewer.properties deleted file mode 100644 index 9f261051..00000000 --- a/static/pdf.js/locale/mr/viewer.properties +++ /dev/null @@ -1,210 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=मागील पृष्ठ -previous_label=मागील -next.title=पुढील पृष्ठ -next_label=पुढील - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=पृष्ठ -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages={{pagesCount}}पैकी -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pagesCount}} पैकी {{pageNumber}}) - -zoom_out.title=छोटे करा -zoom_out_label=छोटे करा -zoom_in.title=मोठे करा -zoom_in_label=मोठे करा -zoom.title=लहान किंवा मोठे करा -presentation_mode.title=प्रस्तुतिकरण मोडचा वापर करा -presentation_mode_label=प्रस्तुतिकरण मोड -open_file.title=फाइल उघडा -open_file_label=उघडा -print.title=छपाई करा -print_label=छपाई करा - -# Secondary toolbar and context menu -tools.title=साधने -tools_label=साधने -first_page.title=पहिल्या पृष्ठावर जा -first_page_label=पहिल्या पृष्ठावर जा -last_page.title=शेवटच्या पृष्ठावर जा -last_page_label=शेवटच्या पृष्ठावर जा -page_rotate_cw.title=घड्याळाच्या काट्याच्या दिशेने फिरवा -page_rotate_cw_label=घड्याळाच्या काट्याच्या दिशेने फिरवा -page_rotate_ccw.title=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा -page_rotate_ccw_label=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा - -cursor_text_select_tool.title=मजकूर निवड साधन कार्यान्वयीत करा -cursor_text_select_tool_label=मजकूर निवड साधन -cursor_hand_tool.title=हात साधन कार्यान्वित करा -cursor_hand_tool_label=हस्त साधन - -scroll_vertical.title=अनुलंब स्क्रोलिंग वापरा -scroll_vertical_label=अनुलंब स्क्रोलिंग -scroll_horizontal.title=क्षैतिज स्क्रोलिंग वापरा -scroll_horizontal_label=क्षैतिज स्क्रोलिंग - - -# Document properties dialog box -document_properties.title=दस्तऐवज गुणधर्म… -document_properties_label=दस्तऐवज गुणधर्म… -document_properties_file_name=फाइलचे नाव: -document_properties_file_size=फाइल आकार: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} बाइट्स) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} बाइट्स) -document_properties_title=शिर्षक: -document_properties_author=लेखक: -document_properties_subject=विषय: -document_properties_keywords=मुख्यशब्द: -document_properties_creation_date=निर्माण दिनांक: -document_properties_modification_date=दुरूस्ती दिनांक: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=निर्माता: -document_properties_producer=PDF निर्माता: -document_properties_version=PDF आवृत्ती: -document_properties_page_count=पृष्ठ संख्या: -document_properties_page_size=पृष्ठ आकार: -document_properties_page_size_unit_inches=इंच -document_properties_page_size_unit_millimeters=मीमी -document_properties_page_size_orientation_portrait=उभी मांडणी -document_properties_page_size_orientation_landscape=आडवे -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=जलद वेब दृष्य: -document_properties_linearized_yes=हो -document_properties_linearized_no=नाही -document_properties_close=बंद करा - -print_progress_message=छपाई करीता पृष्ठ तयार करीत आहे… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=रद्द करा - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=बाजूचीपट्टी टॉगल करा -toggle_sidebar_label=बाजूचीपट्टी टॉगल करा -document_outline.title=दस्तऐवज बाह्यरेखा दर्शवा (विस्तृत करण्यासाठी दोनवेळा क्लिक करा /सर्व घटक दाखवा) -document_outline_label=दस्तऐवज रूपरेषा -attachments.title=जोडपत्र दाखवा -attachments_label=जोडपत्र -thumbs.title=थंबनेल्स् दाखवा -thumbs_label=थंबनेल्स् -findbar.title=दस्तऐवजात शोधा -findbar_label=शोधा - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=पृष्ठ {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=पृष्ठाचे थंबनेल {{page}} - -# Find panel button title and messages -find_input.title=शोधा -find_input.placeholder=दस्तऐवजात शोधा… -find_previous.title=वाकप्रयोगची मागील घटना शोधा -find_previous_label=मागील -find_next.title=वाकप्रयोगची पुढील घटना शोधा -find_next_label=पुढील -find_highlight=सर्व ठळक करा -find_match_case_label=आकार जुळवा -find_entire_word_label=संपूर्ण शब्द -find_reached_top=दस्तऐवजाच्या शीर्षकास पोहचले, तळपासून पुढे -find_reached_bottom=दस्तऐवजाच्या तळाला पोहचले, शीर्षकापासून पुढे -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{total}} पैकी {{current}} सुसंगत -find_match_count[two]={{total}} पैकी {{current}} सुसंगत -find_match_count[few]={{total}} पैकी {{current}} सुसंगत -find_match_count[many]={{total}} पैकी {{current}} सुसंगत -find_match_count[other]={{total}} पैकी {{current}} सुसंगत -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]={{limit}} पेक्षा अधिक जुळण्या -find_match_count_limit[one]={{limit}} पेक्षा अधिक जुळण्या -find_match_count_limit[two]={{limit}} पेक्षा अधिक जुळण्या -find_match_count_limit[few]={{limit}} पेक्षा अधिक जुळण्या -find_match_count_limit[many]={{limit}} पेक्षा अधिक जुळण्या -find_match_count_limit[other]={{limit}} पेक्षा अधिक जुळण्या -find_not_found=वाकप्रयोग आढळले नाही - -# Predefined zoom values -page_scale_width=पृष्ठाची रूंदी -page_scale_fit=पृष्ठ बसवा -page_scale_auto=स्वयं लाहन किंवा मोठे करणे -page_scale_actual=प्रत्यक्ष आकार -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=PDF लोड करतेवेळी त्रुटी आढळली. -invalid_file_error=अवैध किंवा दोषीत PDF फाइल. -missing_file_error=न आढळणारी PDF फाइल. -unexpected_response_error=अनपेक्षित सर्व्हर प्रतिसाद. - -rendering_error=पृष्ठ दाखवतेवेळी त्रुटी आढळली. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} टिपण्णी] -password_label=ही PDF फाइल उघडण्याकरिता पासवर्ड द्या. -password_invalid=अवैध पासवर्ड. कृपया पुन्हा प्रयत्न करा. -password_ok=ठीक आहे -password_cancel=रद्द करा - -printing_not_supported=सावधानता: या ब्राउझरतर्फे छपाइ पूर्णपणे समर्थीत नाही. -printing_not_ready=सावधानता: छपाईकरिता PDF पूर्णतया लोड झाले नाही. -web_fonts_disabled=वेब टंक असमर्थीत आहेत: एम्बेडेड PDF टंक वापर अशक्य. - diff --git a/static/pdf.js/locale/ms/viewer.ftl b/static/pdf.js/locale/ms/viewer.ftl new file mode 100644 index 00000000..11b86651 --- /dev/null +++ b/static/pdf.js/locale/ms/viewer.ftl @@ -0,0 +1,247 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Halaman Dahulu +pdfjs-previous-button-label = Dahulu +pdfjs-next-button = + .title = Halaman Berikut +pdfjs-next-button-label = Berikut +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Halaman +# 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 = daripada { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } daripada { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zum Keluar +pdfjs-zoom-out-button-label = Zum Keluar +pdfjs-zoom-in-button = + .title = Zum Masuk +pdfjs-zoom-in-button-label = Zum Masuk +pdfjs-zoom-select = + .title = Zum +pdfjs-presentation-mode-button = + .title = Tukar ke Mod Persembahan +pdfjs-presentation-mode-button-label = Mod Persembahan +pdfjs-open-file-button = + .title = Buka Fail +pdfjs-open-file-button-label = Buka +pdfjs-print-button = + .title = Cetak +pdfjs-print-button-label = Cetak + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Alatan +pdfjs-tools-button-label = Alatan +pdfjs-first-page-button = + .title = Pergi ke Halaman Pertama +pdfjs-first-page-button-label = Pergi ke Halaman Pertama +pdfjs-last-page-button = + .title = Pergi ke Halaman Terakhir +pdfjs-last-page-button-label = Pergi ke Halaman Terakhir +pdfjs-page-rotate-cw-button = + .title = Berputar ikut arah Jam +pdfjs-page-rotate-cw-button-label = Berputar ikut arah Jam +pdfjs-page-rotate-ccw-button = + .title = Pusing berlawan arah jam +pdfjs-page-rotate-ccw-button-label = Pusing berlawan arah jam +pdfjs-cursor-text-select-tool-button = + .title = Dayakan Alatan Pilihan Teks +pdfjs-cursor-text-select-tool-button-label = Alatan Pilihan Teks +pdfjs-cursor-hand-tool-button = + .title = Dayakan Alatan Tangan +pdfjs-cursor-hand-tool-button-label = Alatan Tangan +pdfjs-scroll-vertical-button = + .title = Guna Skrol Menegak +pdfjs-scroll-vertical-button-label = Skrol Menegak +pdfjs-scroll-horizontal-button = + .title = Guna Skrol Mengufuk +pdfjs-scroll-horizontal-button-label = Skrol Mengufuk +pdfjs-scroll-wrapped-button = + .title = Guna Skrol Berbalut +pdfjs-scroll-wrapped-button-label = Skrol Berbalut +pdfjs-spread-none-button = + .title = Jangan hubungkan hamparan halaman +pdfjs-spread-none-button-label = Tanpa Hamparan +pdfjs-spread-odd-button = + .title = Hubungkan hamparan halaman dengan halaman nombor ganjil +pdfjs-spread-odd-button-label = Hamparan Ganjil +pdfjs-spread-even-button = + .title = Hubungkan hamparan halaman dengan halaman nombor genap +pdfjs-spread-even-button-label = Hamparan Seimbang + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Sifat Dokumen… +pdfjs-document-properties-button-label = Sifat Dokumen… +pdfjs-document-properties-file-name = Nama fail: +pdfjs-document-properties-file-size = Saiz fail: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bait) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bait) +pdfjs-document-properties-title = Tajuk: +pdfjs-document-properties-author = Pengarang: +pdfjs-document-properties-subject = Subjek: +pdfjs-document-properties-keywords = Kata kunci: +pdfjs-document-properties-creation-date = Masa Dicipta: +pdfjs-document-properties-modification-date = Tarikh Ubahsuai: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Pencipta: +pdfjs-document-properties-producer = Pengeluar PDF: +pdfjs-document-properties-version = Versi PDF: +pdfjs-document-properties-page-count = Kiraan Laman: +pdfjs-document-properties-page-size = Saiz Halaman: +pdfjs-document-properties-page-size-unit-inches = dalam +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = potret +pdfjs-document-properties-page-size-orientation-landscape = landskap +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Paparan Web Pantas: +pdfjs-document-properties-linearized-yes = Ya +pdfjs-document-properties-linearized-no = Tidak +pdfjs-document-properties-close-button = Tutup + +## Print + +pdfjs-print-progress-message = Menyediakan dokumen untuk dicetak… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Batal +pdfjs-printing-not-supported = Amaran: Cetakan ini tidak sepenuhnya disokong oleh pelayar ini. +pdfjs-printing-not-ready = Amaran: PDF tidak sepenuhnya dimuatkan untuk dicetak. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Togol Bar Sisi +pdfjs-toggle-sidebar-button-label = Togol Bar Sisi +pdfjs-document-outline-button = + .title = Papar Rangka Dokumen (klik-dua-kali untuk kembangkan/kolaps semua item) +pdfjs-document-outline-button-label = Rangka Dokumen +pdfjs-attachments-button = + .title = Papar Lampiran +pdfjs-attachments-button-label = Lampiran +pdfjs-thumbs-button = + .title = Papar Thumbnails +pdfjs-thumbs-button-label = Imej kecil +pdfjs-findbar-button = + .title = Cari didalam Dokumen +pdfjs-findbar-button-label = Cari + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Halaman { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Halaman Imej kecil { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Cari + .placeholder = Cari dalam dokumen… +pdfjs-find-previous-button = + .title = Cari teks frasa berkenaan yang terdahulu +pdfjs-find-previous-button-label = Dahulu +pdfjs-find-next-button = + .title = Cari teks frasa berkenaan yang berikut +pdfjs-find-next-button-label = Berikut +pdfjs-find-highlight-checkbox = Serlahkan semua +pdfjs-find-match-case-checkbox-label = Huruf sepadan +pdfjs-find-entire-word-checkbox-label = Seluruh perkataan +pdfjs-find-reached-top = Mencapai teratas daripada dokumen, sambungan daripada bawah +pdfjs-find-reached-bottom = Mencapai terakhir daripada dokumen, sambungan daripada atas +pdfjs-find-not-found = Frasa tidak ditemui + +## Predefined zoom values + +pdfjs-page-scale-width = Lebar Halaman +pdfjs-page-scale-fit = Muat Halaman +pdfjs-page-scale-auto = Zoom Automatik +pdfjs-page-scale-actual = Saiz Sebenar +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = Masalah berlaku semasa menuatkan sebuah PDF. +pdfjs-invalid-file-error = Tidak sah atau fail PDF rosak. +pdfjs-missing-file-error = Fail PDF Hilang. +pdfjs-unexpected-response-error = Respon pelayan yang tidak dijangka. +pdfjs-rendering-error = Ralat berlaku ketika memberikan halaman. + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Anotasi] + +## Password + +pdfjs-password-label = Masukan kata kunci untuk membuka fail PDF ini. +pdfjs-password-invalid = Kata laluan salah. Cuba lagi. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Batal +pdfjs-web-fonts-disabled = Fon web dinyahdayakan: tidak dapat menggunakan fon terbenam PDF. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/ms/viewer.properties b/static/pdf.js/locale/ms/viewer.properties deleted file mode 100644 index 8edd79ba..00000000 --- a/static/pdf.js/locale/ms/viewer.properties +++ /dev/null @@ -1,214 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Halaman Dahulu -previous_label=Dahulu -next.title=Halaman Berikut -next_label=Berikut - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Halaman -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=daripada {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} daripada {{pagesCount}}) - -zoom_out.title=Zum Keluar -zoom_out_label=Zum Keluar -zoom_in.title=Zum Masuk -zoom_in_label=Zum Masuk -zoom.title=Zum -presentation_mode.title=Tukar ke Mod Persembahan -presentation_mode_label=Mod Persembahan -open_file.title=Buka Fail -open_file_label=Buka -print.title=Cetak -print_label=Cetak - -# Secondary toolbar and context menu -tools.title=Alatan -tools_label=Alatan -first_page.title=Pergi ke Halaman Pertama -first_page_label=Pergi ke Halaman Pertama -last_page.title=Pergi ke Halaman Terakhir -last_page_label=Pergi ke Halaman Terakhir -page_rotate_cw.title=Berputar ikut arah Jam -page_rotate_cw_label=Berputar ikut arah Jam -page_rotate_ccw.title=Pusing berlawan arah jam -page_rotate_ccw_label=Pusing berlawan arah jam - -cursor_text_select_tool.title=Dayakan Alatan Pilihan Teks -cursor_text_select_tool_label=Alatan Pilihan Teks -cursor_hand_tool.title=Dayakan Alatan Tangan -cursor_hand_tool_label=Alatan Tangan - -scroll_vertical.title=Guna Skrol Menegak -scroll_vertical_label=Skrol Menegak -scroll_horizontal.title=Guna Skrol Mengufuk -scroll_horizontal_label=Skrol Mengufuk -scroll_wrapped.title=Guna Skrol Berbalut -scroll_wrapped_label=Skrol Berbalut - -spread_none.title=Jangan hubungkan hamparan halaman -spread_none_label=Tanpa Hamparan -spread_odd.title=Hubungkan hamparan halaman dengan halaman nombor ganjil -spread_odd_label=Hamparan Ganjil -spread_even.title=Hubungkan hamparan halaman dengan halaman nombor genap -spread_even_label=Hamparan Seimbang - -# Document properties dialog box -document_properties.title=Sifat Dokumen… -document_properties_label=Sifat Dokumen… -document_properties_file_name=Nama fail: -document_properties_file_size=Saiz fail: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bait) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bait) -document_properties_title=Tajuk: -document_properties_author=Pengarang: -document_properties_subject=Subjek: -document_properties_keywords=Kata kunci: -document_properties_creation_date=Masa Dicipta: -document_properties_modification_date=Tarikh Ubahsuai: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Pencipta: -document_properties_producer=Pengeluar PDF: -document_properties_version=Versi PDF: -document_properties_page_count=Kiraan Laman: -document_properties_page_size=Saiz Halaman: -document_properties_page_size_unit_inches=dalam -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=potret -document_properties_page_size_orientation_landscape=landskap -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Paparan Web Pantas: -document_properties_linearized_yes=Ya -document_properties_linearized_no=Tidak -document_properties_close=Tutup - -print_progress_message=Menyediakan dokumen untuk dicetak… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Batal - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Togol Bar Sisi -toggle_sidebar_label=Togol Bar Sisi -document_outline.title=Papar Rangka Dokumen (klik-dua-kali untuk kembangkan/kolaps semua item) -document_outline_label=Rangka Dokumen -attachments.title=Papar Lampiran -attachments_label=Lampiran -thumbs.title=Papar Thumbnails -thumbs_label=Imej kecil -findbar.title=Cari didalam Dokumen -findbar_label=Cari - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Halaman {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Halaman Imej kecil {{page}} - -# Find panel button title and messages -find_input.title=Cari -find_input.placeholder=Cari dalam dokumen… -find_previous.title=Cari teks frasa berkenaan yang terdahulu -find_previous_label=Dahulu -find_next.title=Cari teks frasa berkenaan yang berikut -find_next_label=Berikut -find_highlight=Serlahkan semua -find_match_case_label=Huruf sepadan -find_entire_word_label=Seluruh perkataan -find_reached_top=Mencapai teratas daripada dokumen, sambungan daripada bawah -find_reached_bottom=Mencapai terakhir daripada dokumen, sambungan daripada atas -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} daripada {{total}} padanan -find_match_count[two]={{current}} daripada {{total}} padanan -find_match_count[few]={{current}} daripada {{total}} padanan -find_match_count[many]={{current}} daripada {{total}} padanan -find_match_count[other]={{current}} daripada {{total}} padanan -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Lebih daripada {{limit}} padanan -find_match_count_limit[one]=Lebih daripada {{limit}} padanan -find_match_count_limit[two]=Lebih daripada {{limit}} padanan -find_match_count_limit[few]=Lebih daripada {{limit}} padanan -find_match_count_limit[many]=Lebih daripada {{limit}} padanan -find_match_count_limit[other]=Lebih daripada {{limit}} padanan -find_not_found=Frasa tidak ditemui - -# Predefined zoom values -page_scale_width=Lebar Halaman -page_scale_fit=Muat Halaman -page_scale_auto=Zoom Automatik -page_scale_actual=Saiz Sebenar -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=Masalah berlaku semasa menuatkan sebuah PDF. -invalid_file_error=Tidak sah atau fail PDF rosak. -missing_file_error=Fail PDF Hilang. -unexpected_response_error=Respon pelayan yang tidak dijangka. - -rendering_error=Ralat berlaku ketika memberikan halaman. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Anotasi] -password_label=Masukan kata kunci untuk membuka fail PDF ini. -password_invalid=Kata laluan salah. Cuba lagi. -password_ok=OK -password_cancel=Batal - -printing_not_supported=Amaran: Cetakan ini tidak sepenuhnya disokong oleh pelayar ini. -printing_not_ready=Amaran: PDF tidak sepenuhnya dimuatkan untuk dicetak. -web_fonts_disabled=Fon web dinyahdayakan: tidak dapat menggunakan fon terbenam PDF. - diff --git a/static/pdf.js/locale/my/viewer.ftl b/static/pdf.js/locale/my/viewer.ftl new file mode 100644 index 00000000..d3b973d8 --- /dev/null +++ b/static/pdf.js/locale/my/viewer.ftl @@ -0,0 +1,206 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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 = ({ $pagesCount } ၏ { $pageNumber }) +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-presentation-mode-button = + .title = ဆွေးနွေးတင်ပြစနစ်သို့ ကူးပြောင်းပါ +pdfjs-presentation-mode-button-label = ဆွေးနွေးတင်ပြစနစ် +pdfjs-open-file-button = + .title = ဖိုင်အားဖွင့်ပါ။ +pdfjs-open-file-button-label = ဖွင့်ပါ +pdfjs-print-button = + .title = ပုံနှိုပ်ပါ +pdfjs-print-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 = နာရီလက်တံ ပြောင်းပြန် + +## Document properties dialog + +pdfjs-document-properties-button = + .title = မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ +pdfjs-document-properties-button-label = မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ +pdfjs-document-properties-file-name = ဖိုင် : +pdfjs-document-properties-file-size = ဖိုင်ဆိုဒ် : +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } ကီလိုဘိုတ် ({ $size_b }ဘိုတ်) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = ခေါင်းစဉ်‌ - +pdfjs-document-properties-author = ရေးသားသူ: +pdfjs-document-properties-subject = အကြောင်းအရာ: +pdfjs-document-properties-keywords = သော့ချက် စာလုံး: +pdfjs-document-properties-creation-date = ထုတ်လုပ်ရက်စွဲ: +pdfjs-document-properties-modification-date = ပြင်ဆင်ရက်စွဲ: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = ဖန်တီးသူ: +pdfjs-document-properties-producer = PDF ထုတ်လုပ်သူ: +pdfjs-document-properties-version = PDF ဗားရှင်း: +pdfjs-document-properties-page-count = စာမျက်နှာအရေအတွက်: + +## 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-close-button = ပိတ် + +## Print + +pdfjs-print-progress-message = Preparing document for printing… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = ပယ်​ဖျက်ပါ +pdfjs-printing-not-supported = သတိပေးချက်၊ပရင့်ထုတ်ခြင်းကိုဤဘယောက်ဆာသည် ပြည့်ဝစွာထောက်ပံ့မထားပါ ။ +pdfjs-printing-not-ready = သတိပေးချက်: ယခု PDF ဖိုင်သည် ပုံနှိပ်ရန် မပြည့်စုံပါ + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = ဘေးတန်းဖွင့်ပိတ် +pdfjs-toggle-sidebar-button-label = ဖွင့်ပိတ် ဆလိုက်ဒါ +pdfjs-document-outline-button = + .title = စာတမ်းအကျဉ်းချုပ်ကို ပြပါ (စာရင်းအားလုံးကို ချုံ့/ချဲ့ရန် ကလစ်နှစ်ချက်နှိပ်ပါ) +pdfjs-document-outline-button-label = စာတမ်းအကျဉ်းချုပ် +pdfjs-attachments-button = + .title = တွဲချက်များ ပြပါ +pdfjs-attachments-button-label = တွဲထားချက်များ +pdfjs-thumbs-button = + .title = ပုံရိပ်ငယ်များကို ပြပါ +pdfjs-thumbs-button-label = ပုံရိပ်ငယ်များ +pdfjs-findbar-button = + .title = Find in Document +pdfjs-findbar-button-label = ရှာဖွေပါ + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = စာမျက်နှာ { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = စာမျက်နှာရဲ့ ပုံရိပ်ငယ် { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = ရှာဖွေပါ + .placeholder = စာတမ်းထဲတွင် ရှာဖွေရန်… +pdfjs-find-previous-button = + .title = စကားစုရဲ့ အရင် ​ဖြစ်ပွားမှုကို ရှာဖွေပါ +pdfjs-find-previous-button-label = နောက်သို့ +pdfjs-find-next-button = + .title = စကားစုရဲ့ နောက်ထပ် ​ဖြစ်ပွားမှုကို ရှာဖွေပါ +pdfjs-find-next-button-label = ရှေ့သို့ +pdfjs-find-highlight-checkbox = အားလုံးကို မျဉ်းသားပါ +pdfjs-find-match-case-checkbox-label = စာလုံး တိုက်ဆိုင်ပါ +pdfjs-find-reached-top = စာမျက်နှာထိပ် ရောက်နေပြီ၊ အဆုံးကနေ ပြန်စပါ +pdfjs-find-reached-bottom = စာမျက်နှာအဆုံး ရောက်နေပြီ၊ ထိပ်ကနေ ပြန်စပါ +pdfjs-find-not-found = စကားစု မတွေ့ရဘူး + +## 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 + + +## Loading indicator messages + +pdfjs-loading-error = PDF ဖိုင် ကိုဆွဲတင်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။ +pdfjs-invalid-file-error = မရသော သို့ ပျက်နေသော PDF ဖိုင် +pdfjs-missing-file-error = PDF ပျောက်ဆုံး +pdfjs-unexpected-response-error = မမျှော်လင့်ထားသော ဆာဗာမှ ပြန်ကြားချက် +pdfjs-rendering-error = စာမျက်နှာကို ပုံဖော်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။ + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } အဓိပ္ပာယ်ဖွင့်ဆိုချက်] + +## Password + +pdfjs-password-label = ယခု PDF ကို ဖွင့်ရန် စကားဝှက်ကို ရိုက်ပါ။ +pdfjs-password-invalid = စာဝှက် မှားသည်။ ထပ်ကြိုးစားကြည့်ပါ။ +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = ပယ်​ဖျက်ပါ +pdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/my/viewer.properties b/static/pdf.js/locale/my/viewer.properties deleted file mode 100644 index 5a255a71..00000000 --- a/static/pdf.js/locale/my/viewer.properties +++ /dev/null @@ -1,170 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=အရင် စာမျက်နှာ -previous_label=အရင်နေရာ -next.title=ရှေ့ စာမျက်နှာ -next_label=နောက်တခု - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=စာမျက်နှာ -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages={{pagesCount}} ၏ -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pagesCount}} ၏ {{pageNumber}}) - -zoom_out.title=ချုံ့ပါ -zoom_out_label=ချုံ့ပါ -zoom_in.title=ချဲ့ပါ -zoom_in_label=ချဲ့ပါ -zoom.title=ချုံ့/ချဲ့ပါ -presentation_mode.title=ဆွေးနွေးတင်ပြစနစ်သို့ ကူးပြောင်းပါ -presentation_mode_label=ဆွေးနွေးတင်ပြစနစ် -open_file.title=ဖိုင်အားဖွင့်ပါ။ -open_file_label=ဖွင့်ပါ -print.title=ပုံနှိုပ်ပါ -print_label=ပုံနှိုပ်ပါ - -# Secondary toolbar and context menu -tools.title=ကိရိယာများ -tools_label=ကိရိယာများ -first_page.title=ပထမ စာမျက်နှာသို့ -first_page_label=ပထမ စာမျက်နှာသို့ -last_page.title=နောက်ဆုံး စာမျက်နှာသို့ -last_page_label=နောက်ဆုံး စာမျက်နှာသို့ -page_rotate_cw.title=နာရီလက်တံ အတိုင်း -page_rotate_cw_label=နာရီလက်တံ အတိုင်း -page_rotate_ccw.title=နာရီလက်တံ ပြောင်းပြန် -page_rotate_ccw_label=နာရီလက်တံ ပြောင်းပြန် - - - - -# Document properties dialog box -document_properties.title=မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ -document_properties_label=မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ -document_properties_file_name=ဖိုင် : -document_properties_file_size=ဖိုင်ဆိုဒ် : -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} ကီလိုဘိုတ် ({{size_b}}ဘိုတ်) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=ခေါင်းစဉ်‌ - -document_properties_author=ရေးသားသူ: -document_properties_subject=အကြောင်းအရာ:\u0020 -document_properties_keywords=သော့ချက် စာလုံး: -document_properties_creation_date=ထုတ်လုပ်ရက်စွဲ: -document_properties_modification_date=ပြင်ဆင်ရက်စွဲ: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=ဖန်တီးသူ: -document_properties_producer=PDF ထုတ်လုပ်သူ: -document_properties_version=PDF ဗားရှင်း: -document_properties_page_count=စာမျက်နှာအရေအတွက်: -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_close=ပိတ် - -print_progress_message=Preparing document for printing… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=ပယ်​ဖျက်ပါ - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=ဘေးတန်းဖွင့်ပိတ် -toggle_sidebar_label=ဖွင့်ပိတ် ဆလိုက်ဒါ -document_outline.title=စာတမ်းအကျဉ်းချုပ်ကို ပြပါ (စာရင်းအားလုံးကို ချုံ့/ချဲ့ရန် ကလစ်နှစ်ချက်နှိပ်ပါ) -document_outline_label=စာတမ်းအကျဉ်းချုပ် -attachments.title=တွဲချက်များ ပြပါ -attachments_label=တွဲထားချက်များ -thumbs.title=ပုံရိပ်ငယ်များကို ပြပါ -thumbs_label=ပုံရိပ်ငယ်များ -findbar.title=Find in Document -findbar_label=ရှာဖွေပါ - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=စာမျက်နှာ {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=စာမျက်နှာရဲ့ ပုံရိပ်ငယ် {{page}} - -# Find panel button title and messages -find_input.title=ရှာဖွေပါ -find_input.placeholder=စာတမ်းထဲတွင် ရှာဖွေရန်… -find_previous.title=စကားစုရဲ့ အရင် ​ဖြစ်ပွားမှုကို ရှာဖွေပါ -find_previous_label=နောက်သို့ -find_next.title=စကားစုရဲ့ နောက်ထပ် ​ဖြစ်ပွားမှုကို ရှာဖွေပါ -find_next_label=ရှေ့သို့ -find_highlight=အားလုံးကို မျဉ်းသားပါ -find_match_case_label=စာလုံး တိုက်ဆိုင်ပါ -find_reached_top=စာမျက်နှာထိပ် ရောက်နေပြီ၊ အဆုံးကနေ ပြန်စပါ -find_reached_bottom=စာမျက်နှာအဆုံး ရောက်နေပြီ၊ ထိပ်ကနေ ပြန်စပါ -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_not_found=စကားစု မတွေ့ရဘူး - -# Predefined zoom values -page_scale_width=စာမျက်နှာ အကျယ် -page_scale_fit=စာမျက်နှာ ကွက်တိ -page_scale_auto=အလိုအလျောက် ချုံ့ချဲ့ -page_scale_actual=အမှန်တကယ်ရှိတဲ့ အရွယ် -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=PDF ဖိုင် ကိုဆွဲတင်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။ -invalid_file_error=မရသော သို့ ပျက်နေသော PDF ဖိုင် -missing_file_error=PDF ပျောက်ဆုံး -unexpected_response_error=မမျှော်လင့်ထားသော ဆာဗာမှ ပြန်ကြားချက် - -rendering_error=စာမျက်နှာကို ပုံဖော်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။ - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} အဓိပ္ပာယ်ဖွင့်ဆိုချက်] -password_label=ယခု PDF ကို ဖွင့်ရန် စကားဝှက်ကို ရိုက်ပါ။ -password_invalid=စာဝှက် မှားသည်။ ထပ်ကြိုးစားကြည့်ပါ။ -password_ok=OK -password_cancel=ပယ်​ဖျက်ပါ - -printing_not_supported=သတိပေးချက်၊ပရင့်ထုတ်ခြင်းကိုဤဘယောက်ဆာသည် ပြည့်ဝစွာထောက်ပံ့မထားပါ ။ -printing_not_ready=သတိပေးချက်: ယခု PDF ဖိုင်သည် ပုံနှိပ်ရန် မပြည့်စုံပါ -web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts. - diff --git a/static/pdf.js/locale/nb-NO/viewer.ftl b/static/pdf.js/locale/nb-NO/viewer.ftl new file mode 100644 index 00000000..6519adb3 --- /dev/null +++ b/static/pdf.js/locale/nb-NO/viewer.ftl @@ -0,0 +1,396 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Forrige side +pdfjs-previous-button-label = Forrige +pdfjs-next-button = + .title = Neste side +pdfjs-next-button-label = Neste +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Side +# 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 = av { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } av { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zoom ut +pdfjs-zoom-out-button-label = Zoom ut +pdfjs-zoom-in-button = + .title = Zoom inn +pdfjs-zoom-in-button-label = Zoom inn +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Bytt til presentasjonsmodus +pdfjs-presentation-mode-button-label = Presentasjonsmodus +pdfjs-open-file-button = + .title = Åpne fil +pdfjs-open-file-button-label = Åpne +pdfjs-print-button = + .title = Skriv ut +pdfjs-print-button-label = Skriv ut +pdfjs-save-button = + .title = Lagre +pdfjs-save-button-label = Lagre +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Last ned +# 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 = Last ned +pdfjs-bookmark-button = + .title = Gjeldende side (se URL fra gjeldende side) +pdfjs-bookmark-button-label = Gjeldende side + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Verktøy +pdfjs-tools-button-label = Verktøy +pdfjs-first-page-button = + .title = Gå til første side +pdfjs-first-page-button-label = Gå til første side +pdfjs-last-page-button = + .title = Gå til siste side +pdfjs-last-page-button-label = Gå til siste side +pdfjs-page-rotate-cw-button = + .title = Roter med klokken +pdfjs-page-rotate-cw-button-label = Roter med klokken +pdfjs-page-rotate-ccw-button = + .title = Roter mot klokken +pdfjs-page-rotate-ccw-button-label = Roter mot klokken +pdfjs-cursor-text-select-tool-button = + .title = Aktiver tekstmarkeringsverktøy +pdfjs-cursor-text-select-tool-button-label = Tekstmarkeringsverktøy +pdfjs-cursor-hand-tool-button = + .title = Aktiver handverktøy +pdfjs-cursor-hand-tool-button-label = Handverktøy +pdfjs-scroll-page-button = + .title = Bruk siderulling +pdfjs-scroll-page-button-label = Siderulling +pdfjs-scroll-vertical-button = + .title = Bruk vertikal rulling +pdfjs-scroll-vertical-button-label = Vertikal rulling +pdfjs-scroll-horizontal-button = + .title = Bruk horisontal rulling +pdfjs-scroll-horizontal-button-label = Horisontal rulling +pdfjs-scroll-wrapped-button = + .title = Bruk flersiderulling +pdfjs-scroll-wrapped-button-label = Flersiderulling +pdfjs-spread-none-button = + .title = Vis enkeltsider +pdfjs-spread-none-button-label = Enkeltsider +pdfjs-spread-odd-button = + .title = Vis oppslag med ulike sidenumre til venstre +pdfjs-spread-odd-button-label = Oppslag med forside +pdfjs-spread-even-button = + .title = Vis oppslag med like sidenumre til venstre +pdfjs-spread-even-button-label = Oppslag uten forside + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Dokumentegenskaper … +pdfjs-document-properties-button-label = Dokumentegenskaper … +pdfjs-document-properties-file-name = Filnavn: +pdfjs-document-properties-file-size = Filstørrelse: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Dokumentegenskaper … +pdfjs-document-properties-author = Forfatter: +pdfjs-document-properties-subject = Emne: +pdfjs-document-properties-keywords = Nøkkelord: +pdfjs-document-properties-creation-date = Opprettet dato: +pdfjs-document-properties-modification-date = Endret dato: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Opprettet av: +pdfjs-document-properties-producer = PDF-verktøy: +pdfjs-document-properties-version = PDF-versjon: +pdfjs-document-properties-page-count = Sideantall: +pdfjs-document-properties-page-size = Sidestørrelse: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = stående +pdfjs-document-properties-page-size-orientation-landscape = liggende +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Hurtig nettvisning: +pdfjs-document-properties-linearized-yes = Ja +pdfjs-document-properties-linearized-no = Nei +pdfjs-document-properties-close-button = Lukk + +## Print + +pdfjs-print-progress-message = Forbereder dokument for utskrift … +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Avbryt +pdfjs-printing-not-supported = Advarsel: Utskrift er ikke fullstendig støttet av denne nettleseren. +pdfjs-printing-not-ready = Advarsel: PDF er ikke fullstendig innlastet for utskrift. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Slå av/på sidestolpe +pdfjs-toggle-sidebar-notification-button = + .title = Vis/gjem sidestolpe (dokumentet inneholder oversikt/vedlegg/lag) +pdfjs-toggle-sidebar-button-label = Slå av/på sidestolpe +pdfjs-document-outline-button = + .title = Vis dokumentdisposisjonen (dobbeltklikk for å utvide/skjule alle elementer) +pdfjs-document-outline-button-label = Dokumentdisposisjon +pdfjs-attachments-button = + .title = Vis vedlegg +pdfjs-attachments-button-label = Vedlegg +pdfjs-layers-button = + .title = Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand) +pdfjs-layers-button-label = Lag +pdfjs-thumbs-button = + .title = Vis miniatyrbilde +pdfjs-thumbs-button-label = Miniatyrbilde +pdfjs-current-outline-item-button = + .title = Finn gjeldende disposisjonselement +pdfjs-current-outline-item-button-label = Gjeldende disposisjonselement +pdfjs-findbar-button = + .title = Finn i dokumentet +pdfjs-findbar-button-label = Finn +pdfjs-additional-layers = Ytterligere lag + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Side { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatyrbilde av side { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Søk + .placeholder = Søk i dokument… +pdfjs-find-previous-button = + .title = Finn forrige forekomst av frasen +pdfjs-find-previous-button-label = Forrige +pdfjs-find-next-button = + .title = Finn neste forekomst av frasen +pdfjs-find-next-button-label = Neste +pdfjs-find-highlight-checkbox = Uthev alle +pdfjs-find-match-case-checkbox-label = Skill store/små bokstaver +pdfjs-find-match-diacritics-checkbox-label = Samsvar diakritiske tegn +pdfjs-find-entire-word-checkbox-label = Hele ord +pdfjs-find-reached-top = Nådde toppen av dokumentet, fortsetter fra bunnen +pdfjs-find-reached-bottom = Nådde bunnen av dokumentet, fortsetter fra toppen +# 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 } av { $total } treff + *[other] { $current } av { $total } treff + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Mer enn { $limit } treff + *[other] Mer enn { $limit } treff + } +pdfjs-find-not-found = Fant ikke teksten + +## Predefined zoom values + +pdfjs-page-scale-width = Sidebredde +pdfjs-page-scale-fit = Tilpass til siden +pdfjs-page-scale-auto = Automatisk zoom +pdfjs-page-scale-actual = Virkelig størrelse +# 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 = Side { $page } + +## Loading indicator messages + +pdfjs-loading-error = En feil oppstod ved lasting av PDF. +pdfjs-invalid-file-error = Ugyldig eller skadet PDF-fil. +pdfjs-missing-file-error = Manglende PDF-fil. +pdfjs-unexpected-response-error = Uventet serverrespons. +pdfjs-rendering-error = En feil oppstod ved opptegning av siden. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } annotasjon] + +## Password + +pdfjs-password-label = Skriv inn passordet for å åpne denne PDF-filen. +pdfjs-password-invalid = Ugyldig passord. Prøv igjen. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Avbryt +pdfjs-web-fonts-disabled = Web-fonter er avslått: Kan ikke bruke innbundne PDF-fonter. + +## Editing + +pdfjs-editor-free-text-button = + .title = Tekst +pdfjs-editor-free-text-button-label = Tekst +pdfjs-editor-ink-button = + .title = Tegn +pdfjs-editor-ink-button-label = Tegn +pdfjs-editor-stamp-button = + .title = Legg til eller rediger bilder +pdfjs-editor-stamp-button-label = Legg til eller rediger bilder +pdfjs-editor-highlight-button = + .title = Markere +pdfjs-editor-highlight-button-label = Markere +pdfjs-highlight-floating-button = + .title = Markere +pdfjs-highlight-floating-button1 = + .title = Markere + .aria-label = Markere +pdfjs-highlight-floating-button-label = Markere + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Fjern tegningen +pdfjs-editor-remove-freetext-button = + .title = Fjern tekst +pdfjs-editor-remove-stamp-button = + .title = Fjern bildet +pdfjs-editor-remove-highlight-button = + .title = Fjern utheving + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Farge +pdfjs-editor-free-text-size-input = Størrelse +pdfjs-editor-ink-color-input = Farge +pdfjs-editor-ink-thickness-input = Tykkelse +pdfjs-editor-ink-opacity-input = Ugjennomsiktighet +pdfjs-editor-stamp-add-image-button = + .title = Legg til bilde +pdfjs-editor-stamp-add-image-button-label = Legg til bilde +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Tykkelse +pdfjs-editor-free-highlight-thickness-title = + .title = Endre tykkelse når du markerer andre elementer enn tekst +pdfjs-free-text = + .aria-label = Tekstredigering +pdfjs-free-text-default-content = Begynn å skrive… +pdfjs-ink = + .aria-label = Tegneredigering +pdfjs-ink-canvas = + .aria-label = Brukerskapt bilde + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alt-tekst +pdfjs-editor-alt-text-edit-button-label = Rediger alt-tekst tekst +pdfjs-editor-alt-text-dialog-label = Velg et alternativ +pdfjs-editor-alt-text-dialog-description = Alt-tekst (alternativ tekst) hjelper når folk ikke kan se bildet eller når det ikke lastes inn. +pdfjs-editor-alt-text-add-description-label = Legg til en beskrivelse +pdfjs-editor-alt-text-add-description-description = Gå etter 1-2 setninger som beskriver emnet, settingen eller handlingene. +pdfjs-editor-alt-text-mark-decorative-label = Merk som dekorativt +pdfjs-editor-alt-text-mark-decorative-description = Dette brukes til dekorative bilder, som kantlinjer eller vannmerker. +pdfjs-editor-alt-text-cancel-button = Avbryt +pdfjs-editor-alt-text-save-button = Lagre +pdfjs-editor-alt-text-decorative-tooltip = Merket som dekorativ +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = For eksempel, «En ung mann setter seg ved et bord for å spise et måltid» + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Øverste venstre hjørne – endre størrelse +pdfjs-editor-resizer-label-top-middle = Øverst i midten — endre størrelse +pdfjs-editor-resizer-label-top-right = Øverste høyre hjørne – endre størrelse +pdfjs-editor-resizer-label-middle-right = Midt til høyre – endre størrelse +pdfjs-editor-resizer-label-bottom-right = Nederste høyre hjørne – endre størrelse +pdfjs-editor-resizer-label-bottom-middle = Nederst i midten — endre størrelse +pdfjs-editor-resizer-label-bottom-left = Nederste venstre hjørne – endre størrelse +pdfjs-editor-resizer-label-middle-left = Midt til venstre — endre størrelse + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Uthevingsfarge +pdfjs-editor-colorpicker-button = + .title = Endre farge +pdfjs-editor-colorpicker-dropdown = + .aria-label = Fargevalg +pdfjs-editor-colorpicker-yellow = + .title = Gul +pdfjs-editor-colorpicker-green = + .title = Grønn +pdfjs-editor-colorpicker-blue = + .title = Blå +pdfjs-editor-colorpicker-pink = + .title = Rosa +pdfjs-editor-colorpicker-red = + .title = Rød + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Vis alle +pdfjs-editor-highlight-show-all-button = + .title = Vis alle diff --git a/static/pdf.js/locale/nb-NO/viewer.properties b/static/pdf.js/locale/nb-NO/viewer.properties deleted file mode 100644 index 81045315..00000000 --- a/static/pdf.js/locale/nb-NO/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Forrige side -previous_label=Forrige -next.title=Neste side -next_label=Neste - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Side -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=av {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} av {{pagesCount}}) - -zoom_out.title=Zoom ut -zoom_out_label=Zoom ut -zoom_in.title=Zoom inn -zoom_in_label=Zoom inn -zoom.title=Zoom -presentation_mode.title=Bytt til presentasjonsmodus -presentation_mode_label=Presentasjonsmodus -open_file.title=Åpne fil -open_file_label=Åpne -print.title=Skriv ut -print_label=Skriv ut -save.title=Lagre -save_label=Lagre -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Last ned -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Last ned -bookmark1.title=Gjeldende side (se URL fra gjeldende side) -bookmark1_label=Gjeldende side -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Åpne i app -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Åpne i app - -# Secondary toolbar and context menu -tools.title=Verktøy -tools_label=Verktøy -first_page.title=Gå til første side -first_page_label=Gå til første side -last_page.title=Gå til siste side -last_page_label=Gå til siste side -page_rotate_cw.title=Roter med klokken -page_rotate_cw_label=Roter med klokken -page_rotate_ccw.title=Roter mot klokken -page_rotate_ccw_label=Roter mot klokken - -cursor_text_select_tool.title=Aktiver tekstmarkeringsverktøy -cursor_text_select_tool_label=Tekstmarkeringsverktøy -cursor_hand_tool.title=Aktiver handverktøy -cursor_hand_tool_label=Handverktøy - -scroll_page.title=Bruk siderulling -scroll_page_label=Siderulling -scroll_vertical.title=Bruk vertikal rulling -scroll_vertical_label=Vertikal rulling -scroll_horizontal.title=Bruk horisontal rulling -scroll_horizontal_label=Horisontal rulling -scroll_wrapped.title=Bruk flersiderulling -scroll_wrapped_label=Flersiderulling - -spread_none.title=Vis enkeltsider -spread_none_label=Enkeltsider -spread_odd.title=Vis oppslag med ulike sidenumre til venstre -spread_odd_label=Oppslag med forside -spread_even.title=Vis oppslag med like sidenumre til venstre -spread_even_label=Oppslag uten forside - -# Document properties dialog box -document_properties.title=Dokumentegenskaper … -document_properties_label=Dokumentegenskaper … -document_properties_file_name=Filnavn: -document_properties_file_size=Filstørrelse: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Dokumentegenskaper … -document_properties_author=Forfatter: -document_properties_subject=Emne: -document_properties_keywords=Nøkkelord: -document_properties_creation_date=Opprettet dato: -document_properties_modification_date=Endret dato: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Opprettet av: -document_properties_producer=PDF-verktøy: -document_properties_version=PDF-versjon: -document_properties_page_count=Sideantall: -document_properties_page_size=Sidestørrelse: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=stående -document_properties_page_size_orientation_landscape=liggende -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Hurtig nettvisning: -document_properties_linearized_yes=Ja -document_properties_linearized_no=Nei -document_properties_close=Lukk - -print_progress_message=Forbereder dokument for utskrift … -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Avbryt - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Slå av/på sidestolpe -toggle_sidebar_notification2.title=Vis/gjem sidestolpe (dokumentet inneholder oversikt/vedlegg/lag) -toggle_sidebar_label=Slå av/på sidestolpe -document_outline.title=Vis dokumentdisposisjonen (dobbeltklikk for å utvide/skjule alle elementer) -document_outline_label=Dokumentdisposisjon -attachments.title=Vis vedlegg -attachments_label=Vedlegg -layers.title=Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand) -layers_label=Lag -thumbs.title=Vis miniatyrbilde -thumbs_label=Miniatyrbilde -current_outline_item.title=Finn gjeldende disposisjonselement -current_outline_item_label=Gjeldende disposisjonselement -findbar.title=Finn i dokumentet -findbar_label=Finn - -additional_layers=Ytterligere lag -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Side {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Side {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatyrbilde av side {{page}} - -# Find panel button title and messages -find_input.title=Søk -find_input.placeholder=Søk i dokument… -find_previous.title=Finn forrige forekomst av frasen -find_previous_label=Forrige -find_next.title=Finn neste forekomst av frasen -find_next_label=Neste -find_highlight=Uthev alle -find_match_case_label=Skill store/små bokstaver -find_match_diacritics_label=Samsvar diakritiske tegn -find_entire_word_label=Hele ord -find_reached_top=Nådde toppen av dokumentet, fortsetter fra bunnen -find_reached_bottom=Nådde bunnen av dokumentet, fortsetter fra toppen -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} av {{total}} treff -find_match_count[two]={{current}} av {{total}} treff -find_match_count[few]={{current}} av {{total}} treff -find_match_count[many]={{current}} av {{total}} treff -find_match_count[other]={{current}} av {{total}} treff -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Mer enn {{limit}} treff -find_match_count_limit[one]=Mer enn {{limit}} treff -find_match_count_limit[two]=Mer enn {{limit}} treff -find_match_count_limit[few]=Mer enn {{limit}} treff -find_match_count_limit[many]=Mer enn {{limit}} treff -find_match_count_limit[other]=Mer enn {{limit}} treff -find_not_found=Fant ikke teksten - -# Predefined zoom values -page_scale_width=Sidebredde -page_scale_fit=Tilpass til siden -page_scale_auto=Automatisk zoom -page_scale_actual=Virkelig størrelse -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}} % - -# Loading indicator messages -loading_error=En feil oppstod ved lasting av PDF. -invalid_file_error=Ugyldig eller skadet PDF-fil. -missing_file_error=Manglende PDF-fil. -unexpected_response_error=Uventet serverrespons. -rendering_error=En feil oppstod ved opptegning av siden. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} annotasjon] -password_label=Skriv inn passordet for å åpne denne PDF-filen. -password_invalid=Ugyldig passord. Prøv igjen. -password_ok=OK -password_cancel=Avbryt - -printing_not_supported=Advarsel: Utskrift er ikke fullstendig støttet av denne nettleseren. -printing_not_ready=Advarsel: PDF er ikke fullstendig innlastet for utskrift. -web_fonts_disabled=Web-fonter er avslått: Kan ikke bruke innbundne PDF-fonter. - -# Editor -editor_free_text2.title=Tekst -editor_free_text2_label=Tekst -editor_ink2.title=Tegn -editor_ink2_label=Tegn - -editor_stamp1.title=Legg til eller rediger bilder -editor_stamp1_label=Legg til eller rediger bilder - -free_text2_default_content=Begynn å skrive… - -# Editor Parameters -editor_free_text_color=Farge -editor_free_text_size=Størrelse -editor_ink_color=Farge -editor_ink_thickness=Tykkelse -editor_ink_opacity=Ugjennomsiktighet - -editor_stamp_add_image_label=Legg til bilde -editor_stamp_add_image.title=Legg til bilde - -# Editor aria -editor_free_text2_aria_label=Tekstredigering -editor_ink2_aria_label=Tegneredigering -editor_ink_canvas_aria_label=Brukerskapt bilde - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Alt-tekst -editor_alt_text_edit_button_label=Rediger alt-tekst tekst -editor_alt_text_dialog_label=Velg et alternativ -editor_alt_text_dialog_description=Alt-tekst (alternativ tekst) hjelper når folk ikke kan se bildet eller når det ikke lastes inn. -editor_alt_text_add_description_label=Legg til en beskrivelse -editor_alt_text_add_description_description=Gå etter 1-2 setninger som beskriver emnet, settingen eller handlingene. -editor_alt_text_mark_decorative_label=Merk som dekorativt -editor_alt_text_mark_decorative_description=Dette brukes til dekorative bilder, som kantlinjer eller vannmerker. -editor_alt_text_cancel_button=Avbryt -editor_alt_text_save_button=Lagre -editor_alt_text_decorative_tooltip=Merket som dekorativ -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=For eksempel, «En ung mann setter seg ved et bord for å spise et måltid» diff --git a/static/pdf.js/locale/ne-NP/viewer.ftl b/static/pdf.js/locale/ne-NP/viewer.ftl new file mode 100644 index 00000000..65193b6e --- /dev/null +++ b/static/pdf.js/locale/ne-NP/viewer.ftl @@ -0,0 +1,234 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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 = ({ $pagesCount } को { $pageNumber }) +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-presentation-mode-button = + .title = प्रस्तुति मोडमा जानुहोस् +pdfjs-presentation-mode-button-label = प्रस्तुति मोड +pdfjs-open-file-button = + .title = फाइल खोल्नुहोस् +pdfjs-open-file-button-label = खोल्नुहोस् +pdfjs-print-button = + .title = मुद्रण गर्नुहोस् +pdfjs-print-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-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 = लिपि स्क्रोलिङ्ग +pdfjs-spread-none-button = + .title = पृष्ठ स्प्रेडमा सामेल हुनुहुन्न +pdfjs-spread-none-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 = फाइल आकार: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = शीर्षक: +pdfjs-document-properties-author = लेखक: +pdfjs-document-properties-subject = विषयः +pdfjs-document-properties-keywords = शब्दकुञ्जीः +pdfjs-document-properties-creation-date = सिर्जना गरिएको मिति: +pdfjs-document-properties-modification-date = परिमार्जित मिति: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = पोट्रेट +pdfjs-document-properties-page-size-orientation-landscape = परिदृश्य +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-linearized-yes = हो +pdfjs-document-properties-linearized-no = होइन +pdfjs-document-properties-close-button = बन्द गर्नुहोस् + +## Print + +pdfjs-print-progress-message = मुद्रणका लागि कागजात तयारी गरिदै… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = रद्द गर्नुहोस् +pdfjs-printing-not-supported = चेतावनी: यो ब्राउजरमा मुद्रण पूर्णतया समर्थित छैन। +pdfjs-printing-not-ready = चेतावनी: PDF मुद्रणका लागि पूर्णतया लोड भएको छैन। + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = टगल साइडबार +pdfjs-toggle-sidebar-button-label = टगल साइडबार +pdfjs-document-outline-button = + .title = कागजातको रूपरेखा देखाउनुहोस् (सबै वस्तुहरू विस्तार/पतन गर्न डबल-क्लिक गर्नुहोस्) +pdfjs-document-outline-button-label = दस्तावेजको रूपरेखा +pdfjs-attachments-button = + .title = संलग्नहरू देखाउनुहोस् +pdfjs-attachments-button-label = संलग्नकहरू +pdfjs-thumbs-button = + .title = थम्बनेलहरू देखाउनुहोस् +pdfjs-thumbs-button-label = थम्बनेलहरू +pdfjs-findbar-button = + .title = कागजातमा फेला पार्नुहोस् +pdfjs-findbar-button-label = फेला पार्नुहोस् + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = पृष्ठ { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = { $page } पृष्ठको थम्बनेल + +## Find panel button title and messages + +pdfjs-find-input = + .title = फेला पार्नुहोस् + .placeholder = कागजातमा फेला पार्नुहोस्… +pdfjs-find-previous-button = + .title = यस वाक्यांशको अघिल्लो घटना फेला पार्नुहोस् +pdfjs-find-previous-button-label = अघिल्लो +pdfjs-find-next-button = + .title = यस वाक्यांशको पछिल्लो घटना फेला पार्नुहोस् +pdfjs-find-next-button-label = अर्को +pdfjs-find-highlight-checkbox = सबै हाइलाइट गर्ने +pdfjs-find-match-case-checkbox-label = केस जोडा मिलाउनुहोस् +pdfjs-find-entire-word-checkbox-label = पुरा शब्दहरु +pdfjs-find-reached-top = पृष्ठको शिर्षमा पुगीयो, तलबाट जारी गरिएको थियो +pdfjs-find-reached-bottom = पृष्ठको अन्त्यमा पुगीयो, शिर्षबाट जारी गरिएको थियो +pdfjs-find-not-found = वाक्यांश फेला परेन + +## 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 + + +## Loading indicator messages + +pdfjs-loading-error = यो PDF लोड गर्दा एउटा त्रुटि देखापर्‍यो। +pdfjs-invalid-file-error = अवैध वा दुषित PDF फाइल। +pdfjs-missing-file-error = हराईरहेको PDF फाइल। +pdfjs-unexpected-response-error = अप्रत्याशित सर्भर प्रतिक्रिया। +pdfjs-rendering-error = पृष्ठ प्रतिपादन गर्दा एउटा त्रुटि देखापर्‍यो। + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Annotation] + +## Password + +pdfjs-password-label = यस PDF फाइललाई खोल्न गोप्यशब्द प्रविष्ट गर्नुहोस्। +pdfjs-password-invalid = अवैध गोप्यशब्द। पुनः प्रयास गर्नुहोस्। +pdfjs-password-ok-button = ठिक छ +pdfjs-password-cancel-button = रद्द गर्नुहोस् +pdfjs-web-fonts-disabled = वेब फन्ट असक्षम छन्: एम्बेडेड PDF फन्ट प्रयोग गर्न असमर्थ। + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/ne-NP/viewer.properties b/static/pdf.js/locale/ne-NP/viewer.properties deleted file mode 100644 index 97ebe1f0..00000000 --- a/static/pdf.js/locale/ne-NP/viewer.properties +++ /dev/null @@ -1,197 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=अघिल्लो पृष्ठ -previous_label=अघिल्लो -next.title=पछिल्लो पृष्ठ -next_label=पछिल्लो - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=पृष्ठ -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages={{pagesCount}} मध्ये -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pagesCount}} को {{pageNumber}}) - -zoom_out.title=जुम घटाउनुहोस् -zoom_out_label=जुम घटाउनुहोस् -zoom_in.title=जुम बढाउनुहोस् -zoom_in_label=जुम बढाउनुहोस् -zoom.title=जुम गर्नुहोस् -presentation_mode.title=प्रस्तुति मोडमा जानुहोस् -presentation_mode_label=प्रस्तुति मोड -open_file.title=फाइल खोल्नुहोस् -open_file_label=खोल्नुहोस् -print.title=मुद्रण गर्नुहोस् -print_label=मुद्रण गर्नुहोस् - -# Secondary toolbar and context menu -tools.title=औजारहरू -tools_label=औजारहरू -first_page.title=पहिलो पृष्ठमा जानुहोस् -first_page_label=पहिलो पृष्ठमा जानुहोस् -last_page.title=पछिल्लो पृष्ठमा जानुहोस् -last_page_label=पछिल्लो पृष्ठमा जानुहोस् -page_rotate_cw.title=घडीको दिशामा घुमाउनुहोस् -page_rotate_cw_label=घडीको दिशामा घुमाउनुहोस् -page_rotate_ccw.title=घडीको विपरित दिशामा घुमाउनुहोस् -page_rotate_ccw_label=घडीको विपरित दिशामा घुमाउनुहोस् - -cursor_text_select_tool.title=पाठ चयन उपकरण सक्षम गर्नुहोस् -cursor_text_select_tool_label=पाठ चयन उपकरण -cursor_hand_tool.title=हाते उपकरण सक्षम गर्नुहोस् -cursor_hand_tool_label=हाते उपकरण - -scroll_vertical.title=ठाडो स्क्रोलिङ्ग प्रयोग गर्नुहोस् -scroll_vertical_label=ठाडो स्क्र्रोलिङ्ग -scroll_horizontal.title=तेर्सो स्क्रोलिङ्ग प्रयोग गर्नुहोस् -scroll_horizontal_label=तेर्सो स्क्रोलिङ्ग -scroll_wrapped.title=लिपि स्क्रोलिङ्ग प्रयोग गर्नुहोस् -scroll_wrapped_label=लिपि स्क्रोलिङ्ग - -spread_none.title=पृष्ठ स्प्रेडमा सामेल हुनुहुन्न -spread_none_label=स्प्रेड छैन - -# Document properties dialog box -document_properties.title=कागजात विशेषताहरू... -document_properties_label=कागजात विशेषताहरू... -document_properties_file_name=फाइल नाम: -document_properties_file_size=फाइल आकार: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=शीर्षक: -document_properties_author=लेखक: -document_properties_subject=विषयः -document_properties_keywords=शब्दकुञ्जीः -document_properties_creation_date=सिर्जना गरिएको मिति: -document_properties_modification_date=परिमार्जित मिति: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=सर्जक: -document_properties_producer=PDF निर्माता: -document_properties_version=PDF संस्करण -document_properties_page_count=पृष्ठ गणना: -document_properties_page_size=पृष्ठ आकार: -document_properties_page_size_unit_inches=इन्च -document_properties_page_size_unit_millimeters=मि.मि. -document_properties_page_size_orientation_portrait=पोट्रेट -document_properties_page_size_orientation_landscape=परिदृश्य -document_properties_page_size_name_letter=अक्षर -document_properties_page_size_name_legal=कानूनी -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized_yes=हो -document_properties_linearized_no=होइन -document_properties_close=बन्द गर्नुहोस् - -print_progress_message=मुद्रणका लागि कागजात तयारी गरिदै… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=रद्द गर्नुहोस् - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=टगल साइडबार -toggle_sidebar_label=टगल साइडबार -document_outline.title=कागजातको रूपरेखा देखाउनुहोस् (सबै वस्तुहरू विस्तार/पतन गर्न डबल-क्लिक गर्नुहोस्) -document_outline_label=दस्तावेजको रूपरेखा -attachments.title=संलग्नहरू देखाउनुहोस् -attachments_label=संलग्नकहरू -thumbs.title=थम्बनेलहरू देखाउनुहोस् -thumbs_label=थम्बनेलहरू -findbar.title=कागजातमा फेला पार्नुहोस् -findbar_label=फेला पार्नुहोस् - -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=पृष्ठ {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas={{page}} पृष्ठको थम्बनेल - -# Find panel button title and messages -find_input.title=फेला पार्नुहोस् -find_input.placeholder=कागजातमा फेला पार्नुहोस्… -find_previous.title=यस वाक्यांशको अघिल्लो घटना फेला पार्नुहोस् -find_previous_label=अघिल्लो -find_next.title=यस वाक्यांशको पछिल्लो घटना फेला पार्नुहोस् -find_next_label=अर्को -find_highlight=सबै हाइलाइट गर्ने -find_match_case_label=केस जोडा मिलाउनुहोस् -find_entire_word_label=पुरा शब्दहरु -find_reached_top=पृष्ठको शिर्षमा पुगीयो, तलबाट जारी गरिएको थियो -find_reached_bottom=पृष्ठको अन्त्यमा पुगीयो, शिर्षबाट जारी गरिएको थियो -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_not_found=वाक्यांश फेला परेन - -# Predefined zoom values -page_scale_width=पृष्ठ चौडाइ -page_scale_fit=पृष्ठ ठिक्क मिल्ने -page_scale_auto=स्वचालित जुम -page_scale_actual=वास्तविक आकार -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=यो PDF लोड गर्दा एउटा त्रुटि देखापर्‍यो। -invalid_file_error=अवैध वा दुषित PDF फाइल। -missing_file_error=हराईरहेको PDF फाइल। -unexpected_response_error=अप्रत्याशित सर्भर प्रतिक्रिया। - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. - -rendering_error=पृष्ठ प्रतिपादन गर्दा एउटा त्रुटि देखापर्‍यो। - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Annotation] -password_label=यस PDF फाइललाई खोल्न गोप्यशब्द प्रविष्ट गर्नुहोस्। -password_invalid=अवैध गोप्यशब्द। पुनः प्रयास गर्नुहोस्। -password_ok=ठिक छ -password_cancel=रद्द गर्नुहोस् - -printing_not_supported=चेतावनी: यो ब्राउजरमा मुद्रण पूर्णतया समर्थित छैन। -printing_not_ready=चेतावनी: PDF मुद्रणका लागि पूर्णतया लोड भएको छैन। -web_fonts_disabled=वेब फन्ट असक्षम छन्: एम्बेडेड PDF फन्ट प्रयोग गर्न असमर्थ। - diff --git a/static/pdf.js/locale/nl/viewer.ftl b/static/pdf.js/locale/nl/viewer.ftl new file mode 100644 index 00000000..a1dd47d3 --- /dev/null +++ b/static/pdf.js/locale/nl/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Vorige pagina +pdfjs-previous-button-label = Vorige +pdfjs-next-button = + .title = Volgende pagina +pdfjs-next-button-label = Volgende +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Pagina +# 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 = van { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } van { $pagesCount }) +pdfjs-zoom-out-button = + .title = Uitzoomen +pdfjs-zoom-out-button-label = Uitzoomen +pdfjs-zoom-in-button = + .title = Inzoomen +pdfjs-zoom-in-button-label = Inzoomen +pdfjs-zoom-select = + .title = Zoomen +pdfjs-presentation-mode-button = + .title = Wisselen naar presentatiemodus +pdfjs-presentation-mode-button-label = Presentatiemodus +pdfjs-open-file-button = + .title = Bestand openen +pdfjs-open-file-button-label = Openen +pdfjs-print-button = + .title = Afdrukken +pdfjs-print-button-label = Afdrukken +pdfjs-save-button = + .title = Opslaan +pdfjs-save-button-label = Opslaan +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Downloaden +# 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 = Downloaden +pdfjs-bookmark-button = + .title = Huidige pagina (URL van huidige pagina bekijken) +pdfjs-bookmark-button-label = Huidige pagina +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Openen in app +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Openen in app + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Hulpmiddelen +pdfjs-tools-button-label = Hulpmiddelen +pdfjs-first-page-button = + .title = Naar eerste pagina gaan +pdfjs-first-page-button-label = Naar eerste pagina gaan +pdfjs-last-page-button = + .title = Naar laatste pagina gaan +pdfjs-last-page-button-label = Naar laatste pagina gaan +pdfjs-page-rotate-cw-button = + .title = Rechtsom draaien +pdfjs-page-rotate-cw-button-label = Rechtsom draaien +pdfjs-page-rotate-ccw-button = + .title = Linksom draaien +pdfjs-page-rotate-ccw-button-label = Linksom draaien +pdfjs-cursor-text-select-tool-button = + .title = Tekstselectiehulpmiddel inschakelen +pdfjs-cursor-text-select-tool-button-label = Tekstselectiehulpmiddel +pdfjs-cursor-hand-tool-button = + .title = Handhulpmiddel inschakelen +pdfjs-cursor-hand-tool-button-label = Handhulpmiddel +pdfjs-scroll-page-button = + .title = Paginascrollen gebruiken +pdfjs-scroll-page-button-label = Paginascrollen +pdfjs-scroll-vertical-button = + .title = Verticaal scrollen gebruiken +pdfjs-scroll-vertical-button-label = Verticaal scrollen +pdfjs-scroll-horizontal-button = + .title = Horizontaal scrollen gebruiken +pdfjs-scroll-horizontal-button-label = Horizontaal scrollen +pdfjs-scroll-wrapped-button = + .title = Scrollen met terugloop gebruiken +pdfjs-scroll-wrapped-button-label = Scrollen met terugloop +pdfjs-spread-none-button = + .title = Dubbele pagina’s niet samenvoegen +pdfjs-spread-none-button-label = Geen dubbele pagina’s +pdfjs-spread-odd-button = + .title = Dubbele pagina’s samenvoegen vanaf oneven pagina’s +pdfjs-spread-odd-button-label = Oneven dubbele pagina’s +pdfjs-spread-even-button = + .title = Dubbele pagina’s samenvoegen vanaf even pagina’s +pdfjs-spread-even-button-label = Even dubbele pagina’s + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Documenteigenschappen… +pdfjs-document-properties-button-label = Documenteigenschappen… +pdfjs-document-properties-file-name = Bestandsnaam: +pdfjs-document-properties-file-size = Bestandsgrootte: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Titel: +pdfjs-document-properties-author = Auteur: +pdfjs-document-properties-subject = Onderwerp: +pdfjs-document-properties-keywords = Sleutelwoorden: +pdfjs-document-properties-creation-date = Aanmaakdatum: +pdfjs-document-properties-modification-date = Wijzigingsdatum: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Maker: +pdfjs-document-properties-producer = PDF-producent: +pdfjs-document-properties-version = PDF-versie: +pdfjs-document-properties-page-count = Aantal pagina’s: +pdfjs-document-properties-page-size = Paginagrootte: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = staand +pdfjs-document-properties-page-size-orientation-landscape = liggend +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Snelle webweergave: +pdfjs-document-properties-linearized-yes = Ja +pdfjs-document-properties-linearized-no = Nee +pdfjs-document-properties-close-button = Sluiten + +## Print + +pdfjs-print-progress-message = Document voorbereiden voor afdrukken… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Annuleren +pdfjs-printing-not-supported = Waarschuwing: afdrukken wordt niet volledig ondersteund door deze browser. +pdfjs-printing-not-ready = Waarschuwing: de PDF is niet volledig geladen voor afdrukken. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Zijbalk in-/uitschakelen +pdfjs-toggle-sidebar-notification-button = + .title = Zijbalk in-/uitschakelen (document bevat overzicht/bijlagen/lagen) +pdfjs-toggle-sidebar-button-label = Zijbalk in-/uitschakelen +pdfjs-document-outline-button = + .title = Documentoverzicht tonen (dubbelklik om alle items uit/samen te vouwen) +pdfjs-document-outline-button-label = Documentoverzicht +pdfjs-attachments-button = + .title = Bijlagen tonen +pdfjs-attachments-button-label = Bijlagen +pdfjs-layers-button = + .title = Lagen tonen (dubbelklik om alle lagen naar de standaardstatus terug te zetten) +pdfjs-layers-button-label = Lagen +pdfjs-thumbs-button = + .title = Miniaturen tonen +pdfjs-thumbs-button-label = Miniaturen +pdfjs-current-outline-item-button = + .title = Huidig item in inhoudsopgave zoeken +pdfjs-current-outline-item-button-label = Huidig item in inhoudsopgave +pdfjs-findbar-button = + .title = Zoeken in document +pdfjs-findbar-button-label = Zoeken +pdfjs-additional-layers = Aanvullende lagen + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Pagina { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatuur van pagina { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Zoeken + .placeholder = Zoeken in document… +pdfjs-find-previous-button = + .title = De vorige overeenkomst van de tekst zoeken +pdfjs-find-previous-button-label = Vorige +pdfjs-find-next-button = + .title = De volgende overeenkomst van de tekst zoeken +pdfjs-find-next-button-label = Volgende +pdfjs-find-highlight-checkbox = Alles markeren +pdfjs-find-match-case-checkbox-label = Hoofdlettergevoelig +pdfjs-find-match-diacritics-checkbox-label = Diakritische tekens gebruiken +pdfjs-find-entire-word-checkbox-label = Hele woorden +pdfjs-find-reached-top = Bovenkant van document bereikt, doorgegaan vanaf onderkant +pdfjs-find-reached-bottom = Onderkant van document bereikt, doorgegaan vanaf bovenkant +# 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 } van { $total } overeenkomst + *[other] { $current } van { $total } overeenkomsten + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Meer dan { $limit } overeenkomst + *[other] Meer dan { $limit } overeenkomsten + } +pdfjs-find-not-found = Tekst niet gevonden + +## Predefined zoom values + +pdfjs-page-scale-width = Paginabreedte +pdfjs-page-scale-fit = Hele pagina +pdfjs-page-scale-auto = Automatisch zoomen +pdfjs-page-scale-actual = Werkelijke grootte +# 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 = Pagina { $page } + +## Loading indicator messages + +pdfjs-loading-error = Er is een fout opgetreden bij het laden van de PDF. +pdfjs-invalid-file-error = Ongeldig of beschadigd PDF-bestand. +pdfjs-missing-file-error = PDF-bestand ontbreekt. +pdfjs-unexpected-response-error = Onverwacht serverantwoord. +pdfjs-rendering-error = Er is een fout opgetreden bij het weergeven van de pagina. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type }-aantekening] + +## Password + +pdfjs-password-label = Voer het wachtwoord in om dit PDF-bestand te openen. +pdfjs-password-invalid = Ongeldig wachtwoord. Probeer het opnieuw. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Annuleren +pdfjs-web-fonts-disabled = Weblettertypen zijn uitgeschakeld: gebruik van ingebedde PDF-lettertypen is niet mogelijk. + +## Editing + +pdfjs-editor-free-text-button = + .title = Tekst +pdfjs-editor-free-text-button-label = Tekst +pdfjs-editor-ink-button = + .title = Tekenen +pdfjs-editor-ink-button-label = Tekenen +pdfjs-editor-stamp-button = + .title = Afbeeldingen toevoegen of bewerken +pdfjs-editor-stamp-button-label = Afbeeldingen toevoegen of bewerken +pdfjs-editor-highlight-button = + .title = Markeren +pdfjs-editor-highlight-button-label = Markeren +pdfjs-highlight-floating-button = + .title = Markeren +pdfjs-highlight-floating-button1 = + .title = Markeren + .aria-label = Markeren +pdfjs-highlight-floating-button-label = Markeren + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Tekening verwijderen +pdfjs-editor-remove-freetext-button = + .title = Tekst verwijderen +pdfjs-editor-remove-stamp-button = + .title = Afbeelding verwijderen +pdfjs-editor-remove-highlight-button = + .title = Markering verwijderen + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Kleur +pdfjs-editor-free-text-size-input = Grootte +pdfjs-editor-ink-color-input = Kleur +pdfjs-editor-ink-thickness-input = Dikte +pdfjs-editor-ink-opacity-input = Opaciteit +pdfjs-editor-stamp-add-image-button = + .title = Afbeelding toevoegen +pdfjs-editor-stamp-add-image-button-label = Afbeelding toevoegen +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Dikte +pdfjs-editor-free-highlight-thickness-title = + .title = Dikte wijzigen bij accentuering van andere items dan tekst +pdfjs-free-text = + .aria-label = Tekstbewerker +pdfjs-free-text-default-content = Begin met typen… +pdfjs-ink = + .aria-label = Tekeningbewerker +pdfjs-ink-canvas = + .aria-label = Door gebruiker gemaakte afbeelding + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alternatieve tekst +pdfjs-editor-alt-text-edit-button-label = Alternatieve tekst bewerken +pdfjs-editor-alt-text-dialog-label = Kies een optie +pdfjs-editor-alt-text-dialog-description = Alternatieve tekst helpt wanneer mensen de afbeelding niet kunnen zien of wanneer deze niet wordt geladen. +pdfjs-editor-alt-text-add-description-label = Voeg een beschrijving toe +pdfjs-editor-alt-text-add-description-description = Streef naar 1-2 zinnen die het onderwerp, de omgeving of de acties beschrijven. +pdfjs-editor-alt-text-mark-decorative-label = Als decoratief markeren +pdfjs-editor-alt-text-mark-decorative-description = Dit wordt gebruikt voor sierafbeeldingen, zoals randen of watermerken. +pdfjs-editor-alt-text-cancel-button = Annuleren +pdfjs-editor-alt-text-save-button = Opslaan +pdfjs-editor-alt-text-decorative-tooltip = Als decoratief gemarkeerd +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Bijvoorbeeld: ‘Een jonge man gaat aan een tafel zitten om te eten’ + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Linkerbovenhoek – formaat wijzigen +pdfjs-editor-resizer-label-top-middle = Midden boven – formaat wijzigen +pdfjs-editor-resizer-label-top-right = Rechterbovenhoek – formaat wijzigen +pdfjs-editor-resizer-label-middle-right = Midden rechts – formaat wijzigen +pdfjs-editor-resizer-label-bottom-right = Rechterbenedenhoek – formaat wijzigen +pdfjs-editor-resizer-label-bottom-middle = Midden onder – formaat wijzigen +pdfjs-editor-resizer-label-bottom-left = Linkerbenedenhoek – formaat wijzigen +pdfjs-editor-resizer-label-middle-left = Links midden – formaat wijzigen + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Markeringskleur +pdfjs-editor-colorpicker-button = + .title = Kleur wijzigen +pdfjs-editor-colorpicker-dropdown = + .aria-label = Kleurkeuzes +pdfjs-editor-colorpicker-yellow = + .title = Geel +pdfjs-editor-colorpicker-green = + .title = Groen +pdfjs-editor-colorpicker-blue = + .title = Blauw +pdfjs-editor-colorpicker-pink = + .title = Roze +pdfjs-editor-colorpicker-red = + .title = Rood + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Alles tonen +pdfjs-editor-highlight-show-all-button = + .title = Alles tonen diff --git a/static/pdf.js/locale/nl/viewer.properties b/static/pdf.js/locale/nl/viewer.properties deleted file mode 100644 index c428dac5..00000000 --- a/static/pdf.js/locale/nl/viewer.properties +++ /dev/null @@ -1,274 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Vorige pagina -previous_label=Vorige -next.title=Volgende pagina -next_label=Volgende - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Pagina -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=van {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} van {{pagesCount}}) - -zoom_out.title=Uitzoomen -zoom_out_label=Uitzoomen -zoom_in.title=Inzoomen -zoom_in_label=Inzoomen -zoom.title=Zoomen -presentation_mode.title=Wisselen naar presentatiemodus -presentation_mode_label=Presentatiemodus -open_file.title=Bestand openen -open_file_label=Openen -print.title=Afdrukken -print_label=Afdrukken -save.title=Opslaan -save_label=Opslaan -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Downloaden -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Downloaden -bookmark1.title=Huidige pagina (URL van huidige pagina bekijken) -bookmark1_label=Huidige pagina -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Openen in app -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Openen in app - -# Secondary toolbar and context menu -tools.title=Hulpmiddelen -tools_label=Hulpmiddelen -first_page.title=Naar eerste pagina gaan -first_page_label=Naar eerste pagina gaan -last_page.title=Naar laatste pagina gaan -last_page_label=Naar laatste pagina gaan -page_rotate_cw.title=Rechtsom draaien -page_rotate_cw_label=Rechtsom draaien -page_rotate_ccw.title=Linksom draaien -page_rotate_ccw_label=Linksom draaien - -cursor_text_select_tool.title=Tekstselectiehulpmiddel inschakelen -cursor_text_select_tool_label=Tekstselectiehulpmiddel -cursor_hand_tool.title=Handhulpmiddel inschakelen -cursor_hand_tool_label=Handhulpmiddel - -scroll_page.title=Paginascrollen gebruiken -scroll_page_label=Paginascrollen -scroll_vertical.title=Verticaal scrollen gebruiken -scroll_vertical_label=Verticaal scrollen -scroll_horizontal.title=Horizontaal scrollen gebruiken -scroll_horizontal_label=Horizontaal scrollen -scroll_wrapped.title=Scrollen met terugloop gebruiken -scroll_wrapped_label=Scrollen met terugloop - -spread_none.title=Dubbele pagina’s niet samenvoegen -spread_none_label=Geen dubbele pagina’s -spread_odd.title=Dubbele pagina’s samenvoegen vanaf oneven pagina’s -spread_odd_label=Oneven dubbele pagina’s -spread_even.title=Dubbele pagina’s samenvoegen vanaf even pagina’s -spread_even_label=Even dubbele pagina’s - -# Document properties dialog box -document_properties.title=Documenteigenschappen… -document_properties_label=Documenteigenschappen… -document_properties_file_name=Bestandsnaam: -document_properties_file_size=Bestandsgrootte: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Titel: -document_properties_author=Auteur: -document_properties_subject=Onderwerp: -document_properties_keywords=Sleutelwoorden: -document_properties_creation_date=Aanmaakdatum: -document_properties_modification_date=Wijzigingsdatum: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Maker: -document_properties_producer=PDF-producent: -document_properties_version=PDF-versie: -document_properties_page_count=Aantal pagina’s: -document_properties_page_size=Paginagrootte: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=staand -document_properties_page_size_orientation_landscape=liggend -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Snelle webweergave: -document_properties_linearized_yes=Ja -document_properties_linearized_no=Nee -document_properties_close=Sluiten - -print_progress_message=Document voorbereiden voor afdrukken… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Annuleren - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Zijbalk in-/uitschakelen -toggle_sidebar_notification2.title=Zijbalk in-/uitschakelen (document bevat overzicht/bijlagen/lagen) -toggle_sidebar_label=Zijbalk in-/uitschakelen -document_outline.title=Documentoverzicht tonen (dubbelklik om alle items uit/samen te vouwen) -document_outline_label=Documentoverzicht -attachments.title=Bijlagen tonen -attachments_label=Bijlagen -layers.title=Lagen tonen (dubbelklik om alle lagen naar de standaardstatus terug te zetten) -layers_label=Lagen -thumbs.title=Miniaturen tonen -thumbs_label=Miniaturen -current_outline_item.title=Huidig item in inhoudsopgave zoeken -current_outline_item_label=Huidig item in inhoudsopgave -findbar.title=Zoeken in document -findbar_label=Zoeken - -additional_layers=Aanvullende lagen -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Pagina {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Pagina {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatuur van pagina {{page}} - -# Find panel button title and messages -find_input.title=Zoeken -find_input.placeholder=Zoeken in document… -find_previous.title=De vorige overeenkomst van de tekst zoeken -find_previous_label=Vorige -find_next.title=De volgende overeenkomst van de tekst zoeken -find_next_label=Volgende -find_highlight=Alles markeren -find_match_case_label=Hoofdlettergevoelig -find_match_diacritics_label=Diakritische tekens gebruiken -find_entire_word_label=Hele woorden -find_reached_top=Bovenkant van document bereikt, doorgegaan vanaf onderkant -find_reached_bottom=Onderkant van document bereikt, doorgegaan vanaf bovenkant -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} van {{total}} overeenkomst -find_match_count[two]={{current}} van {{total}} overeenkomsten -find_match_count[few]={{current}} van {{total}} overeenkomsten -find_match_count[many]={{current}} van {{total}} overeenkomsten -find_match_count[other]={{current}} van {{total}} overeenkomsten -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Meer dan {{limit}} overeenkomsten -find_match_count_limit[one]=Meer dan {{limit}} overeenkomst -find_match_count_limit[two]=Meer dan {{limit}} overeenkomsten -find_match_count_limit[few]=Meer dan {{limit}} overeenkomsten -find_match_count_limit[many]=Meer dan {{limit}} overeenkomsten -find_match_count_limit[other]=Meer dan {{limit}} overeenkomsten -find_not_found=Tekst niet gevonden - -# Predefined zoom values -page_scale_width=Paginabreedte -page_scale_fit=Hele pagina -page_scale_auto=Automatisch zoomen -page_scale_actual=Werkelijke grootte -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Er is een fout opgetreden bij het laden van de PDF. -invalid_file_error=Ongeldig of beschadigd PDF-bestand. -missing_file_error=PDF-bestand ontbreekt. -unexpected_response_error=Onverwacht serverantwoord. -rendering_error=Er is een fout opgetreden bij het weergeven van de pagina. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}}-aantekening] -password_label=Voer het wachtwoord in om dit PDF-bestand te openen. -password_invalid=Ongeldig wachtwoord. Probeer het opnieuw. -password_ok=OK -password_cancel=Annuleren - -printing_not_supported=Waarschuwing: afdrukken wordt niet volledig ondersteund door deze browser. -printing_not_ready=Waarschuwing: de PDF is niet volledig geladen voor afdrukken. -web_fonts_disabled=Weblettertypen zijn uitgeschakeld: gebruik van ingebedde PDF-lettertypen is niet mogelijk. - -# Editor -editor_free_text2.title=Tekst -editor_free_text2_label=Tekst -editor_ink2.title=Tekenen -editor_ink2_label=Tekenen - -editor_stamp1.title=Afbeeldingen toevoegen of bewerken -editor_stamp1_label=Afbeeldingen toevoegen of bewerken - -free_text2_default_content=Begin met typen… - -# Editor Parameters -editor_free_text_color=Kleur -editor_free_text_size=Grootte -editor_ink_color=Kleur -editor_ink_thickness=Dikte -editor_ink_opacity=Opaciteit - -editor_stamp_add_image_label=Afbeelding toevoegen -editor_stamp_add_image.title=Afbeelding toevoegen - -# Editor aria -editor_free_text2_aria_label=Tekstbewerker -editor_ink2_aria_label=Tekeningbewerker -editor_ink_canvas_aria_label=Door gebruiker gemaakte afbeelding - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_cancel_button=Annuleren -editor_alt_text_save_button=Opslaan -# This is a placeholder for the alt text input area diff --git a/static/pdf.js/locale/nn-NO/viewer.ftl b/static/pdf.js/locale/nn-NO/viewer.ftl new file mode 100644 index 00000000..476e4c15 --- /dev/null +++ b/static/pdf.js/locale/nn-NO/viewer.ftl @@ -0,0 +1,360 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Føregåande side +pdfjs-previous-button-label = Føregåande +pdfjs-next-button = + .title = Neste side +pdfjs-next-button-label = Neste +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Side +# 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 = av { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } av { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zoom ut +pdfjs-zoom-out-button-label = Zoom ut +pdfjs-zoom-in-button = + .title = Zoom inn +pdfjs-zoom-in-button-label = Zoom inn +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Byt til presentasjonsmodus +pdfjs-presentation-mode-button-label = Presentasjonsmodus +pdfjs-open-file-button = + .title = Opne fil +pdfjs-open-file-button-label = Opne +pdfjs-print-button = + .title = Skriv ut +pdfjs-print-button-label = Skriv ut +pdfjs-save-button = + .title = Lagre +pdfjs-save-button-label = Lagre +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Last ned +# 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 = Last ned +pdfjs-bookmark-button = + .title = Gjeldande side (sjå URL frå gjeldande side) +pdfjs-bookmark-button-label = Gjeldande side +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Opne i app +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Opne i app + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Verktøy +pdfjs-tools-button-label = Verktøy +pdfjs-first-page-button = + .title = Gå til første side +pdfjs-first-page-button-label = Gå til første side +pdfjs-last-page-button = + .title = Gå til siste side +pdfjs-last-page-button-label = Gå til siste side +pdfjs-page-rotate-cw-button = + .title = Roter med klokka +pdfjs-page-rotate-cw-button-label = Roter med klokka +pdfjs-page-rotate-ccw-button = + .title = Roter mot klokka +pdfjs-page-rotate-ccw-button-label = Roter mot klokka +pdfjs-cursor-text-select-tool-button = + .title = Aktiver tekstmarkeringsverktøy +pdfjs-cursor-text-select-tool-button-label = Tekstmarkeringsverktøy +pdfjs-cursor-hand-tool-button = + .title = Aktiver handverktøy +pdfjs-cursor-hand-tool-button-label = Handverktøy +pdfjs-scroll-page-button = + .title = Bruk siderulling +pdfjs-scroll-page-button-label = Siderulling +pdfjs-scroll-vertical-button = + .title = Bruk vertikal rulling +pdfjs-scroll-vertical-button-label = Vertikal rulling +pdfjs-scroll-horizontal-button = + .title = Bruk horisontal rulling +pdfjs-scroll-horizontal-button-label = Horisontal rulling +pdfjs-scroll-wrapped-button = + .title = Bruk fleirsiderulling +pdfjs-scroll-wrapped-button-label = Fleirsiderulling +pdfjs-spread-none-button = + .title = Vis enkeltsider +pdfjs-spread-none-button-label = Enkeltside +pdfjs-spread-odd-button = + .title = Vis oppslag med ulike sidenummer til venstre +pdfjs-spread-odd-button-label = Oppslag med framside +pdfjs-spread-even-button = + .title = Vis oppslag med like sidenummmer til venstre +pdfjs-spread-even-button-label = Oppslag utan framside + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Dokumenteigenskapar… +pdfjs-document-properties-button-label = Dokumenteigenskapar… +pdfjs-document-properties-file-name = Filnamn: +pdfjs-document-properties-file-size = Filstorleik: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Tittel: +pdfjs-document-properties-author = Forfattar: +pdfjs-document-properties-subject = Emne: +pdfjs-document-properties-keywords = Stikkord: +pdfjs-document-properties-creation-date = Dato oppretta: +pdfjs-document-properties-modification-date = Dato endra: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Oppretta av: +pdfjs-document-properties-producer = PDF-verktøy: +pdfjs-document-properties-version = PDF-versjon: +pdfjs-document-properties-page-count = Sidetal: +pdfjs-document-properties-page-size = Sidestørrelse: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = ståande +pdfjs-document-properties-page-size-orientation-landscape = liggande +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 = Brev +pdfjs-document-properties-page-size-name-legal = 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 = Rask nettvising: +pdfjs-document-properties-linearized-yes = Ja +pdfjs-document-properties-linearized-no = Nei +pdfjs-document-properties-close-button = Lat att + +## Print + +pdfjs-print-progress-message = Førebur dokumentet for utskrift… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Avbryt +pdfjs-printing-not-supported = Åtvaring: Utskrift er ikkje fullstendig støtta av denne nettlesaren. +pdfjs-printing-not-ready = Åtvaring: PDF ikkje fullstendig innlasta for utskrift. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Slå av/på sidestolpe +pdfjs-toggle-sidebar-notification-button = + .title = Vis/gøym sidestolpe (dokumentet inneheld oversikt/vedlegg/lag) +pdfjs-toggle-sidebar-button-label = Slå av/på sidestolpe +pdfjs-document-outline-button = + .title = Vis dokumentdisposisjonen (dobbelklikk for å utvide/gøyme alle elementa) +pdfjs-document-outline-button-label = Dokumentdisposisjon +pdfjs-attachments-button = + .title = Vis vedlegg +pdfjs-attachments-button-label = Vedlegg +pdfjs-layers-button = + .title = Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand) +pdfjs-layers-button-label = Lag +pdfjs-thumbs-button = + .title = Vis miniatyrbilde +pdfjs-thumbs-button-label = Miniatyrbilde +pdfjs-current-outline-item-button = + .title = Finn gjeldande disposisjonselement +pdfjs-current-outline-item-button-label = Gjeldande disposisjonselement +pdfjs-findbar-button = + .title = Finn i dokumentet +pdfjs-findbar-button-label = Finn +pdfjs-additional-layers = Ytterlegare lag + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Side { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatyrbilde av side { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Søk + .placeholder = Søk i dokument… +pdfjs-find-previous-button = + .title = Finn førre førekomst av frasen +pdfjs-find-previous-button-label = Førre +pdfjs-find-next-button = + .title = Finn neste førekomst av frasen +pdfjs-find-next-button-label = Neste +pdfjs-find-highlight-checkbox = Uthev alle +pdfjs-find-match-case-checkbox-label = Skil store/små bokstavar +pdfjs-find-match-diacritics-checkbox-label = Samsvar diakritiske teikn +pdfjs-find-entire-word-checkbox-label = Heile ord +pdfjs-find-reached-top = Nådde toppen av dokumentet, fortset frå botnen +pdfjs-find-reached-bottom = Nådde botnen av dokumentet, fortset frå toppen +# 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 } av { $total } treff + *[other] { $current } av { $total } treff + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Meir enn { $limit } treff + *[other] Meir enn { $limit } treff + } +pdfjs-find-not-found = Fann ikkje teksten + +## Predefined zoom values + +pdfjs-page-scale-width = Sidebreidde +pdfjs-page-scale-fit = Tilpass til sida +pdfjs-page-scale-auto = Automatisk skalering +pdfjs-page-scale-actual = Verkeleg storleik +# 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 = Side { $page } + +## Loading indicator messages + +pdfjs-loading-error = Ein feil oppstod ved lasting av PDF. +pdfjs-invalid-file-error = Ugyldig eller korrupt PDF-fil. +pdfjs-missing-file-error = Manglande PDF-fil. +pdfjs-unexpected-response-error = Uventa tenarrespons. +pdfjs-rendering-error = Ein feil oppstod under vising av sida. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date } { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } annotasjon] + +## Password + +pdfjs-password-label = Skriv inn passordet for å opne denne PDF-fila. +pdfjs-password-invalid = Ugyldig passord. Prøv på nytt. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Avbryt +pdfjs-web-fonts-disabled = Web-skrifter er slått av: Kan ikkje bruke innbundne PDF-skrifter. + +## Editing + +pdfjs-editor-free-text-button = + .title = Tekst +pdfjs-editor-free-text-button-label = Tekst +pdfjs-editor-ink-button = + .title = Teikne +pdfjs-editor-ink-button-label = Teikne +pdfjs-editor-stamp-button = + .title = Legg til eller rediger bilde +pdfjs-editor-stamp-button-label = Legg til eller rediger bilde + +## Remove button for the various kind of editor. + + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Farge +pdfjs-editor-free-text-size-input = Storleik +pdfjs-editor-ink-color-input = Farge +pdfjs-editor-ink-thickness-input = Tjukkleik +pdfjs-editor-ink-opacity-input = Ugjennomskinleg +pdfjs-editor-stamp-add-image-button = + .title = Legg til bilde +pdfjs-editor-stamp-add-image-button-label = Legg til bilde +pdfjs-free-text = + .aria-label = Tekstredigering +pdfjs-free-text-default-content = Byrje å skrive… +pdfjs-ink = + .aria-label = Teikneredigering +pdfjs-ink-canvas = + .aria-label = Brukarskapt bilde + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alt-tekst +pdfjs-editor-alt-text-edit-button-label = Rediger alt-tekst tekst +pdfjs-editor-alt-text-dialog-label = Vel eit alternativ +pdfjs-editor-alt-text-dialog-description = Alt-tekst (alternativ tekst) hjelper når folk ikkje kan sjå bildet eller når det ikkje vert lasta inn. +pdfjs-editor-alt-text-add-description-label = Legg til ei skildring +pdfjs-editor-alt-text-add-description-description = Gå etter 1-2 setninger som skildrar emnet, settinga eller handlingane. +pdfjs-editor-alt-text-mark-decorative-label = Merk som dekorativt +pdfjs-editor-alt-text-mark-decorative-description = Dette vert brukt til dekorative bilde, som kantlinjer eller vassmerke. +pdfjs-editor-alt-text-cancel-button = Avbryt +pdfjs-editor-alt-text-save-button = Lagre +pdfjs-editor-alt-text-decorative-tooltip = Merkt som dekorativ +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Til dømes, «Ein ung mann set seg ved eit bord for å ete eit måltid» + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + + +## Color picker + +pdfjs-editor-colorpicker-yellow = + .title = Gul +pdfjs-editor-colorpicker-green = + .title = Grøn +pdfjs-editor-colorpicker-blue = + .title = Blå +pdfjs-editor-colorpicker-pink = + .title = Rosa +pdfjs-editor-colorpicker-red = + .title = Raud diff --git a/static/pdf.js/locale/nn-NO/viewer.properties b/static/pdf.js/locale/nn-NO/viewer.properties deleted file mode 100644 index 0c6a9abc..00000000 --- a/static/pdf.js/locale/nn-NO/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Føregåande side -previous_label=Føregåande -next.title=Neste side -next_label=Neste - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Side -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=av {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} av {{pagesCount}}) - -zoom_out.title=Zoom ut -zoom_out_label=Zoom ut -zoom_in.title=Zoom inn -zoom_in_label=Zoom inn -zoom.title=Zoom -presentation_mode.title=Byt til presentasjonsmodus -presentation_mode_label=Presentasjonsmodus -open_file.title=Opne fil -open_file_label=Opne -print.title=Skriv ut -print_label=Skriv ut -save.title=Lagre -save_label=Lagre -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Last ned -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Last ned -bookmark1.title=Gjeldande side (sjå URL frå gjeldande side) -bookmark1_label=Gjeldande side -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Opne i app -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Opne i app - -# Secondary toolbar and context menu -tools.title=Verktøy -tools_label=Verktøy -first_page.title=Gå til første side -first_page_label=Gå til første side -last_page.title=Gå til siste side -last_page_label=Gå til siste side -page_rotate_cw.title=Roter med klokka -page_rotate_cw_label=Roter med klokka -page_rotate_ccw.title=Roter mot klokka -page_rotate_ccw_label=Roter mot klokka - -cursor_text_select_tool.title=Aktiver tekstmarkeringsverktøy -cursor_text_select_tool_label=Tekstmarkeringsverktøy -cursor_hand_tool.title=Aktiver handverktøy -cursor_hand_tool_label=Handverktøy - -scroll_page.title=Bruk siderulling -scroll_page_label=Siderulling -scroll_vertical.title=Bruk vertikal rulling -scroll_vertical_label=Vertikal rulling -scroll_horizontal.title=Bruk horisontal rulling -scroll_horizontal_label=Horisontal rulling -scroll_wrapped.title=Bruk fleirsiderulling -scroll_wrapped_label=Fleirsiderulling - -spread_none.title=Vis enkeltsider -spread_none_label=Enkeltside -spread_odd.title=Vis oppslag med ulike sidenummer til venstre -spread_odd_label=Oppslag med framside -spread_even.title=Vis oppslag med like sidenummmer til venstre -spread_even_label=Oppslag utan framside - -# Document properties dialog box -document_properties.title=Dokumenteigenskapar… -document_properties_label=Dokumenteigenskapar… -document_properties_file_name=Filnamn: -document_properties_file_size=Filstorleik: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Tittel: -document_properties_author=Forfattar: -document_properties_subject=Emne: -document_properties_keywords=Stikkord: -document_properties_creation_date=Dato oppretta: -document_properties_modification_date=Dato endra: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Oppretta av: -document_properties_producer=PDF-verktøy: -document_properties_version=PDF-versjon: -document_properties_page_count=Sidetal: -document_properties_page_size=Sidestørrelse: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=ståande -document_properties_page_size_orientation_landscape=liggande -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Brev -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Rask nettvising: -document_properties_linearized_yes=Ja -document_properties_linearized_no=Nei -document_properties_close=Lat att - -print_progress_message=Førebur dokumentet for utskrift… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Avbryt - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Slå av/på sidestolpe -toggle_sidebar_notification2.title=Vis/gøym sidestolpe (dokumentet inneheld oversikt/vedlegg/lag) -toggle_sidebar_label=Slå av/på sidestolpe -document_outline.title=Vis dokumentdisposisjonen (dobbelklikk for å utvide/gøyme alle elementa) -document_outline_label=Dokumentdisposisjon -attachments.title=Vis vedlegg -attachments_label=Vedlegg -layers.title=Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand) -layers_label=Lag -thumbs.title=Vis miniatyrbilde -thumbs_label=Miniatyrbilde -current_outline_item.title=Finn gjeldande disposisjonselement -current_outline_item_label=Gjeldande disposisjonselement -findbar.title=Finn i dokumentet -findbar_label=Finn - -additional_layers=Ytterlegare lag -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Side {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Side {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatyrbilde av side {{page}} - -# Find panel button title and messages -find_input.title=Søk -find_input.placeholder=Søk i dokument… -find_previous.title=Finn førre førekomst av frasen -find_previous_label=Førre -find_next.title=Finn neste førekomst av frasen -find_next_label=Neste -find_highlight=Uthev alle -find_match_case_label=Skil store/små bokstavar -find_match_diacritics_label=Samsvar diakritiske teikn -find_entire_word_label=Heile ord -find_reached_top=Nådde toppen av dokumentet, fortset frå botnen -find_reached_bottom=Nådde botnen av dokumentet, fortset frå toppen -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} av {{total}} treff -find_match_count[two]={{current}} av {{total}} treff -find_match_count[few]={{current}} av {{total}} treff -find_match_count[many]={{current}} av {{total}} treff -find_match_count[other]={{current}} av {{total}} treff -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Meir enn {{limit}} treff -find_match_count_limit[one]=Meir enn {{limit}} treff -find_match_count_limit[two]=Meir enn {{limit}} treff -find_match_count_limit[few]=Meir enn {{limit}} treff -find_match_count_limit[many]=Meir enn {{limit}} treff -find_match_count_limit[other]=Meir enn {{limit}} treff -find_not_found=Fann ikkje teksten - -# Predefined zoom values -page_scale_width=Sidebreidde -page_scale_fit=Tilpass til sida -page_scale_auto=Automatisk skalering -page_scale_actual=Verkeleg storleik -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Ein feil oppstod ved lasting av PDF. -invalid_file_error=Ugyldig eller korrupt PDF-fil. -missing_file_error=Manglande PDF-fil. -unexpected_response_error=Uventa tenarrespons. -rendering_error=Ein feil oppstod under vising av sida. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}} {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} annotasjon] -password_label=Skriv inn passordet for å opne denne PDF-fila. -password_invalid=Ugyldig passord. Prøv på nytt. -password_ok=OK -password_cancel=Avbryt - -printing_not_supported=Åtvaring: Utskrift er ikkje fullstendig støtta av denne nettlesaren. -printing_not_ready=Åtvaring: PDF ikkje fullstendig innlasta for utskrift. -web_fonts_disabled=Web-skrifter er slått av: Kan ikkje bruke innbundne PDF-skrifter. - -# Editor -editor_free_text2.title=Tekst -editor_free_text2_label=Tekst -editor_ink2.title=Teikne -editor_ink2_label=Teikne - -editor_stamp.title=Legg til eit bilde -editor_stamp_label=Legg til eit bilde - -editor_stamp1.title=Legg til eller rediger bilde -editor_stamp1_label=Legg til eller rediger bilde - -free_text2_default_content=Byrje å skrive… - -# Editor Parameters -editor_free_text_color=Farge -editor_free_text_size=Storleik -editor_ink_color=Farge -editor_ink_thickness=Tjukkleik -editor_ink_opacity=Ugjennomskinleg - -editor_stamp_add_image_label=Legg til bilde -editor_stamp_add_image.title=Legg til bilde - -# Editor aria -editor_free_text2_aria_label=Tekstredigering -editor_ink2_aria_label=Teikneredigering -editor_ink_canvas_aria_label=Brukarskapt bilde diff --git a/static/pdf.js/locale/oc/viewer.ftl b/static/pdf.js/locale/oc/viewer.ftl new file mode 100644 index 00000000..68889798 --- /dev/null +++ b/static/pdf.js/locale/oc/viewer.ftl @@ -0,0 +1,354 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Pagina precedenta +pdfjs-previous-button-label = Precedent +pdfjs-next-button = + .title = Pagina seguenta +pdfjs-next-button-label = Seguent +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Pagina +# 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 = sus { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zoom arrièr +pdfjs-zoom-out-button-label = Zoom arrièr +pdfjs-zoom-in-button = + .title = Zoom avant +pdfjs-zoom-in-button-label = Zoom avant +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Bascular en mòde presentacion +pdfjs-presentation-mode-button-label = Mòde Presentacion +pdfjs-open-file-button = + .title = Dobrir lo fichièr +pdfjs-open-file-button-label = Dobrir +pdfjs-print-button = + .title = Imprimir +pdfjs-print-button-label = Imprimir +pdfjs-save-button = + .title = Enregistrar +pdfjs-save-button-label = Enregistrar +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Telecargar +# 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 = Telecargar +pdfjs-bookmark-button = + .title = Pagina actuala (mostrar l’adreça de la pagina actuala) +pdfjs-bookmark-button-label = Pagina actuala +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Dobrir amb l’aplicacion +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Dobrir amb l’aplicacion + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Aisinas +pdfjs-tools-button-label = Aisinas +pdfjs-first-page-button = + .title = Anar a la primièra pagina +pdfjs-first-page-button-label = Anar a la primièra pagina +pdfjs-last-page-button = + .title = Anar a la darrièra pagina +pdfjs-last-page-button-label = Anar a la darrièra pagina +pdfjs-page-rotate-cw-button = + .title = Rotacion orària +pdfjs-page-rotate-cw-button-label = Rotacion orària +pdfjs-page-rotate-ccw-button = + .title = Rotacion antiorària +pdfjs-page-rotate-ccw-button-label = Rotacion antiorària +pdfjs-cursor-text-select-tool-button = + .title = Activar l'aisina de seleccion de tèxte +pdfjs-cursor-text-select-tool-button-label = Aisina de seleccion de tèxte +pdfjs-cursor-hand-tool-button = + .title = Activar l’aisina man +pdfjs-cursor-hand-tool-button-label = Aisina man +pdfjs-scroll-page-button = + .title = Activar lo defilament per pagina +pdfjs-scroll-page-button-label = Defilament per pagina +pdfjs-scroll-vertical-button = + .title = Utilizar lo defilament vertical +pdfjs-scroll-vertical-button-label = Defilament vertical +pdfjs-scroll-horizontal-button = + .title = Utilizar lo defilament orizontal +pdfjs-scroll-horizontal-button-label = Defilament orizontal +pdfjs-scroll-wrapped-button = + .title = Activar lo defilament continú +pdfjs-scroll-wrapped-button-label = Defilament continú +pdfjs-spread-none-button = + .title = Agropar pas las paginas doas a doas +pdfjs-spread-none-button-label = Una sola pagina +pdfjs-spread-odd-button = + .title = Mostrar doas paginas en començant per las paginas imparas a esquèrra +pdfjs-spread-odd-button-label = Dobla pagina, impara a drecha +pdfjs-spread-even-button = + .title = Mostrar doas paginas en començant per las paginas paras a esquèrra +pdfjs-spread-even-button-label = Dobla pagina, para a drecha + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Proprietats del document… +pdfjs-document-properties-button-label = Proprietats del document… +pdfjs-document-properties-file-name = Nom del fichièr : +pdfjs-document-properties-file-size = Talha del fichièr : +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } Ko ({ $size_b } octets) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } Mo ({ $size_b } octets) +pdfjs-document-properties-title = Títol : +pdfjs-document-properties-author = Autor : +pdfjs-document-properties-subject = Subjècte : +pdfjs-document-properties-keywords = Mots claus : +pdfjs-document-properties-creation-date = Data de creacion : +pdfjs-document-properties-modification-date = Data de modificacion : +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, a { $time } +pdfjs-document-properties-creator = Creator : +pdfjs-document-properties-producer = Aisina de conversion PDF : +pdfjs-document-properties-version = Version PDF : +pdfjs-document-properties-page-count = Nombre de paginas : +pdfjs-document-properties-page-size = Talha de la pagina : +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = retrach +pdfjs-document-properties-page-size-orientation-landscape = païsatge +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 = Letra +pdfjs-document-properties-page-size-name-legal = Document juridic + +## 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 = Vista web rapida : +pdfjs-document-properties-linearized-yes = Òc +pdfjs-document-properties-linearized-no = Non +pdfjs-document-properties-close-button = Tampar + +## Print + +pdfjs-print-progress-message = Preparacion del document per l’impression… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Anullar +pdfjs-printing-not-supported = Atencion : l'impression es pas complètament gerida per aqueste navegador. +pdfjs-printing-not-ready = Atencion : lo PDF es pas entièrament cargat per lo poder imprimir. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Afichar/amagar lo panèl lateral +pdfjs-toggle-sidebar-notification-button = + .title = Afichar/amagar lo panèl lateral (lo document conten esquèmas/pèças juntas/calques) +pdfjs-toggle-sidebar-button-label = Afichar/amagar lo panèl lateral +pdfjs-document-outline-button = + .title = Mostrar los esquèmas del document (dobleclicar per espandre/reduire totes los elements) +pdfjs-document-outline-button-label = Marcapaginas del document +pdfjs-attachments-button = + .title = Visualizar las pèças juntas +pdfjs-attachments-button-label = Pèças juntas +pdfjs-layers-button = + .title = Afichar los calques (doble-clicar per reïnicializar totes los calques a l’estat per defaut) +pdfjs-layers-button-label = Calques +pdfjs-thumbs-button = + .title = Afichar las vinhetas +pdfjs-thumbs-button-label = Vinhetas +pdfjs-current-outline-item-button = + .title = Trobar l’element de plan actual +pdfjs-current-outline-item-button-label = Element de plan actual +pdfjs-findbar-button = + .title = Cercar dins lo document +pdfjs-findbar-button-label = Recercar +pdfjs-additional-layers = Calques suplementaris + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Pagina { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Vinheta de la pagina { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Recercar + .placeholder = Cercar dins lo document… +pdfjs-find-previous-button = + .title = Tròba l'ocurréncia precedenta de la frasa +pdfjs-find-previous-button-label = Precedent +pdfjs-find-next-button = + .title = Tròba l'ocurréncia venenta de la frasa +pdfjs-find-next-button-label = Seguent +pdfjs-find-highlight-checkbox = Suslinhar tot +pdfjs-find-match-case-checkbox-label = Respectar la cassa +pdfjs-find-match-diacritics-checkbox-label = Respectar los diacritics +pdfjs-find-entire-word-checkbox-label = Mots entièrs +pdfjs-find-reached-top = Naut de la pagina atenh, perseguida del bas +pdfjs-find-reached-bottom = Bas de la pagina atench, perseguida al començament +pdfjs-find-not-found = Frasa pas trobada + +## Predefined zoom values + +pdfjs-page-scale-width = Largor plena +pdfjs-page-scale-fit = Pagina entièra +pdfjs-page-scale-auto = Zoom automatic +pdfjs-page-scale-actual = Talha vertadièra +# 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 = Pagina { $page } + +## Loading indicator messages + +pdfjs-loading-error = Una error s'es producha pendent lo cargament del fichièr PDF. +pdfjs-invalid-file-error = Fichièr PDF invalid o corromput. +pdfjs-missing-file-error = Fichièr PDF mancant. +pdfjs-unexpected-response-error = Responsa de servidor imprevista. +pdfjs-rendering-error = Una error s'es producha pendent l'afichatge de la pagina. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date } a { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Anotacion { $type }] + +## Password + +pdfjs-password-label = Picatz lo senhal per dobrir aqueste fichièr PDF. +pdfjs-password-invalid = Senhal incorrècte. Tornatz ensajar. +pdfjs-password-ok-button = D'acòrdi +pdfjs-password-cancel-button = Anullar +pdfjs-web-fonts-disabled = Las polissas web son desactivadas : impossible d'utilizar las polissas integradas al PDF. + +## Editing + +pdfjs-editor-free-text-button = + .title = Tèxte +pdfjs-editor-free-text-button-label = Tèxte +pdfjs-editor-ink-button = + .title = Dessenhar +pdfjs-editor-ink-button-label = Dessenhar +pdfjs-editor-stamp-button = + .title = Apondre o modificar d’imatges +pdfjs-editor-stamp-button-label = Apondre o modificar d’imatges + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-freetext-button = + .title = Suprimir lo tèxte +pdfjs-editor-remove-stamp-button = + .title = Suprimir l’imatge + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Color +pdfjs-editor-free-text-size-input = Talha +pdfjs-editor-ink-color-input = Color +pdfjs-editor-ink-thickness-input = Espessor +pdfjs-editor-ink-opacity-input = Opacitat +pdfjs-editor-stamp-add-image-button = + .title = Apondre imatge +pdfjs-editor-stamp-add-image-button-label = Apondre imatge +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Espessor +pdfjs-free-text = + .aria-label = Editor de tèxte +pdfjs-free-text-default-content = Començatz d’escriure… +pdfjs-ink = + .aria-label = Editor de dessenh +pdfjs-ink-canvas = + .aria-label = Imatge creat per l’utilizaire + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Tèxt alternatiu +pdfjs-editor-alt-text-edit-button-label = Modificar lo tèxt alternatiu +pdfjs-editor-alt-text-dialog-label = Causir una opcion +pdfjs-editor-alt-text-add-description-label = Apondre una descripcion +pdfjs-editor-alt-text-cancel-button = Anullar +pdfjs-editor-alt-text-save-button = Enregistrar + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Color de suslinhatge +pdfjs-editor-colorpicker-button = + .title = Cambiar de color +pdfjs-editor-colorpicker-yellow = + .title = Jaune +pdfjs-editor-colorpicker-green = + .title = Verd +pdfjs-editor-colorpicker-blue = + .title = Blau +pdfjs-editor-colorpicker-pink = + .title = Ròse +pdfjs-editor-colorpicker-red = + .title = Roge + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = O afichar tot +pdfjs-editor-highlight-show-all-button = + .title = O afichar tot diff --git a/static/pdf.js/locale/oc/viewer.properties b/static/pdf.js/locale/oc/viewer.properties deleted file mode 100644 index 2afe8efd..00000000 --- a/static/pdf.js/locale/oc/viewer.properties +++ /dev/null @@ -1,278 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Pagina precedenta -previous_label=Precedent -next.title=Pagina seguenta -next_label=Seguent - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Pagina -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=sus {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} de {{pagesCount}}) - -zoom_out.title=Zoom arrièr -zoom_out_label=Zoom arrièr -zoom_in.title=Zoom avant -zoom_in_label=Zoom avant -zoom.title=Zoom -presentation_mode.title=Bascular en mòde presentacion -presentation_mode_label=Mòde Presentacion -open_file.title=Dobrir lo fichièr -open_file_label=Dobrir -print.title=Imprimir -print_label=Imprimir -save.title=Enregistrar -save_label=Enregistrar -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Telecargar -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Telecargar -bookmark1.title=Pagina actuala (mostrar l’adreça de la pagina actuala) -bookmark1_label=Pagina actuala -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Dobrir amb l’aplicacion -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Dobrir amb l’aplicacion - -# Secondary toolbar and context menu -tools.title=Aisinas -tools_label=Aisinas -first_page.title=Anar a la primièra pagina -first_page_label=Anar a la primièra pagina -last_page.title=Anar a la darrièra pagina -last_page_label=Anar a la darrièra pagina -page_rotate_cw.title=Rotacion orària -page_rotate_cw_label=Rotacion orària -page_rotate_ccw.title=Rotacion antiorària -page_rotate_ccw_label=Rotacion antiorària - -cursor_text_select_tool.title=Activar l'aisina de seleccion de tèxte -cursor_text_select_tool_label=Aisina de seleccion de tèxte -cursor_hand_tool.title=Activar l’aisina man -cursor_hand_tool_label=Aisina man - -scroll_page.title=Activar lo defilament per pagina -scroll_page_label=Defilament per pagina -scroll_vertical.title=Utilizar lo defilament vertical -scroll_vertical_label=Defilament vertical -scroll_horizontal.title=Utilizar lo defilament orizontal -scroll_horizontal_label=Defilament orizontal -scroll_wrapped.title=Activar lo defilament continú -scroll_wrapped_label=Defilament continú - -spread_none.title=Agropar pas las paginas doas a doas -spread_none_label=Una sola pagina -spread_odd.title=Mostrar doas paginas en començant per las paginas imparas a esquèrra -spread_odd_label=Dobla pagina, impara a drecha -spread_even.title=Mostrar doas paginas en començant per las paginas paras a esquèrra -spread_even_label=Dobla pagina, para a drecha - -# Document properties dialog box -document_properties.title=Proprietats del document… -document_properties_label=Proprietats del document… -document_properties_file_name=Nom del fichièr : -document_properties_file_size=Talha del fichièr : -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} Ko ({{size_b}} octets) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} Mo ({{size_b}} octets) -document_properties_title=Títol : -document_properties_author=Autor : -document_properties_subject=Subjècte : -document_properties_keywords=Mots claus : -document_properties_creation_date=Data de creacion : -document_properties_modification_date=Data de modificacion : -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, a {{time}} -document_properties_creator=Creator : -document_properties_producer=Aisina de conversion PDF : -document_properties_version=Version PDF : -document_properties_page_count=Nombre de paginas : -document_properties_page_size=Talha de la pagina : -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=retrach -document_properties_page_size_orientation_landscape=païsatge -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letra -document_properties_page_size_name_legal=Document juridic -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Vista web rapida : -document_properties_linearized_yes=Òc -document_properties_linearized_no=Non -document_properties_close=Tampar - -print_progress_message=Preparacion del document per l’impression… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Anullar - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Afichar/amagar lo panèl lateral -toggle_sidebar_notification2.title=Afichar/amagar lo panèl lateral (lo document conten esquèmas/pèças juntas/calques) -toggle_sidebar_label=Afichar/amagar lo panèl lateral -document_outline.title=Mostrar los esquèmas del document (dobleclicar per espandre/reduire totes los elements) -document_outline_label=Marcapaginas del document -attachments.title=Visualizar las pèças juntas -attachments_label=Pèças juntas -layers.title=Afichar los calques (doble-clicar per reïnicializar totes los calques a l’estat per defaut) -layers_label=Calques -thumbs.title=Afichar las vinhetas -thumbs_label=Vinhetas -current_outline_item.title=Trobar l’element de plan actual -current_outline_item_label=Element de plan actual -findbar.title=Cercar dins lo document -findbar_label=Recercar - -additional_layers=Calques suplementaris -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Pagina {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Pagina {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Vinheta de la pagina {{page}} - -# Find panel button title and messages -find_input.title=Recercar -find_input.placeholder=Cercar dins lo document… -find_previous.title=Tròba l'ocurréncia precedenta de la frasa -find_previous_label=Precedent -find_next.title=Tròba l'ocurréncia venenta de la frasa -find_next_label=Seguent -find_highlight=Suslinhar tot -find_match_case_label=Respectar la cassa -find_match_diacritics_label=Respectar los diacritics -find_entire_word_label=Mots entièrs -find_reached_top=Naut de la pagina atenh, perseguida del bas -find_reached_bottom=Bas de la pagina atench, perseguida al començament -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]=Ocuréncia {{current}} sus {{total}} -find_match_count[two]=Ocuréncia {{current}} sus {{total}} -find_match_count[few]=Ocuréncia {{current}} sus {{total}} -find_match_count[many]=Ocuréncia {{current}} sus {{total}} -find_match_count[other]=Ocuréncia {{current}} sus {{total}} -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Mai de {{limit}} ocuréncias -find_match_count_limit[one]=Mai de {{limit}} ocuréncia -find_match_count_limit[two]=Mai de {{limit}} ocuréncias -find_match_count_limit[few]=Mai de {{limit}} ocuréncias -find_match_count_limit[many]=Mai de {{limit}} ocuréncias -find_match_count_limit[other]=Mai de {{limit}} ocuréncias -find_not_found=Frasa pas trobada - -# Predefined zoom values -page_scale_width=Largor plena -page_scale_fit=Pagina entièra -page_scale_auto=Zoom automatic -page_scale_actual=Talha vertadièra -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Una error s'es producha pendent lo cargament del fichièr PDF. -invalid_file_error=Fichièr PDF invalid o corromput. -missing_file_error=Fichièr PDF mancant. -unexpected_response_error=Responsa de servidor imprevista. -rendering_error=Una error s'es producha pendent l'afichatge de la pagina. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}} a {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Anotacion {{type}}] -password_label=Picatz lo senhal per dobrir aqueste fichièr PDF. -password_invalid=Senhal incorrècte. Tornatz ensajar. -password_ok=D'acòrdi -password_cancel=Anullar - -printing_not_supported=Atencion : l'impression es pas complètament gerida per aqueste navegador. -printing_not_ready=Atencion : lo PDF es pas entièrament cargat per lo poder imprimir. -web_fonts_disabled=Las polissas web son desactivadas : impossible d'utilizar las polissas integradas al PDF. - -# Editor -editor_free_text2.title=Tèxte -editor_free_text2_label=Tèxte -editor_ink2.title=Dessenhar -editor_ink2_label=Dessenhar - -editor_stamp1.title=Apondre o modificar d’imatges -editor_stamp1_label=Apondre o modificar d’imatges - -free_text2_default_content=Començatz d’escriure… - -# Editor Parameters -editor_free_text_color=Color -editor_free_text_size=Talha -editor_ink_color=Color -editor_ink_thickness=Espessor -editor_ink_opacity=Opacitat - -editor_stamp_add_image_label=Apondre imatge -editor_stamp_add_image.title=Apondre imatge - -# Editor aria -editor_free_text2_aria_label=Editor de tèxte -editor_ink2_aria_label=Editor de dessenh -editor_ink_canvas_aria_label=Imatge creat per l’utilizaire - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Tèxt alternatiu -editor_alt_text_edit_button_label=Modificar lo tèxt alternatiu -editor_alt_text_dialog_label=Causir una opcion -editor_alt_text_add_description_label=Apondre una descripcion -editor_alt_text_cancel_button=Anullar -editor_alt_text_save_button=Enregistrar -# This is a placeholder for the alt text input area diff --git a/static/pdf.js/locale/pa-IN/viewer.ftl b/static/pdf.js/locale/pa-IN/viewer.ftl new file mode 100644 index 00000000..eef67d35 --- /dev/null +++ b/static/pdf.js/locale/pa-IN/viewer.ftl @@ -0,0 +1,396 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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 = { $pagesCount }) ਵਿੱਚੋਂ ({ $pageNumber } +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-presentation-mode-button = + .title = ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ ਵਿੱਚ ਜਾਓ +pdfjs-presentation-mode-button-label = ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ +pdfjs-open-file-button = + .title = ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹੋ +pdfjs-open-file-button-label = ਖੋਲ੍ਹੋ +pdfjs-print-button = + .title = ਪਰਿੰਟ +pdfjs-print-button-label = ਪਰਿੰਟ +pdfjs-save-button = + .title = ਸੰਭਾਲੋ +pdfjs-save-button-label = ਸੰਭਾਲੋ +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = ਡਾਊਨਲੋਡ +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = ਡਾਊਨਲੋਡ +pdfjs-bookmark-button = + .title = ਮੌਜੂਦਾ ਸਫ਼਼ਾ (ਮੌਜੂਦਾ ਸਫ਼ੇ ਤੋਂ URL ਵੇਖੋ) +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 = ਸਮੇਟਿਆ ਸਰਕਾਉਣਾ +pdfjs-spread-none-button = + .title = ਸਫ਼ਾ ਫੈਲਾਅ ਵਿੱਚ ਸ਼ਾਮਲ ਨਾ ਹੋਵੋ +pdfjs-spread-none-button-label = ਕੋਈ ਫੈਲਾਅ ਨਹੀਂ +pdfjs-spread-odd-button = + .title = ਟਾਂਕ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ +pdfjs-spread-odd-button-label = ਟਾਂਕ ਫੈਲਾਅ +pdfjs-spread-even-button = + .title = ਜਿਸਤ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ +pdfjs-spread-even-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 = ਫਾਈਲ ਦਾ ਆਕਾਰ: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } ਬਾਈਟ) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } ਬਾਈਟ) +pdfjs-document-properties-title = ਟਾਈਟਲ: +pdfjs-document-properties-author = ਲੇਖਕ: +pdfjs-document-properties-subject = ਵਿਸ਼ਾ: +pdfjs-document-properties-keywords = ਸ਼ਬਦ: +pdfjs-document-properties-creation-date = ਬਣਾਉਣ ਦੀ ਮਿਤੀ: +pdfjs-document-properties-modification-date = ਸੋਧ ਦੀ ਮਿਤੀ: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = ਪੋਰਟਰੇਟ +pdfjs-document-properties-page-size-orientation-landscape = ਲੈਂਡਸਕੇਪ +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = ਲੈਟਰ +pdfjs-document-properties-page-size-name-legal = ਕਨੂੰਨੀ + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = ਤੇਜ਼ ਵੈੱਬ ਝਲਕ: +pdfjs-document-properties-linearized-yes = ਹਾਂ +pdfjs-document-properties-linearized-no = ਨਹੀਂ +pdfjs-document-properties-close-button = ਬੰਦ ਕਰੋ + +## Print + +pdfjs-print-progress-message = …ਪਰਿੰਟ ਕਰਨ ਲਈ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਤਿਆਰ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = ਰੱਦ ਕਰੋ +pdfjs-printing-not-supported = ਸਾਵਧਾਨ: ਇਹ ਬਰਾਊਜ਼ਰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਸਹਾਇਕ ਨਹੀਂ ਹੈ। +pdfjs-printing-not-ready = ਸਾਵਧਾਨ: PDF ਨੂੰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਲੋਡ ਨਹੀਂ ਹੈ। + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = ਬਾਹੀ ਬਦਲੋ +pdfjs-toggle-sidebar-notification-button = + .title = ਬਾਹੀ ਨੂੰ ਬਦਲੋ (ਦਸਤਾਵੇਜ਼ ਖਾਕਾ/ਅਟੈਚਮੈਂਟ/ਪਰਤਾਂ ਰੱਖਦਾ ਹੈ) +pdfjs-toggle-sidebar-button-label = ਬਾਹੀ ਬਦਲੋ +pdfjs-document-outline-button = + .title = ਦਸਤਾਵੇਜ਼ ਖਾਕਾ ਦਿਖਾਓ (ਸਾਰੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਫੈਲਾਉਣ/ਸਮੇਟਣ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ) +pdfjs-document-outline-button-label = ਦਸਤਾਵੇਜ਼ ਖਾਕਾ +pdfjs-attachments-button = + .title = ਅਟੈਚਮੈਂਟ ਵੇਖਾਓ +pdfjs-attachments-button-label = ਅਟੈਚਮੈਂਟਾਂ +pdfjs-layers-button = + .title = ਪਰਤਾਂ ਵੇਖਾਓ (ਸਾਰੀਆਂ ਪਰਤਾਂ ਨੂੰ ਮੂਲ ਹਾਲਤ ਉੱਤੇ ਮੁੜ-ਸੈੱਟ ਕਰਨ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ) +pdfjs-layers-button-label = ਪਰਤਾਂ +pdfjs-thumbs-button = + .title = ਥੰਮਨੇਲ ਨੂੰ ਵੇਖਾਓ +pdfjs-thumbs-button-label = ਥੰਮਨੇਲ +pdfjs-current-outline-item-button = + .title = ਮੌੌਜੂਦਾ ਖਾਕਾ ਚੀਜ਼ ਲੱਭੋ +pdfjs-current-outline-item-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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = { $page } ਸਫ਼ੇ ਦਾ ਥੰਮਨੇਲ + +## Find panel button title and messages + +pdfjs-find-input = + .title = ਲੱਭੋ + .placeholder = …ਦਸਤਾਵੇਜ਼ 'ਚ ਲੱਭੋ +pdfjs-find-previous-button = + .title = ਵਾਕ ਦੀ ਪਿਛਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ +pdfjs-find-previous-button-label = ਪਿੱਛੇ +pdfjs-find-next-button = + .title = ਵਾਕ ਦੀ ਅਗਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ +pdfjs-find-next-button-label = ਅੱਗੇ +pdfjs-find-highlight-checkbox = ਸਭ ਉਭਾਰੋ +pdfjs-find-match-case-checkbox-label = ਅੱਖਰ ਆਕਾਰ ਨੂੰ ਮਿਲਾਉ +pdfjs-find-match-diacritics-checkbox-label = ਭੇਦਸੂਚਕ ਮੇਲ +pdfjs-find-entire-word-checkbox-label = ਪੂਰੇ ਸ਼ਬਦ +pdfjs-find-reached-top = ਦਸਤਾਵੇਜ਼ ਦੇ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਥੱਲੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ +pdfjs-find-reached-bottom = ਦਸਤਾਵੇਜ਼ ਦੇ ਅੰਤ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਉੱਤੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ +# 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] { $total } ਵਿੱਚੋਂ { $current } ਮੇਲ + *[other] { $total } ਵਿੱਚੋਂ { $current } ਮੇਲ + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] { $limit } ਤੋਂ ਵੱਧ ਮੇਲ + *[other] { $limit } ਤੋਂ ਵੱਧ ਮੇਲ + } +pdfjs-find-not-found = ਵਾਕ ਨਹੀਂ ਲੱਭਿਆ + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = PDF ਲੋਡ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ। +pdfjs-invalid-file-error = ਗਲਤ ਜਾਂ ਨਿਕਾਰਾ PDF ਫਾਈਲ ਹੈ। +pdfjs-missing-file-error = ਨਾ-ਮੌਜੂਦ PDF ਫਾਈਲ। +pdfjs-unexpected-response-error = ਅਣਜਾਣ ਸਰਵਰ ਜਵਾਬ। +pdfjs-rendering-error = ਸਫ਼ਾ ਰੈਡਰ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ। + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } ਵਿਆਖਿਆ] + +## Password + +pdfjs-password-label = ਇਹ PDF ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਪਾਸਵਰਡ ਦਿਉ। +pdfjs-password-invalid = ਗਲਤ ਪਾਸਵਰਡ। ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ। +pdfjs-password-ok-button = ਠੀਕ ਹੈ +pdfjs-password-cancel-button = ਰੱਦ ਕਰੋ +pdfjs-web-fonts-disabled = ਵੈਬ ਫੋਂਟ ਬੰਦ ਹਨ: ਇੰਬੈਡ PDF ਫੋਂਟ ਨੂੰ ਵਰਤਣ ਲਈ ਅਸਮਰੱਥ ਹੈ। + +## Editing + +pdfjs-editor-free-text-button = + .title = ਲਿਖਤ +pdfjs-editor-free-text-button-label = ਲਿਖਤ +pdfjs-editor-ink-button = + .title = ਵਾਹੋ +pdfjs-editor-ink-button-label = ਵਾਹੋ +pdfjs-editor-stamp-button = + .title = ਚਿੱਤਰ ਜੋੜੋ ਜਾਂ ਸੋਧੋ +pdfjs-editor-stamp-button-label = ਚਿੱਤਰ ਜੋੜੋ ਜਾਂ ਸੋਧੋ +pdfjs-editor-highlight-button = + .title = ਹਾਈਲਾਈਟ +pdfjs-editor-highlight-button-label = ਹਾਈਲਾਈਟ +pdfjs-highlight-floating-button = + .title = ਹਾਈਲਾਈਟ +pdfjs-highlight-floating-button1 = + .title = ਹਾਈਲਾਈਟ + .aria-label = ਹਾਈਲਾਈਟ +pdfjs-highlight-floating-button-label = ਹਾਈਲਾਈਟ + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = ਡਰਾਇੰਗ ਨੂੰ ਹਟਾਓ +pdfjs-editor-remove-freetext-button = + .title = ਲਿਖਤ ਨੂੰ ਹਟਾਓ +pdfjs-editor-remove-stamp-button = + .title = ਚਿੱਤਰ ਨੂੰ ਹਟਾਓ +pdfjs-editor-remove-highlight-button = + .title = ਹਾਈਲਾਈਟ ਨੂੰ ਹਟਾਓ + +## + +# 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 = ਧੁੰਦਲਾਪਨ +pdfjs-editor-stamp-add-image-button = + .title = ਚਿੱਤਰ ਜੋੜੋ +pdfjs-editor-stamp-add-image-button-label = ਚਿੱਤਰ ਜੋੜੋ +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = ਮੋਟਾਈ +pdfjs-editor-free-highlight-thickness-title = + .title = ਚੀਜ਼ਾਂ ਨੂੰ ਹੋਰ ਲਿਖਤਾਂ ਤੋਂ ਉਘਾੜਨ ਸਮੇਂ ਮੋਟਾਈ ਨੂੰ ਬਦਲੋ +pdfjs-free-text = + .aria-label = ਲਿਖਤ ਐਡੀਟਰ +pdfjs-free-text-default-content = …ਲਿਖਣਾ ਸ਼ੁਰੂ ਕਰੋ +pdfjs-ink = + .aria-label = ਵਹਾਉਣ ਐਡੀਟਰ +pdfjs-ink-canvas = + .aria-label = ਵਰਤੋਂਕਾਰ ਵਲੋਂ ਬਣਾਇਆ ਚਿੱਤਰ + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = ਬਦਲਵੀਂ ਲਿਖਤ +pdfjs-editor-alt-text-edit-button-label = ਬਦਲਵੀ ਲਿਖਤ ਨੂੰ ਸੋਧੋ +pdfjs-editor-alt-text-dialog-label = ਚੋਣ ਕਰੋ +pdfjs-editor-alt-text-dialog-description = ਚਿੱਤਰ ਨਾ ਦਿੱਸਣ ਜਾਂ ਲੋਡ ਨਾ ਹੋਣ ਦੀ ਹਾਲਤ ਵਿੱਚ Alt ਲਿਖਤ (ਬਦਲਵੀਂ ਲਿਖਤ) ਲੋਕਾਂ ਲਈ ਮਦਦਗਾਰ ਹੁੰਦੀ ਹੈ। +pdfjs-editor-alt-text-add-description-label = ਵਰਣਨ ਜੋੜੋ +pdfjs-editor-alt-text-add-description-description = 1-2 ਵਾਕ ਰੱਖੋ, ਜੋ ਕਿ ਵਿਸ਼ੇ, ਸੈਟਿੰਗ ਜਾਂ ਕਾਰਵਾਈਆਂ ਬਾਰੇ ਦਰਸਾਉਂਦੇ ਹੋਣ। +pdfjs-editor-alt-text-mark-decorative-label = ਸਜਾਵਟ ਵਜੋਂ ਨਿਸ਼ਾਨ ਲਾਇਆ +pdfjs-editor-alt-text-mark-decorative-description = ਇਸ ਨੂੰ ਸਜਾਵਟੀ ਚਿੱਤਰਾਂ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ ਜਿਵੇਂ ਕਿ ਹਾਸ਼ੀਆ ਜਾਂ ਵਾਟਰਮਾਰਕ ਆਦਿ। +pdfjs-editor-alt-text-cancel-button = ਰੱਦ ਕਰੋ +pdfjs-editor-alt-text-save-button = ਸੰਭਾਲੋ +pdfjs-editor-alt-text-decorative-tooltip = ਸਜਾਵਟ ਵਜੋਂ ਨਿਸ਼ਾਨ ਲਾਓ +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = ਮਿਸਾਲ ਵਜੋਂ, “ਗੱਭਰੂ ਭੋਜਨ ਲੈ ਕੇ ਮੇਜ਼ ਉੱਤੇ ਬੈਠਾ ਹੈ” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = ਉੱਤੇ ਖੱਬਾ ਕੋਨਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ +pdfjs-editor-resizer-label-top-middle = ਉੱਤੇ ਮੱਧ — ਮੁੜ-ਆਕਾਰ ਕਰੋ +pdfjs-editor-resizer-label-top-right = ਉੱਤੇ ਸੱਜਾ ਕੋਨਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ +pdfjs-editor-resizer-label-middle-right = ਮੱਧ ਸੱਜਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ +pdfjs-editor-resizer-label-bottom-right = ਹੇਠਾਂ ਸੱਜਾ ਕੋਨਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ +pdfjs-editor-resizer-label-bottom-middle = ਹੇਠਾਂ ਮੱਧ — ਮੁੜ-ਆਕਾਰ ਕਰੋ +pdfjs-editor-resizer-label-bottom-left = ਹੇਠਾਂ ਖੱਬਾ ਕੋਨਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ +pdfjs-editor-resizer-label-middle-left = ਮੱਧ ਖੱਬਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = ਹਾਈਟਲਾਈਟ ਦਾ ਰੰਗ +pdfjs-editor-colorpicker-button = + .title = ਰੰਗ ਨੂੰ ਬਦਲੋ +pdfjs-editor-colorpicker-dropdown = + .aria-label = ਰੰਗ ਚੋਣਾਂ +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 = ਸਭ ਵੇਖੋ diff --git a/static/pdf.js/locale/pa-IN/viewer.properties b/static/pdf.js/locale/pa-IN/viewer.properties deleted file mode 100644 index 2cb316fb..00000000 --- a/static/pdf.js/locale/pa-IN/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=ਪਿਛਲਾ ਸਫ਼ਾ -previous_label=ਪਿੱਛੇ -next.title=ਅਗਲਾ ਸਫ਼ਾ -next_label=ਅੱਗੇ - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=ਸਫ਼ਾ -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages={{pagesCount}} ਵਿੱਚੋਂ -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages={{pagesCount}}) ਵਿੱਚੋਂ ({{pageNumber}} - -zoom_out.title=ਜ਼ੂਮ ਆਉਟ -zoom_out_label=ਜ਼ੂਮ ਆਉਟ -zoom_in.title=ਜ਼ੂਮ ਇਨ -zoom_in_label=ਜ਼ੂਮ ਇਨ -zoom.title=ਜ਼ੂਨ -presentation_mode.title=ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ ਵਿੱਚ ਜਾਓ -presentation_mode_label=ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ -open_file.title=ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹੋ -open_file_label=ਖੋਲ੍ਹੋ -print.title=ਪਰਿੰਟ -print_label=ਪਰਿੰਟ -save.title=ਸੰਭਾਲੋ -save_label=ਸੰਭਾਲੋ -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=ਡਾਊਨਲੋਡ -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=ਡਾਊਨਲੋਡ -bookmark1.title=ਮੌਜੂਦਾ ਸਫ਼਼ਾ (ਮੌਜੂਦਾ ਸਫ਼ੇ ਤੋਂ URL ਵੇਖੋ) -bookmark1_label=ਮੌਜੂਦਾ ਸਫ਼਼ਾ -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=ਐਪ ਵਿੱਚ ਖੋਲ੍ਹੋ -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=ਐਪ ਵਿੱਚ ਖੋਲ੍ਹੋ - -# Secondary toolbar and context menu -tools.title=ਟੂਲ -tools_label=ਟੂਲ -first_page.title=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ -first_page_label=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ -last_page.title=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ -last_page_label=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ -page_rotate_cw.title=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਓ -page_rotate_cw_label=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਓ -page_rotate_ccw.title=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਓ -page_rotate_ccw_label=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਓ - -cursor_text_select_tool.title=ਲਿਖਤ ਚੋਣ ਟੂਲ ਸਮਰੱਥ ਕਰੋ -cursor_text_select_tool_label=ਲਿਖਤ ਚੋਣ ਟੂਲ -cursor_hand_tool.title=ਹੱਥ ਟੂਲ ਸਮਰੱਥ ਕਰੋ -cursor_hand_tool_label=ਹੱਥ ਟੂਲ - -scroll_page.title=ਸਫ਼ਾ ਖਿਸਕਾਉਣ ਨੂੰ ਵਰਤੋਂ -scroll_page_label=ਸਫ਼ਾ ਖਿਸਕਾਉਣਾ -scroll_vertical.title=ਖੜ੍ਹਵੇਂ ਸਕਰਾਉਣ ਨੂੰ ਵਰਤੋਂ -scroll_vertical_label=ਖੜ੍ਹਵਾਂ ਸਰਕਾਉਣਾ -scroll_horizontal.title=ਲੇਟਵੇਂ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ -scroll_horizontal_label=ਲੇਟਵਾਂ ਸਰਕਾਉਣਾ -scroll_wrapped.title=ਸਮੇਟੇ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ -scroll_wrapped_label=ਸਮੇਟਿਆ ਸਰਕਾਉਣਾ - -spread_none.title=ਸਫ਼ਾ ਫੈਲਾਅ ਵਿੱਚ ਸ਼ਾਮਲ ਨਾ ਹੋਵੋ -spread_none_label=ਕੋਈ ਫੈਲਾਅ ਨਹੀਂ -spread_odd.title=ਟਾਂਕ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ -spread_odd_label=ਟਾਂਕ ਫੈਲਾਅ -spread_even.title=ਜਿਸਤ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ -spread_even_label=ਜਿਸਤ ਫੈਲਾਅ - -# Document properties dialog box -document_properties.title=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ -document_properties_label=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ -document_properties_file_name=ਫਾਈਲ ਦਾ ਨਾਂ: -document_properties_file_size=ਫਾਈਲ ਦਾ ਆਕਾਰ: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} ਬਾਈਟ) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} ਬਾਈਟ) -document_properties_title=ਟਾਈਟਲ: -document_properties_author=ਲੇਖਕ: -document_properties_subject=ਵਿਸ਼ਾ: -document_properties_keywords=ਸ਼ਬਦ: -document_properties_creation_date=ਬਣਾਉਣ ਦੀ ਮਿਤੀ: -document_properties_modification_date=ਸੋਧ ਦੀ ਮਿਤੀ: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=ਨਿਰਮਾਤਾ: -document_properties_producer=PDF ਪ੍ਰੋਡਿਊਸਰ: -document_properties_version=PDF ਵਰਜਨ: -document_properties_page_count=ਸਫ਼ੇ ਦੀ ਗਿਣਤੀ: -document_properties_page_size=ਸਫ਼ਾ ਆਕਾਰ: -document_properties_page_size_unit_inches=ਇੰਚ -document_properties_page_size_unit_millimeters=ਮਿਮੀ -document_properties_page_size_orientation_portrait=ਪੋਰਟਰੇਟ -document_properties_page_size_orientation_landscape=ਲੈਂਡਸਕੇਪ -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=ਲੈਟਰ -document_properties_page_size_name_legal=ਕਨੂੰਨੀ -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=ਤੇਜ਼ ਵੈੱਬ ਝਲਕ: -document_properties_linearized_yes=ਹਾਂ -document_properties_linearized_no=ਨਹੀਂ -document_properties_close=ਬੰਦ ਕਰੋ - -print_progress_message=…ਪਰਿੰਟ ਕਰਨ ਲਈ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਤਿਆਰ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=ਰੱਦ ਕਰੋ - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=ਬਾਹੀ ਬਦਲੋ -toggle_sidebar_notification2.title=ਬਾਹੀ ਨੂੰ ਬਦਲੋ (ਦਸਤਾਵੇਜ਼ ਖਾਕਾ/ਅਟੈਚਮੈਂਟ/ਪਰਤਾਂ ਰੱਖਦਾ ਹੈ) -toggle_sidebar_label=ਬਾਹੀ ਬਦਲੋ -document_outline.title=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ ਦਿਖਾਓ (ਸਾਰੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਫੈਲਾਉਣ/ਸਮੇਟਣ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ) -document_outline_label=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ -attachments.title=ਅਟੈਚਮੈਂਟ ਵੇਖਾਓ -attachments_label=ਅਟੈਚਮੈਂਟਾਂ -layers.title=ਪਰਤਾਂ ਵੇਖਾਓ (ਸਾਰੀਆਂ ਪਰਤਾਂ ਨੂੰ ਮੂਲ ਹਾਲਤ ਉੱਤੇ ਮੁੜ-ਸੈੱਟ ਕਰਨ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ) -layers_label=ਪਰਤਾਂ -thumbs.title=ਥੰਮਨੇਲ ਨੂੰ ਵੇਖਾਓ -thumbs_label=ਥੰਮਨੇਲ -current_outline_item.title=ਮੌੌਜੂਦਾ ਖਾਕਾ ਚੀਜ਼ ਲੱਭੋ -current_outline_item_label=ਮੌਜੂਦਾ ਖਾਕਾ ਚੀਜ਼ -findbar.title=ਦਸਤਾਵੇਜ਼ ਵਿੱਚ ਲੱਭੋ -findbar_label=ਲੱਭੋ - -additional_layers=ਵਾਧੂ ਪਰਤਾਂ -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=ਸਫ਼ਾ {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=ਸਫ਼ਾ {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas={{page}} ਸਫ਼ੇ ਦਾ ਥੰਮਨੇਲ - -# Find panel button title and messages -find_input.title=ਲੱਭੋ -find_input.placeholder=…ਦਸਤਾਵੇਜ਼ 'ਚ ਲੱਭੋ -find_previous.title=ਵਾਕ ਦੀ ਪਿਛਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ -find_previous_label=ਪਿੱਛੇ -find_next.title=ਵਾਕ ਦੀ ਅਗਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ -find_next_label=ਅੱਗੇ -find_highlight=ਸਭ ਉਭਾਰੋ -find_match_case_label=ਅੱਖਰ ਆਕਾਰ ਨੂੰ ਮਿਲਾਉ -find_match_diacritics_label=ਭੇਦਸੂਚਕ ਮੇਲ -find_entire_word_label=ਪੂਰੇ ਸ਼ਬਦ -find_reached_top=ਦਸਤਾਵੇਜ਼ ਦੇ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਥੱਲੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ -find_reached_bottom=ਦਸਤਾਵੇਜ਼ ਦੇ ਅੰਤ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਉੱਤੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ -find_match_count[two]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ -find_match_count[few]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ -find_match_count[many]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ -find_match_count[other]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ -find_match_count_limit[one]={{limit}} ਮੇਲ ਤੋਂ ਵੱਧ -find_match_count_limit[two]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ -find_match_count_limit[few]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ -find_match_count_limit[many]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ -find_match_count_limit[other]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ -find_not_found=ਵਾਕ ਨਹੀਂ ਲੱਭਿਆ - -# Predefined zoom values -page_scale_width=ਸਫ਼ੇ ਦੀ ਚੌੜਾਈ -page_scale_fit=ਸਫ਼ਾ ਫਿੱਟ -page_scale_auto=ਆਟੋਮੈਟਿਕ ਜ਼ੂਮ ਕਰੋ -page_scale_actual=ਆਟੋਮੈਟਿਕ ਆਕਾਰ -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=PDF ਲੋਡ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ। -invalid_file_error=ਗਲਤ ਜਾਂ ਨਿਕਾਰਾ PDF ਫਾਈਲ ਹੈ। -missing_file_error=ਨਾ-ਮੌਜੂਦ PDF ਫਾਈਲ। -unexpected_response_error=ਅਣਜਾਣ ਸਰਵਰ ਜਵਾਬ। -rendering_error=ਸਫ਼ਾ ਰੈਡਰ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ। - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} ਵਿਆਖਿਆ] -password_label=ਇਹ PDF ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਪਾਸਵਰਡ ਦਿਉ। -password_invalid=ਗਲਤ ਪਾਸਵਰਡ। ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ। -password_ok=ਠੀਕ ਹੈ -password_cancel=ਰੱਦ ਕਰੋ - -printing_not_supported=ਸਾਵਧਾਨ: ਇਹ ਬਰਾਊਜ਼ਰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਸਹਾਇਕ ਨਹੀਂ ਹੈ। -printing_not_ready=ਸਾਵਧਾਨ: PDF ਨੂੰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਲੋਡ ਨਹੀਂ ਹੈ। -web_fonts_disabled=ਵੈਬ ਫੋਂਟ ਬੰਦ ਹਨ: ਇੰਬੈਡ PDF ਫੋਂਟ ਨੂੰ ਵਰਤਣ ਲਈ ਅਸਮਰੱਥ ਹੈ। - -# Editor -editor_free_text2.title=ਲਿਖਤ -editor_free_text2_label=ਲਿਖਤ -editor_ink2.title=ਵਾਹੋ -editor_ink2_label=ਵਾਹੋ - -editor_stamp.title=ਚਿੱਤਰ ਜੋੜੋ -editor_stamp_label=ਚਿੱਤਰ ਜੋੜੋ - -editor_stamp1.title=ਚਿੱਤਰ ਜੋੜੋ ਜਾਂ ਸੋਧੋ -editor_stamp1_label=ਚਿੱਤਰ ਜੋੜੋ ਜਾਂ ਸੋਧੋ - -free_text2_default_content=…ਲਿਖਣਾ ਸ਼ੁਰੂ ਕਰੋ - -# Editor Parameters -editor_free_text_color=ਰੰਗ -editor_free_text_size=ਆਕਾਰ -editor_ink_color=ਰੰਗ -editor_ink_thickness=ਮੋਟਾਈ -editor_ink_opacity=ਧੁੰਦਲਾਪਨ - -editor_stamp_add_image_label=ਚਿੱਤਰ ਜੋੜੋ -editor_stamp_add_image.title=ਚਿੱਤਰ ਜੋੜੋ - -# Editor aria -editor_free_text2_aria_label=ਲਿਖਤ ਐਡੀਟਰ -editor_ink2_aria_label=ਵਹਾਉਣ ਐਡੀਟਰ -editor_ink_canvas_aria_label=ਵਰਤੋਂਕਾਰ ਵਲੋਂ ਬਣਾਇਆ ਚਿੱਤਰ diff --git a/static/pdf.js/locale/pl/viewer.ftl b/static/pdf.js/locale/pl/viewer.ftl new file mode 100644 index 00000000..b34d6074 --- /dev/null +++ b/static/pdf.js/locale/pl/viewer.ftl @@ -0,0 +1,404 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Poprzednia strona +pdfjs-previous-button-label = Poprzednia +pdfjs-next-button = + .title = Następna strona +pdfjs-next-button-label = Następna +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Strona +# 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 = z { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } z { $pagesCount }) +pdfjs-zoom-out-button = + .title = Pomniejsz +pdfjs-zoom-out-button-label = Pomniejsz +pdfjs-zoom-in-button = + .title = Powiększ +pdfjs-zoom-in-button-label = Powiększ +pdfjs-zoom-select = + .title = Skala +pdfjs-presentation-mode-button = + .title = Przełącz na tryb prezentacji +pdfjs-presentation-mode-button-label = Tryb prezentacji +pdfjs-open-file-button = + .title = Otwórz plik +pdfjs-open-file-button-label = Otwórz +pdfjs-print-button = + .title = Drukuj +pdfjs-print-button-label = Drukuj +pdfjs-save-button = + .title = Zapisz +pdfjs-save-button-label = Zapisz +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Pobierz +# 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 = Pobierz +pdfjs-bookmark-button = + .title = Bieżąca strona (adres do otwarcia na bieżącej stronie) +pdfjs-bookmark-button-label = Bieżąca strona +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Otwórz w aplikacji +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Otwórz w aplikacji + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Narzędzia +pdfjs-tools-button-label = Narzędzia +pdfjs-first-page-button = + .title = Przejdź do pierwszej strony +pdfjs-first-page-button-label = Przejdź do pierwszej strony +pdfjs-last-page-button = + .title = Przejdź do ostatniej strony +pdfjs-last-page-button-label = Przejdź do ostatniej strony +pdfjs-page-rotate-cw-button = + .title = Obróć zgodnie z ruchem wskazówek zegara +pdfjs-page-rotate-cw-button-label = Obróć zgodnie z ruchem wskazówek zegara +pdfjs-page-rotate-ccw-button = + .title = Obróć przeciwnie do ruchu wskazówek zegara +pdfjs-page-rotate-ccw-button-label = Obróć przeciwnie do ruchu wskazówek zegara +pdfjs-cursor-text-select-tool-button = + .title = Włącz narzędzie zaznaczania tekstu +pdfjs-cursor-text-select-tool-button-label = Narzędzie zaznaczania tekstu +pdfjs-cursor-hand-tool-button = + .title = Włącz narzędzie rączka +pdfjs-cursor-hand-tool-button-label = Narzędzie rączka +pdfjs-scroll-page-button = + .title = Przewijaj strony +pdfjs-scroll-page-button-label = Przewijanie stron +pdfjs-scroll-vertical-button = + .title = Przewijaj dokument w pionie +pdfjs-scroll-vertical-button-label = Przewijanie pionowe +pdfjs-scroll-horizontal-button = + .title = Przewijaj dokument w poziomie +pdfjs-scroll-horizontal-button-label = Przewijanie poziome +pdfjs-scroll-wrapped-button = + .title = Strony dokumentu wyświetlaj i przewijaj w kolumnach +pdfjs-scroll-wrapped-button-label = Widok dwóch stron +pdfjs-spread-none-button = + .title = Nie ustawiaj stron obok siebie +pdfjs-spread-none-button-label = Brak kolumn +pdfjs-spread-odd-button = + .title = Strony nieparzyste ustawiaj na lewo od parzystych +pdfjs-spread-odd-button-label = Nieparzyste po lewej +pdfjs-spread-even-button = + .title = Strony parzyste ustawiaj na lewo od nieparzystych +pdfjs-spread-even-button-label = Parzyste po lewej + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Właściwości dokumentu… +pdfjs-document-properties-button-label = Właściwości dokumentu… +pdfjs-document-properties-file-name = Nazwa pliku: +pdfjs-document-properties-file-size = Rozmiar pliku: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } B) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } B) +pdfjs-document-properties-title = Tytuł: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Temat: +pdfjs-document-properties-keywords = Słowa kluczowe: +pdfjs-document-properties-creation-date = Data utworzenia: +pdfjs-document-properties-modification-date = Data modyfikacji: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Utworzony przez: +pdfjs-document-properties-producer = PDF wyprodukowany przez: +pdfjs-document-properties-version = Wersja PDF: +pdfjs-document-properties-page-count = Liczba stron: +pdfjs-document-properties-page-size = Wymiary strony: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = pionowa +pdfjs-document-properties-page-size-orientation-landscape = pozioma +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 = US Letter +pdfjs-document-properties-page-size-name-legal = US 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 } (orientacja { $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width }×{ $height } { $unit } ({ $name }, orientacja { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = Szybki podgląd w Internecie: +pdfjs-document-properties-linearized-yes = tak +pdfjs-document-properties-linearized-no = nie +pdfjs-document-properties-close-button = Zamknij + +## Print + +pdfjs-print-progress-message = Przygotowywanie dokumentu do druku… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Anuluj +pdfjs-printing-not-supported = Ostrzeżenie: drukowanie nie jest w pełni obsługiwane przez tę przeglądarkę. +pdfjs-printing-not-ready = Ostrzeżenie: dokument PDF nie jest całkowicie wczytany, więc nie można go wydrukować. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Przełącz panel boczny +pdfjs-toggle-sidebar-notification-button = + .title = Przełącz panel boczny (dokument zawiera konspekt/załączniki/warstwy) +pdfjs-toggle-sidebar-button-label = Przełącz panel boczny +pdfjs-document-outline-button = + .title = Konspekt dokumentu (podwójne kliknięcie rozwija lub zwija wszystkie pozycje) +pdfjs-document-outline-button-label = Konspekt dokumentu +pdfjs-attachments-button = + .title = Załączniki +pdfjs-attachments-button-label = Załączniki +pdfjs-layers-button = + .title = Warstwy (podwójne kliknięcie przywraca wszystkie warstwy do stanu domyślnego) +pdfjs-layers-button-label = Warstwy +pdfjs-thumbs-button = + .title = Miniatury +pdfjs-thumbs-button-label = Miniatury +pdfjs-current-outline-item-button = + .title = Znajdź bieżący element konspektu +pdfjs-current-outline-item-button-label = Bieżący element konspektu +pdfjs-findbar-button = + .title = Znajdź w dokumencie +pdfjs-findbar-button-label = Znajdź +pdfjs-additional-layers = Dodatkowe warstwy + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = { $page }. strona +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura { $page }. strony + +## Find panel button title and messages + +pdfjs-find-input = + .title = Znajdź + .placeholder = Znajdź w dokumencie… +pdfjs-find-previous-button = + .title = Znajdź poprzednie wystąpienie tekstu +pdfjs-find-previous-button-label = Poprzednie +pdfjs-find-next-button = + .title = Znajdź następne wystąpienie tekstu +pdfjs-find-next-button-label = Następne +pdfjs-find-highlight-checkbox = Wyróżnianie wszystkich +pdfjs-find-match-case-checkbox-label = Rozróżnianie wielkości liter +pdfjs-find-match-diacritics-checkbox-label = Rozróżnianie liter diakrytyzowanych +pdfjs-find-entire-word-checkbox-label = Całe słowa +pdfjs-find-reached-top = Początek dokumentu. Wyszukiwanie od końca. +pdfjs-find-reached-bottom = Koniec dokumentu. Wyszukiwanie od początku. +# 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 }. z { $total } trafienia + [few] { $current }. z { $total } trafień + *[many] { $current }. z { $total } trafień + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Więcej niż { $limit } trafienie + [few] Więcej niż { $limit } trafienia + *[many] Więcej niż { $limit } trafień + } +pdfjs-find-not-found = Nie znaleziono tekstu + +## Predefined zoom values + +pdfjs-page-scale-width = Szerokość strony +pdfjs-page-scale-fit = Dopasowanie strony +pdfjs-page-scale-auto = Skala automatyczna +pdfjs-page-scale-actual = Rozmiar oryginalny +# 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 }. strona + +## Loading indicator messages + +pdfjs-loading-error = Podczas wczytywania dokumentu PDF wystąpił błąd. +pdfjs-invalid-file-error = Nieprawidłowy lub uszkodzony plik PDF. +pdfjs-missing-file-error = Brak pliku PDF. +pdfjs-unexpected-response-error = Nieoczekiwana odpowiedź serwera. +pdfjs-rendering-error = Podczas renderowania strony wystąpił błąd. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Przypis: { $type }] + +## Password + +pdfjs-password-label = Wprowadź hasło, aby otworzyć ten dokument PDF. +pdfjs-password-invalid = Nieprawidłowe hasło. Proszę spróbować ponownie. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Anuluj +pdfjs-web-fonts-disabled = Czcionki sieciowe są wyłączone: nie można użyć osadzonych czcionek PDF. + +## Editing + +pdfjs-editor-free-text-button = + .title = Tekst +pdfjs-editor-free-text-button-label = Tekst +pdfjs-editor-ink-button = + .title = Rysunek +pdfjs-editor-ink-button-label = Rysunek +pdfjs-editor-stamp-button = + .title = Dodaj lub edytuj obrazy +pdfjs-editor-stamp-button-label = Dodaj lub edytuj obrazy +pdfjs-editor-highlight-button = + .title = Wyróżnij +pdfjs-editor-highlight-button-label = Wyróżnij +pdfjs-highlight-floating-button = + .title = Wyróżnij +pdfjs-highlight-floating-button1 = + .title = Wyróżnij + .aria-label = Wyróżnij +pdfjs-highlight-floating-button-label = Wyróżnij + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Usuń rysunek +pdfjs-editor-remove-freetext-button = + .title = Usuń tekst +pdfjs-editor-remove-stamp-button = + .title = Usuń obraz +pdfjs-editor-remove-highlight-button = + .title = Usuń wyróżnienie + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Kolor +pdfjs-editor-free-text-size-input = Rozmiar +pdfjs-editor-ink-color-input = Kolor +pdfjs-editor-ink-thickness-input = Grubość +pdfjs-editor-ink-opacity-input = Nieprzezroczystość +pdfjs-editor-stamp-add-image-button = + .title = Dodaj obraz +pdfjs-editor-stamp-add-image-button-label = Dodaj obraz +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Grubość +pdfjs-editor-free-highlight-thickness-title = + .title = Zmień grubość podczas wyróżniania elementów innych niż tekst +pdfjs-free-text = + .aria-label = Edytor tekstu +pdfjs-free-text-default-content = Zacznij pisać… +pdfjs-ink = + .aria-label = Edytor rysunku +pdfjs-ink-canvas = + .aria-label = Obraz utworzony przez użytkownika + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Tekst alternatywny +pdfjs-editor-alt-text-edit-button-label = Edytuj tekst alternatywny +pdfjs-editor-alt-text-dialog-label = Wybierz opcję +pdfjs-editor-alt-text-dialog-description = Tekst alternatywny pomaga, kiedy ktoś nie może zobaczyć obrazu lub gdy się nie wczytuje. +pdfjs-editor-alt-text-add-description-label = Dodaj opis +pdfjs-editor-alt-text-add-description-description = Staraj się napisać 1-2 zdania opisujące temat, miejsce lub działania. +pdfjs-editor-alt-text-mark-decorative-label = Oznacz jako dekoracyjne +pdfjs-editor-alt-text-mark-decorative-description = Używane w przypadku obrazów ozdobnych, takich jak obramowania lub znaki wodne. +pdfjs-editor-alt-text-cancel-button = Anuluj +pdfjs-editor-alt-text-save-button = Zapisz +pdfjs-editor-alt-text-decorative-tooltip = Oznaczone jako dekoracyjne +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Na przykład: „Młody człowiek siada przy stole, aby zjeść posiłek” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Lewy górny róg — zmień rozmiar +pdfjs-editor-resizer-label-top-middle = Górny środkowy — zmień rozmiar +pdfjs-editor-resizer-label-top-right = Prawy górny róg — zmień rozmiar +pdfjs-editor-resizer-label-middle-right = Prawy środkowy — zmień rozmiar +pdfjs-editor-resizer-label-bottom-right = Prawy dolny róg — zmień rozmiar +pdfjs-editor-resizer-label-bottom-middle = Dolny środkowy — zmień rozmiar +pdfjs-editor-resizer-label-bottom-left = Lewy dolny róg — zmień rozmiar +pdfjs-editor-resizer-label-middle-left = Lewy środkowy — zmień rozmiar + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Kolor wyróżnienia +pdfjs-editor-colorpicker-button = + .title = Zmień kolor +pdfjs-editor-colorpicker-dropdown = + .aria-label = Wybór kolorów +pdfjs-editor-colorpicker-yellow = + .title = Żółty +pdfjs-editor-colorpicker-green = + .title = Zielony +pdfjs-editor-colorpicker-blue = + .title = Niebieski +pdfjs-editor-colorpicker-pink = + .title = Różowy +pdfjs-editor-colorpicker-red = + .title = Czerwony + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Pokaż wszystkie +pdfjs-editor-highlight-show-all-button = + .title = Pokaż wszystkie diff --git a/static/pdf.js/locale/pl/viewer.properties b/static/pdf.js/locale/pl/viewer.properties deleted file mode 100644 index 40699fac..00000000 --- a/static/pdf.js/locale/pl/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Poprzednia strona -previous_label=Poprzednia -next.title=Następna strona -next_label=Następna - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Strona -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=z {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} z {{pagesCount}}) - -zoom_out.title=Pomniejsz -zoom_out_label=Pomniejsz -zoom_in.title=Powiększ -zoom_in_label=Powiększ -zoom.title=Skala -presentation_mode.title=Przełącz na tryb prezentacji -presentation_mode_label=Tryb prezentacji -open_file.title=Otwórz plik -open_file_label=Otwórz -print.title=Drukuj -print_label=Drukuj -save.title=Zapisz -save_label=Zapisz -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Pobierz -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Pobierz -bookmark1.title=Bieżąca strona (adres do otwarcia na bieżącej stronie) -bookmark1_label=Bieżąca strona -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Otwórz w aplikacji -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Otwórz w aplikacji - -# Secondary toolbar and context menu -tools.title=Narzędzia -tools_label=Narzędzia -first_page.title=Przejdź do pierwszej strony -first_page_label=Przejdź do pierwszej strony -last_page.title=Przejdź do ostatniej strony -last_page_label=Przejdź do ostatniej strony -page_rotate_cw.title=Obróć zgodnie z ruchem wskazówek zegara -page_rotate_cw_label=Obróć zgodnie z ruchem wskazówek zegara -page_rotate_ccw.title=Obróć przeciwnie do ruchu wskazówek zegara -page_rotate_ccw_label=Obróć przeciwnie do ruchu wskazówek zegara - -cursor_text_select_tool.title=Włącz narzędzie zaznaczania tekstu -cursor_text_select_tool_label=Narzędzie zaznaczania tekstu -cursor_hand_tool.title=Włącz narzędzie rączka -cursor_hand_tool_label=Narzędzie rączka - -scroll_page.title=Przewijaj strony -scroll_page_label=Przewijanie stron -scroll_vertical.title=Przewijaj dokument w pionie -scroll_vertical_label=Przewijanie pionowe -scroll_horizontal.title=Przewijaj dokument w poziomie -scroll_horizontal_label=Przewijanie poziome -scroll_wrapped.title=Strony dokumentu wyświetlaj i przewijaj w kolumnach -scroll_wrapped_label=Widok dwóch stron - -spread_none.title=Nie ustawiaj stron obok siebie -spread_none_label=Brak kolumn -spread_odd.title=Strony nieparzyste ustawiaj na lewo od parzystych -spread_odd_label=Nieparzyste po lewej -spread_even.title=Strony parzyste ustawiaj na lewo od nieparzystych -spread_even_label=Parzyste po lewej - -# Document properties dialog box -document_properties.title=Właściwości dokumentu… -document_properties_label=Właściwości dokumentu… -document_properties_file_name=Nazwa pliku: -document_properties_file_size=Rozmiar pliku: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} B) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} B) -document_properties_title=Tytuł: -document_properties_author=Autor: -document_properties_subject=Temat: -document_properties_keywords=Słowa kluczowe: -document_properties_creation_date=Data utworzenia: -document_properties_modification_date=Data modyfikacji: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Utworzony przez: -document_properties_producer=PDF wyprodukowany przez: -document_properties_version=Wersja PDF: -document_properties_page_count=Liczba stron: -document_properties_page_size=Wymiary strony: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=pionowa -document_properties_page_size_orientation_landscape=pozioma -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=US Letter -document_properties_page_size_name_legal=US Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}}×{{height}} {{unit}} (orientacja {{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}}×{{height}} {{unit}} ({{name}}, orientacja {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Szybki podgląd w Internecie: -document_properties_linearized_yes=tak -document_properties_linearized_no=nie -document_properties_close=Zamknij - -print_progress_message=Przygotowywanie dokumentu do druku… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Anuluj - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Przełącz panel boczny -toggle_sidebar_notification2.title=Przełącz panel boczny (dokument zawiera konspekt/załączniki/warstwy) -toggle_sidebar_label=Przełącz panel boczny -document_outline.title=Konspekt dokumentu (podwójne kliknięcie rozwija lub zwija wszystkie pozycje) -document_outline_label=Konspekt dokumentu -attachments.title=Załączniki -attachments_label=Załączniki -layers.title=Warstwy (podwójne kliknięcie przywraca wszystkie warstwy do stanu domyślnego) -layers_label=Warstwy -thumbs.title=Miniatury -thumbs_label=Miniatury -current_outline_item.title=Znajdź bieżący element konspektu -current_outline_item_label=Bieżący element konspektu -findbar.title=Znajdź w dokumencie -findbar_label=Znajdź - -additional_layers=Dodatkowe warstwy -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark={{page}}. strona -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title={{page}}. strona -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura {{page}}. strony - -# Find panel button title and messages -find_input.title=Znajdź -find_input.placeholder=Znajdź w dokumencie… -find_previous.title=Znajdź poprzednie wystąpienie tekstu -find_previous_label=Poprzednie -find_next.title=Znajdź następne wystąpienie tekstu -find_next_label=Następne -find_highlight=Wyróżnianie wszystkich -find_match_case_label=Rozróżnianie wielkości liter -find_match_diacritics_label=Rozróżnianie liter diakrytyzowanych -find_entire_word_label=Całe słowa -find_reached_top=Początek dokumentu. Wyszukiwanie od końca. -find_reached_bottom=Koniec dokumentu. Wyszukiwanie od początku. -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]=Pierwsze z {{total}} trafień -find_match_count[two]=Drugie z {{total}} trafień -find_match_count[few]={{current}}. z {{total}} trafień -find_match_count[many]={{current}}. z {{total}} trafień -find_match_count[other]={{current}}. z {{total}} trafień -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Brak trafień. -find_match_count_limit[one]=Więcej niż jedno trafienie. -find_match_count_limit[two]=Więcej niż dwa trafienia. -find_match_count_limit[few]=Więcej niż {{limit}} trafienia. -find_match_count_limit[many]=Więcej niż {{limit}} trafień. -find_match_count_limit[other]=Więcej niż {{limit}} trafień. -find_not_found=Nie znaleziono tekstu - -# Predefined zoom values -page_scale_width=Szerokość strony -page_scale_fit=Dopasowanie strony -page_scale_auto=Skala automatyczna -page_scale_actual=Rozmiar oryginalny -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Podczas wczytywania dokumentu PDF wystąpił błąd. -invalid_file_error=Nieprawidłowy lub uszkodzony plik PDF. -missing_file_error=Brak pliku PDF. -unexpected_response_error=Nieoczekiwana odpowiedź serwera. -rendering_error=Podczas renderowania strony wystąpił błąd. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Przypis: {{type}}] -password_label=Wprowadź hasło, aby otworzyć ten dokument PDF. -password_invalid=Nieprawidłowe hasło. Proszę spróbować ponownie. -password_ok=OK -password_cancel=Anuluj - -printing_not_supported=Ostrzeżenie: drukowanie nie jest w pełni obsługiwane przez tę przeglądarkę. -printing_not_ready=Ostrzeżenie: dokument PDF nie jest całkowicie wczytany, więc nie można go wydrukować. -web_fonts_disabled=Czcionki sieciowe są wyłączone: nie można użyć osadzonych czcionek PDF. - -# Editor -editor_free_text2.title=Tekst -editor_free_text2_label=Tekst -editor_ink2.title=Rysunek -editor_ink2_label=Rysunek - -editor_stamp.title=Dodaj obraz -editor_stamp_label=Dodaj obraz - -editor_stamp1.title=Dodaj lub edytuj obrazy -editor_stamp1_label=Dodaj lub edytuj obrazy - -free_text2_default_content=Zacznij pisać… - -# Editor Parameters -editor_free_text_color=Kolor -editor_free_text_size=Rozmiar -editor_ink_color=Kolor -editor_ink_thickness=Grubość -editor_ink_opacity=Nieprzezroczystość - -editor_stamp_add_image_label=Dodaj obraz -editor_stamp_add_image.title=Dodaj obraz - -# Editor aria -editor_free_text2_aria_label=Edytor tekstu -editor_ink2_aria_label=Edytor rysunku -editor_ink_canvas_aria_label=Obraz utworzony przez użytkownika diff --git a/static/pdf.js/locale/pt-BR/viewer.ftl b/static/pdf.js/locale/pt-BR/viewer.ftl new file mode 100644 index 00000000..153f0426 --- /dev/null +++ b/static/pdf.js/locale/pt-BR/viewer.ftl @@ -0,0 +1,396 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Página anterior +pdfjs-previous-button-label = Anterior +pdfjs-next-button = + .title = Próxima página +pdfjs-next-button-label = Próxima +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Página +# 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 = de { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount }) +pdfjs-zoom-out-button = + .title = Reduzir +pdfjs-zoom-out-button-label = Reduzir +pdfjs-zoom-in-button = + .title = Ampliar +pdfjs-zoom-in-button-label = Ampliar +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Mudar para o modo de apresentação +pdfjs-presentation-mode-button-label = Modo de apresentação +pdfjs-open-file-button = + .title = Abrir arquivo +pdfjs-open-file-button-label = Abrir +pdfjs-print-button = + .title = Imprimir +pdfjs-print-button-label = Imprimir +pdfjs-save-button = + .title = Salvar +pdfjs-save-button-label = Salvar +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Baixar +# 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 = Baixar +pdfjs-bookmark-button = + .title = Página atual (ver URL da página atual) +pdfjs-bookmark-button-label = Pagina atual + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Ferramentas +pdfjs-tools-button-label = Ferramentas +pdfjs-first-page-button = + .title = Ir para a primeira página +pdfjs-first-page-button-label = Ir para a primeira página +pdfjs-last-page-button = + .title = Ir para a última página +pdfjs-last-page-button-label = Ir para a última página +pdfjs-page-rotate-cw-button = + .title = Girar no sentido horário +pdfjs-page-rotate-cw-button-label = Girar no sentido horário +pdfjs-page-rotate-ccw-button = + .title = Girar no sentido anti-horário +pdfjs-page-rotate-ccw-button-label = Girar no sentido anti-horário +pdfjs-cursor-text-select-tool-button = + .title = Ativar a ferramenta de seleção de texto +pdfjs-cursor-text-select-tool-button-label = Ferramenta de seleção de texto +pdfjs-cursor-hand-tool-button = + .title = Ativar ferramenta de deslocamento +pdfjs-cursor-hand-tool-button-label = Ferramenta de deslocamento +pdfjs-scroll-page-button = + .title = Usar rolagem de página +pdfjs-scroll-page-button-label = Rolagem de página +pdfjs-scroll-vertical-button = + .title = Usar deslocamento vertical +pdfjs-scroll-vertical-button-label = Deslocamento vertical +pdfjs-scroll-horizontal-button = + .title = Usar deslocamento horizontal +pdfjs-scroll-horizontal-button-label = Deslocamento horizontal +pdfjs-scroll-wrapped-button = + .title = Usar deslocamento contido +pdfjs-scroll-wrapped-button-label = Deslocamento contido +pdfjs-spread-none-button = + .title = Não reagrupar páginas +pdfjs-spread-none-button-label = Não estender +pdfjs-spread-odd-button = + .title = Agrupar páginas começando em páginas com números ímpares +pdfjs-spread-odd-button-label = Estender ímpares +pdfjs-spread-even-button = + .title = Agrupar páginas começando em páginas com números pares +pdfjs-spread-even-button-label = Estender pares + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Propriedades do documento… +pdfjs-document-properties-button-label = Propriedades do documento… +pdfjs-document-properties-file-name = Nome do arquivo: +pdfjs-document-properties-file-size = Tamanho do arquivo: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Título: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Assunto: +pdfjs-document-properties-keywords = Palavras-chave: +pdfjs-document-properties-creation-date = Data da criação: +pdfjs-document-properties-modification-date = Data da modificação: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Criação: +pdfjs-document-properties-producer = Criador do PDF: +pdfjs-document-properties-version = Versão do PDF: +pdfjs-document-properties-page-count = Número de páginas: +pdfjs-document-properties-page-size = Tamanho da página: +pdfjs-document-properties-page-size-unit-inches = pol. +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = retrato +pdfjs-document-properties-page-size-orientation-landscape = paisagem +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 = Carta +pdfjs-document-properties-page-size-name-legal = Jurídico + +## 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 = Exibição web rápida: +pdfjs-document-properties-linearized-yes = Sim +pdfjs-document-properties-linearized-no = Não +pdfjs-document-properties-close-button = Fechar + +## Print + +pdfjs-print-progress-message = Preparando documento para impressão… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress } % +pdfjs-print-progress-close-button = Cancelar +pdfjs-printing-not-supported = Aviso: a impressão não é totalmente suportada neste navegador. +pdfjs-printing-not-ready = Aviso: o PDF não está totalmente carregado para impressão. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Exibir/ocultar painel lateral +pdfjs-toggle-sidebar-notification-button = + .title = Exibir/ocultar painel (documento contém estrutura/anexos/camadas) +pdfjs-toggle-sidebar-button-label = Exibir/ocultar painel +pdfjs-document-outline-button = + .title = Mostrar estrutura do documento (duplo-clique expande/recolhe todos os itens) +pdfjs-document-outline-button-label = Estrutura do documento +pdfjs-attachments-button = + .title = Mostrar anexos +pdfjs-attachments-button-label = Anexos +pdfjs-layers-button = + .title = Mostrar camadas (duplo-clique redefine todas as camadas ao estado predefinido) +pdfjs-layers-button-label = Camadas +pdfjs-thumbs-button = + .title = Mostrar miniaturas +pdfjs-thumbs-button-label = Miniaturas +pdfjs-current-outline-item-button = + .title = Encontrar item atual da estrutura +pdfjs-current-outline-item-button-label = Item atual da estrutura +pdfjs-findbar-button = + .title = Procurar no documento +pdfjs-findbar-button-label = Procurar +pdfjs-additional-layers = Camadas adicionais + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Página { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura da página { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Procurar + .placeholder = Procurar no documento… +pdfjs-find-previous-button = + .title = Procurar a ocorrência anterior da frase +pdfjs-find-previous-button-label = Anterior +pdfjs-find-next-button = + .title = Procurar a próxima ocorrência da frase +pdfjs-find-next-button-label = Próxima +pdfjs-find-highlight-checkbox = Destacar tudo +pdfjs-find-match-case-checkbox-label = Diferenciar maiúsculas/minúsculas +pdfjs-find-match-diacritics-checkbox-label = Considerar acentuação +pdfjs-find-entire-word-checkbox-label = Palavras completas +pdfjs-find-reached-top = Início do documento alcançado, continuando do fim +pdfjs-find-reached-bottom = Fim do documento alcançado, continuando do início +# 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 } de { $total } ocorrência + *[other] { $current } de { $total } ocorrências + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Mais de { $limit } ocorrência + *[other] Mais de { $limit } ocorrências + } +pdfjs-find-not-found = Não encontrado + +## Predefined zoom values + +pdfjs-page-scale-width = Largura da página +pdfjs-page-scale-fit = Ajustar à janela +pdfjs-page-scale-auto = Zoom automático +pdfjs-page-scale-actual = Tamanho real +# 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 = Página { $page } + +## Loading indicator messages + +pdfjs-loading-error = Ocorreu um erro ao carregar o PDF. +pdfjs-invalid-file-error = Arquivo PDF corrompido ou inválido. +pdfjs-missing-file-error = Arquivo PDF ausente. +pdfjs-unexpected-response-error = Resposta inesperada do servidor. +pdfjs-rendering-error = Ocorreu um erro ao renderizar a página. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Anotação { $type }] + +## Password + +pdfjs-password-label = Forneça a senha para abrir este arquivo PDF. +pdfjs-password-invalid = Senha inválida. Tente novamente. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Cancelar +pdfjs-web-fonts-disabled = As fontes web estão desativadas: não foi possível usar fontes incorporadas do PDF. + +## Editing + +pdfjs-editor-free-text-button = + .title = Texto +pdfjs-editor-free-text-button-label = Texto +pdfjs-editor-ink-button = + .title = Desenho +pdfjs-editor-ink-button-label = Desenho +pdfjs-editor-stamp-button = + .title = Adicionar ou editar imagens +pdfjs-editor-stamp-button-label = Adicionar ou editar imagens +pdfjs-editor-highlight-button = + .title = Destaque +pdfjs-editor-highlight-button-label = Destaque +pdfjs-highlight-floating-button = + .title = Destaque +pdfjs-highlight-floating-button1 = + .title = Destaque + .aria-label = Destaque +pdfjs-highlight-floating-button-label = Destaque + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Remover desenho +pdfjs-editor-remove-freetext-button = + .title = Remover texto +pdfjs-editor-remove-stamp-button = + .title = Remover imagem +pdfjs-editor-remove-highlight-button = + .title = Remover destaque + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Cor +pdfjs-editor-free-text-size-input = Tamanho +pdfjs-editor-ink-color-input = Cor +pdfjs-editor-ink-thickness-input = Espessura +pdfjs-editor-ink-opacity-input = Opacidade +pdfjs-editor-stamp-add-image-button = + .title = Adicionar imagem +pdfjs-editor-stamp-add-image-button-label = Adicionar imagem +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Espessura +pdfjs-editor-free-highlight-thickness-title = + .title = Mudar espessura ao destacar itens que não são texto +pdfjs-free-text = + .aria-label = Editor de texto +pdfjs-free-text-default-content = Comece digitando… +pdfjs-ink = + .aria-label = Editor de desenho +pdfjs-ink-canvas = + .aria-label = Imagem criada pelo usuário + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Texto alternativo +pdfjs-editor-alt-text-edit-button-label = Editar texto alternativo +pdfjs-editor-alt-text-dialog-label = Escolha uma opção +pdfjs-editor-alt-text-dialog-description = O texto alternativo ajuda quando uma imagem não aparece ou não é carregada. +pdfjs-editor-alt-text-add-description-label = Adicionar uma descrição +pdfjs-editor-alt-text-add-description-description = Procure usar uma ou duas frases que descrevam o assunto, cenário ou ação. +pdfjs-editor-alt-text-mark-decorative-label = Marcar como decorativa +pdfjs-editor-alt-text-mark-decorative-description = Isto é usado em imagens ornamentais, como bordas ou marcas d'água. +pdfjs-editor-alt-text-cancel-button = Cancelar +pdfjs-editor-alt-text-save-button = Salvar +pdfjs-editor-alt-text-decorative-tooltip = Marcado como decorativa +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Por exemplo, “Um jovem senta-se à mesa para comer uma refeição” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Canto superior esquerdo — redimensionar +pdfjs-editor-resizer-label-top-middle = No centro do topo — redimensionar +pdfjs-editor-resizer-label-top-right = Canto superior direito — redimensionar +pdfjs-editor-resizer-label-middle-right = No meio à direita — redimensionar +pdfjs-editor-resizer-label-bottom-right = Canto inferior direito — redimensionar +pdfjs-editor-resizer-label-bottom-middle = No centro da base — redimensionar +pdfjs-editor-resizer-label-bottom-left = Canto inferior esquerdo — redimensionar +pdfjs-editor-resizer-label-middle-left = No meio à esquerda — redimensionar + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Cor de destaque +pdfjs-editor-colorpicker-button = + .title = Mudar cor +pdfjs-editor-colorpicker-dropdown = + .aria-label = Opções de cores +pdfjs-editor-colorpicker-yellow = + .title = Amarelo +pdfjs-editor-colorpicker-green = + .title = Verde +pdfjs-editor-colorpicker-blue = + .title = Azul +pdfjs-editor-colorpicker-pink = + .title = Rosa +pdfjs-editor-colorpicker-red = + .title = Vermelho + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Mostrar todos +pdfjs-editor-highlight-show-all-button = + .title = Mostrar todos diff --git a/static/pdf.js/locale/pt-BR/viewer.properties b/static/pdf.js/locale/pt-BR/viewer.properties deleted file mode 100644 index 077b4037..00000000 --- a/static/pdf.js/locale/pt-BR/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Página anterior -previous_label=Anterior -next.title=Próxima página -next_label=Próxima - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Página -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=de {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} de {{pagesCount}}) - -zoom_out.title=Reduzir -zoom_out_label=Reduzir -zoom_in.title=Ampliar -zoom_in_label=Ampliar -zoom.title=Zoom -presentation_mode.title=Mudar para o modo de apresentação -presentation_mode_label=Modo de apresentação -open_file.title=Abrir arquivo -open_file_label=Abrir -print.title=Imprimir -print_label=Imprimir -save.title=Salvar -save_label=Salvar -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Baixar -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Baixar -bookmark1.title=Página atual (ver URL da página atual) -bookmark1_label=Pagina atual -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Abrir em um aplicativo -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Abrir em um aplicativo - -# Secondary toolbar and context menu -tools.title=Ferramentas -tools_label=Ferramentas -first_page.title=Ir para a primeira página -first_page_label=Ir para a primeira página -last_page.title=Ir para a última página -last_page_label=Ir para a última página -page_rotate_cw.title=Girar no sentido horário -page_rotate_cw_label=Girar no sentido horário -page_rotate_ccw.title=Girar no sentido anti-horário -page_rotate_ccw_label=Girar no sentido anti-horário - -cursor_text_select_tool.title=Ativar a ferramenta de seleção de texto -cursor_text_select_tool_label=Ferramenta de seleção de texto -cursor_hand_tool.title=Ativar ferramenta de deslocamento -cursor_hand_tool_label=Ferramenta de deslocamento - -scroll_page.title=Usar rolagem de página -scroll_page_label=Rolagem de página -scroll_vertical.title=Usar deslocamento vertical -scroll_vertical_label=Deslocamento vertical -scroll_horizontal.title=Usar deslocamento horizontal -scroll_horizontal_label=Deslocamento horizontal -scroll_wrapped.title=Usar deslocamento contido -scroll_wrapped_label=Deslocamento contido - -spread_none.title=Não reagrupar páginas -spread_none_label=Não estender -spread_odd.title=Agrupar páginas começando em páginas com números ímpares -spread_odd_label=Estender ímpares -spread_even.title=Agrupar páginas começando em páginas com números pares -spread_even_label=Estender pares - -# Document properties dialog box -document_properties.title=Propriedades do documento… -document_properties_label=Propriedades do documento… -document_properties_file_name=Nome do arquivo: -document_properties_file_size=Tamanho do arquivo: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Título: -document_properties_author=Autor: -document_properties_subject=Assunto: -document_properties_keywords=Palavras-chave: -document_properties_creation_date=Data da criação: -document_properties_modification_date=Data da modificação: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Criação: -document_properties_producer=Criador do PDF: -document_properties_version=Versão do PDF: -document_properties_page_count=Número de páginas: -document_properties_page_size=Tamanho da página: -document_properties_page_size_unit_inches=pol. -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=retrato -document_properties_page_size_orientation_landscape=paisagem -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Carta -document_properties_page_size_name_legal=Jurídico -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Exibição web rápida: -document_properties_linearized_yes=Sim -document_properties_linearized_no=Não -document_properties_close=Fechar - -print_progress_message=Preparando documento para impressão… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}} % -print_progress_close=Cancelar - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Exibir/ocultar painel lateral -toggle_sidebar_notification2.title=Exibir/ocultar painel (documento contém estrutura/anexos/camadas) -toggle_sidebar_label=Exibir/ocultar painel -document_outline.title=Mostrar estrutura do documento (duplo-clique expande/recolhe todos os itens) -document_outline_label=Estrutura do documento -attachments.title=Mostrar anexos -attachments_label=Anexos -layers.title=Mostrar camadas (duplo-clique redefine todas as camadas ao estado predefinido) -layers_label=Camadas -thumbs.title=Mostrar miniaturas -thumbs_label=Miniaturas -current_outline_item.title=Encontrar item atual da estrutura -current_outline_item_label=Item atual da estrutura -findbar.title=Procurar no documento -findbar_label=Procurar - -additional_layers=Camadas adicionais -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Página {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Página {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura da página {{page}} - -# Find panel button title and messages -find_input.title=Procurar -find_input.placeholder=Procurar no documento… -find_previous.title=Procurar a ocorrência anterior da frase -find_previous_label=Anterior -find_next.title=Procurar a próxima ocorrência da frase -find_next_label=Próxima -find_highlight=Destacar tudo -find_match_case_label=Diferenciar maiúsculas/minúsculas -find_match_diacritics_label=Considerar acentuação -find_entire_word_label=Palavras completas -find_reached_top=Início do documento alcançado, continuando do fim -find_reached_bottom=Fim do documento alcançado, continuando do início -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} de {{total}} ocorrência -find_match_count[two]={{current}} de {{total}} ocorrências -find_match_count[few]={{current}} de {{total}} ocorrências -find_match_count[many]={{current}} de {{total}} ocorrências -find_match_count[other]={{current}} de {{total}} ocorrências -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Mais de {{limit}} ocorrências -find_match_count_limit[one]=Mais de {{limit}} ocorrência -find_match_count_limit[two]=Mais de {{limit}} ocorrências -find_match_count_limit[few]=Mais de {{limit}} ocorrências -find_match_count_limit[many]=Mais de {{limit}} ocorrências -find_match_count_limit[other]=Mais de {{limit}} ocorrências -find_not_found=Não encontrado - -# Predefined zoom values -page_scale_width=Largura da página -page_scale_fit=Ajustar à janela -page_scale_auto=Zoom automático -page_scale_actual=Tamanho real -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Ocorreu um erro ao carregar o PDF. -invalid_file_error=Arquivo PDF corrompido ou inválido. -missing_file_error=Arquivo PDF ausente. -unexpected_response_error=Resposta inesperada do servidor. -rendering_error=Ocorreu um erro ao renderizar a página. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Anotação {{type}}] -password_label=Forneça a senha para abrir este arquivo PDF. -password_invalid=Senha inválida. Tente novamente. -password_ok=OK -password_cancel=Cancelar - -printing_not_supported=Aviso: a impressão não é totalmente suportada neste navegador. -printing_not_ready=Aviso: o PDF não está totalmente carregado para impressão. -web_fonts_disabled=As fontes web estão desativadas: não foi possível usar fontes incorporadas do PDF. - -# Editor -editor_free_text2.title=Texto -editor_free_text2_label=Texto -editor_ink2.title=Desenho -editor_ink2_label=Desenho - -editor_stamp.title=Adicionar uma imagem -editor_stamp_label=Adicionar uma imagem - -editor_stamp1.title=Adicionar ou editar imagens -editor_stamp1_label=Adicionar ou editar imagens - -free_text2_default_content=Comece digitando… - -# Editor Parameters -editor_free_text_color=Cor -editor_free_text_size=Tamanho -editor_ink_color=Cor -editor_ink_thickness=Espessura -editor_ink_opacity=Opacidade - -editor_stamp_add_image_label=Adicionar imagem -editor_stamp_add_image.title=Adicionar imagem - -# Editor aria -editor_free_text2_aria_label=Editor de texto -editor_ink2_aria_label=Editor de desenho -editor_ink_canvas_aria_label=Imagem criada pelo usuário diff --git a/static/pdf.js/locale/pt-PT/viewer.ftl b/static/pdf.js/locale/pt-PT/viewer.ftl new file mode 100644 index 00000000..7fd8d378 --- /dev/null +++ b/static/pdf.js/locale/pt-PT/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Página anterior +pdfjs-previous-button-label = Anterior +pdfjs-next-button = + .title = Página seguinte +pdfjs-next-button-label = Seguinte +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Página +# 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 = de { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount }) +pdfjs-zoom-out-button = + .title = Reduzir +pdfjs-zoom-out-button-label = Reduzir +pdfjs-zoom-in-button = + .title = Ampliar +pdfjs-zoom-in-button-label = Ampliar +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Trocar para o modo de apresentação +pdfjs-presentation-mode-button-label = Modo de apresentação +pdfjs-open-file-button = + .title = Abrir ficheiro +pdfjs-open-file-button-label = Abrir +pdfjs-print-button = + .title = Imprimir +pdfjs-print-button-label = Imprimir +pdfjs-save-button = + .title = Guardar +pdfjs-save-button-label = Guardar +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Transferir +# 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 = Transferir +pdfjs-bookmark-button = + .title = Página atual (ver URL da página atual) +pdfjs-bookmark-button-label = Pagina atual +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Abrir na aplicação +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Abrir na aplicação + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Ferramentas +pdfjs-tools-button-label = Ferramentas +pdfjs-first-page-button = + .title = Ir para a primeira página +pdfjs-first-page-button-label = Ir para a primeira página +pdfjs-last-page-button = + .title = Ir para a última página +pdfjs-last-page-button-label = Ir para a última página +pdfjs-page-rotate-cw-button = + .title = Rodar à direita +pdfjs-page-rotate-cw-button-label = Rodar à direita +pdfjs-page-rotate-ccw-button = + .title = Rodar à esquerda +pdfjs-page-rotate-ccw-button-label = Rodar à esquerda +pdfjs-cursor-text-select-tool-button = + .title = Ativar ferramenta de seleção de texto +pdfjs-cursor-text-select-tool-button-label = Ferramenta de seleção de texto +pdfjs-cursor-hand-tool-button = + .title = Ativar ferramenta de mão +pdfjs-cursor-hand-tool-button-label = Ferramenta de mão +pdfjs-scroll-page-button = + .title = Utilizar deslocamento da página +pdfjs-scroll-page-button-label = Deslocamento da página +pdfjs-scroll-vertical-button = + .title = Utilizar deslocação vertical +pdfjs-scroll-vertical-button-label = Deslocação vertical +pdfjs-scroll-horizontal-button = + .title = Utilizar deslocação horizontal +pdfjs-scroll-horizontal-button-label = Deslocação horizontal +pdfjs-scroll-wrapped-button = + .title = Utilizar deslocação encapsulada +pdfjs-scroll-wrapped-button-label = Deslocação encapsulada +pdfjs-spread-none-button = + .title = Não juntar páginas dispersas +pdfjs-spread-none-button-label = Sem spreads +pdfjs-spread-odd-button = + .title = Juntar páginas dispersas a partir de páginas com números ímpares +pdfjs-spread-odd-button-label = Spreads ímpares +pdfjs-spread-even-button = + .title = Juntar páginas dispersas a partir de páginas com números pares +pdfjs-spread-even-button-label = Spreads pares + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Propriedades do documento… +pdfjs-document-properties-button-label = Propriedades do documento… +pdfjs-document-properties-file-name = Nome do ficheiro: +pdfjs-document-properties-file-size = Tamanho do ficheiro: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Título: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Assunto: +pdfjs-document-properties-keywords = Palavras-chave: +pdfjs-document-properties-creation-date = Data de criação: +pdfjs-document-properties-modification-date = Data de modificação: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Criador: +pdfjs-document-properties-producer = Produtor de PDF: +pdfjs-document-properties-version = Versão do PDF: +pdfjs-document-properties-page-count = N.º de páginas: +pdfjs-document-properties-page-size = Tamanho da página: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = retrato +pdfjs-document-properties-page-size-orientation-landscape = paisagem +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 = Carta +pdfjs-document-properties-page-size-name-legal = 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 = Vista rápida web: +pdfjs-document-properties-linearized-yes = Sim +pdfjs-document-properties-linearized-no = Não +pdfjs-document-properties-close-button = Fechar + +## Print + +pdfjs-print-progress-message = A preparar o documento para impressão… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Cancelar +pdfjs-printing-not-supported = Aviso: a impressão não é totalmente suportada por este navegador. +pdfjs-printing-not-ready = Aviso: o PDF ainda não está totalmente carregado. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Alternar barra lateral +pdfjs-toggle-sidebar-notification-button = + .title = Alternar barra lateral (o documento contém contornos/anexos/camadas) +pdfjs-toggle-sidebar-button-label = Alternar barra lateral +pdfjs-document-outline-button = + .title = Mostrar esquema do documento (duplo clique para expandir/colapsar todos os itens) +pdfjs-document-outline-button-label = Esquema do documento +pdfjs-attachments-button = + .title = Mostrar anexos +pdfjs-attachments-button-label = Anexos +pdfjs-layers-button = + .title = Mostrar camadas (clique duas vezes para repor todas as camadas para o estado predefinido) +pdfjs-layers-button-label = Camadas +pdfjs-thumbs-button = + .title = Mostrar miniaturas +pdfjs-thumbs-button-label = Miniaturas +pdfjs-current-outline-item-button = + .title = Encontrar o item atualmente destacado +pdfjs-current-outline-item-button-label = Item atualmente destacado +pdfjs-findbar-button = + .title = Localizar em documento +pdfjs-findbar-button-label = Localizar +pdfjs-additional-layers = Camadas adicionais + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Página { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura da página { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Localizar + .placeholder = Localizar em documento… +pdfjs-find-previous-button = + .title = Localizar ocorrência anterior da frase +pdfjs-find-previous-button-label = Anterior +pdfjs-find-next-button = + .title = Localizar ocorrência seguinte da frase +pdfjs-find-next-button-label = Seguinte +pdfjs-find-highlight-checkbox = Destacar tudo +pdfjs-find-match-case-checkbox-label = Correspondência +pdfjs-find-match-diacritics-checkbox-label = Corresponder diacríticos +pdfjs-find-entire-word-checkbox-label = Palavras completas +pdfjs-find-reached-top = Topo do documento atingido, a continuar a partir do fundo +pdfjs-find-reached-bottom = Fim do documento atingido, a continuar a partir do topo +# 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 } de { $total } correspondência + *[other] { $current } de { $total } correspondências + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Mais de { $limit } correspondência + *[other] Mais de { $limit } correspondências + } +pdfjs-find-not-found = Frase não encontrada + +## Predefined zoom values + +pdfjs-page-scale-width = Ajustar à largura +pdfjs-page-scale-fit = Ajustar à página +pdfjs-page-scale-auto = Zoom automático +pdfjs-page-scale-actual = Tamanho real +# 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 = Página { $page } + +## Loading indicator messages + +pdfjs-loading-error = Ocorreu um erro ao carregar o PDF. +pdfjs-invalid-file-error = Ficheiro PDF inválido ou danificado. +pdfjs-missing-file-error = Ficheiro PDF inexistente. +pdfjs-unexpected-response-error = Resposta inesperada do servidor. +pdfjs-rendering-error = Ocorreu um erro ao processar a página. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Anotação { $type }] + +## Password + +pdfjs-password-label = Introduza a palavra-passe para abrir este ficheiro PDF. +pdfjs-password-invalid = Palavra-passe inválida. Por favor, tente novamente. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Cancelar +pdfjs-web-fonts-disabled = Os tipos de letra web estão desativados: não é possível utilizar os tipos de letra PDF embutidos. + +## Editing + +pdfjs-editor-free-text-button = + .title = Texto +pdfjs-editor-free-text-button-label = Texto +pdfjs-editor-ink-button = + .title = Desenhar +pdfjs-editor-ink-button-label = Desenhar +pdfjs-editor-stamp-button = + .title = Adicionar ou editar imagens +pdfjs-editor-stamp-button-label = Adicionar ou editar imagens +pdfjs-editor-highlight-button = + .title = Destaque +pdfjs-editor-highlight-button-label = Destaque +pdfjs-highlight-floating-button = + .title = Destaque +pdfjs-highlight-floating-button1 = + .title = Realçar + .aria-label = Realçar +pdfjs-highlight-floating-button-label = Realçar + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Remover desenho +pdfjs-editor-remove-freetext-button = + .title = Remover texto +pdfjs-editor-remove-stamp-button = + .title = Remover imagem +pdfjs-editor-remove-highlight-button = + .title = Remover destaque + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Cor +pdfjs-editor-free-text-size-input = Tamanho +pdfjs-editor-ink-color-input = Cor +pdfjs-editor-ink-thickness-input = Espessura +pdfjs-editor-ink-opacity-input = Opacidade +pdfjs-editor-stamp-add-image-button = + .title = Adicionar imagem +pdfjs-editor-stamp-add-image-button-label = Adicionar imagem +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Espessura +pdfjs-editor-free-highlight-thickness-title = + .title = Alterar espessura quando destacar itens que não sejam texto +pdfjs-free-text = + .aria-label = Editor de texto +pdfjs-free-text-default-content = Começar a digitar… +pdfjs-ink = + .aria-label = Editor de desenho +pdfjs-ink-canvas = + .aria-label = Imagem criada pelo utilizador + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Texto alternativo +pdfjs-editor-alt-text-edit-button-label = Editar texto alternativo +pdfjs-editor-alt-text-dialog-label = Escolher uma opção +pdfjs-editor-alt-text-dialog-description = O texto alternativo (texto alternativo) ajuda quando as pessoas não conseguem ver a imagem ou quando a mesma não é carregada. +pdfjs-editor-alt-text-add-description-label = Adicionar uma descrição +pdfjs-editor-alt-text-add-description-description = Aponte para 1-2 frases que descrevam o assunto, definição ou ações. +pdfjs-editor-alt-text-mark-decorative-label = Marcar como decorativa +pdfjs-editor-alt-text-mark-decorative-description = Isto é utilizado para imagens decorativas, tais como limites ou marcas d'água. +pdfjs-editor-alt-text-cancel-button = Cancelar +pdfjs-editor-alt-text-save-button = Guardar +pdfjs-editor-alt-text-decorative-tooltip = Marcada como decorativa +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Por exemplo, “Um jovem senta-se à mesa para comer uma refeição” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Canto superior esquerdo — redimensionar +pdfjs-editor-resizer-label-top-middle = Superior ao centro — redimensionar +pdfjs-editor-resizer-label-top-right = Canto superior direito — redimensionar +pdfjs-editor-resizer-label-middle-right = Centro à direita — redimensionar +pdfjs-editor-resizer-label-bottom-right = Canto inferior direito — redimensionar +pdfjs-editor-resizer-label-bottom-middle = Inferior ao centro — redimensionar +pdfjs-editor-resizer-label-bottom-left = Canto inferior esquerdo — redimensionar +pdfjs-editor-resizer-label-middle-left = Centro à esquerda — redimensionar + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Cor de destaque +pdfjs-editor-colorpicker-button = + .title = Alterar cor +pdfjs-editor-colorpicker-dropdown = + .aria-label = Escolhas de cor +pdfjs-editor-colorpicker-yellow = + .title = Amarelo +pdfjs-editor-colorpicker-green = + .title = Verde +pdfjs-editor-colorpicker-blue = + .title = Azul +pdfjs-editor-colorpicker-pink = + .title = Rosa +pdfjs-editor-colorpicker-red = + .title = Vermelho + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Mostrar tudo +pdfjs-editor-highlight-show-all-button = + .title = Mostrar tudo diff --git a/static/pdf.js/locale/pt-PT/viewer.properties b/static/pdf.js/locale/pt-PT/viewer.properties deleted file mode 100644 index 22437aa3..00000000 --- a/static/pdf.js/locale/pt-PT/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Página anterior -previous_label=Anterior -next.title=Página seguinte -next_label=Seguinte - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Página -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=de {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} de {{pagesCount}}) - -zoom_out.title=Reduzir -zoom_out_label=Reduzir -zoom_in.title=Ampliar -zoom_in_label=Ampliar -zoom.title=Zoom -presentation_mode.title=Trocar para o modo de apresentação -presentation_mode_label=Modo de apresentação -open_file.title=Abrir ficheiro -open_file_label=Abrir -print.title=Imprimir -print_label=Imprimir -save.title=Guardar -save_label=Guardar -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Transferir -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Transferir -bookmark1.title=Página atual (ver URL da página atual) -bookmark1_label=Pagina atual -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Abrir na aplicação -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Abrir na aplicação - -# Secondary toolbar and context menu -tools.title=Ferramentas -tools_label=Ferramentas -first_page.title=Ir para a primeira página -first_page_label=Ir para a primeira página -last_page.title=Ir para a última página -last_page_label=Ir para a última página -page_rotate_cw.title=Rodar à direita -page_rotate_cw_label=Rodar à direita -page_rotate_ccw.title=Rodar à esquerda -page_rotate_ccw_label=Rodar à esquerda - -cursor_text_select_tool.title=Ativar ferramenta de seleção de texto -cursor_text_select_tool_label=Ferramenta de seleção de texto -cursor_hand_tool.title=Ativar ferramenta de mão -cursor_hand_tool_label=Ferramenta de mão - -scroll_page.title=Utilizar deslocamento da página -scroll_page_label=Deslocamento da página -scroll_vertical.title=Utilizar deslocação vertical -scroll_vertical_label=Deslocação vertical -scroll_horizontal.title=Utilizar deslocação horizontal -scroll_horizontal_label=Deslocação horizontal -scroll_wrapped.title=Utilizar deslocação encapsulada -scroll_wrapped_label=Deslocação encapsulada - -spread_none.title=Não juntar páginas dispersas -spread_none_label=Sem spreads -spread_odd.title=Juntar páginas dispersas a partir de páginas com números ímpares -spread_odd_label=Spreads ímpares -spread_even.title=Juntar páginas dispersas a partir de páginas com números pares -spread_even_label=Spreads pares - -# Document properties dialog box -document_properties.title=Propriedades do documento… -document_properties_label=Propriedades do documento… -document_properties_file_name=Nome do ficheiro: -document_properties_file_size=Tamanho do ficheiro: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Título: -document_properties_author=Autor: -document_properties_subject=Assunto: -document_properties_keywords=Palavras-chave: -document_properties_creation_date=Data de criação: -document_properties_modification_date=Data de modificação: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Criador: -document_properties_producer=Produtor de PDF: -document_properties_version=Versão do PDF: -document_properties_page_count=N.º de páginas: -document_properties_page_size=Tamanho da página: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=retrato -document_properties_page_size_orientation_landscape=paisagem -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Carta -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Vista rápida web: -document_properties_linearized_yes=Sim -document_properties_linearized_no=Não -document_properties_close=Fechar - -print_progress_message=A preparar o documento para impressão… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Cancelar - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Alternar barra lateral -toggle_sidebar_notification2.title=Alternar barra lateral (o documento contém contornos/anexos/camadas) -toggle_sidebar_label=Alternar barra lateral -document_outline.title=Mostrar esquema do documento (duplo clique para expandir/colapsar todos os itens) -document_outline_label=Esquema do documento -attachments.title=Mostrar anexos -attachments_label=Anexos -layers.title=Mostrar camadas (clique duas vezes para repor todas as camadas para o estado predefinido) -layers_label=Camadas -thumbs.title=Mostrar miniaturas -thumbs_label=Miniaturas -current_outline_item.title=Encontrar o item atualmente destacado -current_outline_item_label=Item atualmente destacado -findbar.title=Localizar em documento -findbar_label=Localizar - -additional_layers=Camadas adicionais -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Página {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Página {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura da página {{page}} - -# Find panel button title and messages -find_input.title=Localizar -find_input.placeholder=Localizar em documento… -find_previous.title=Localizar ocorrência anterior da frase -find_previous_label=Anterior -find_next.title=Localizar ocorrência seguinte da frase -find_next_label=Seguinte -find_highlight=Destacar tudo -find_match_case_label=Correspondência -find_match_diacritics_label=Corresponder diacríticos -find_entire_word_label=Palavras completas -find_reached_top=Topo do documento atingido, a continuar a partir do fundo -find_reached_bottom=Fim do documento atingido, a continuar a partir do topo -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} de {{total}} correspondência -find_match_count[two]={{current}} de {{total}} correspondências -find_match_count[few]={{current}} de {{total}} correspondências -find_match_count[many]={{current}} de {{total}} correspondências -find_match_count[other]={{current}} de {{total}} correspondências -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Mais de {{limit}} correspondências -find_match_count_limit[one]=Mais de {{limit}} correspondência -find_match_count_limit[two]=Mais de {{limit}} correspondências -find_match_count_limit[few]=Mais de {{limit}} correspondências -find_match_count_limit[many]=Mais de {{limit}} correspondências -find_match_count_limit[other]=Mais de {{limit}} correspondências -find_not_found=Frase não encontrada - -# Predefined zoom values -page_scale_width=Ajustar à largura -page_scale_fit=Ajustar à página -page_scale_auto=Zoom automático -page_scale_actual=Tamanho real -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Ocorreu um erro ao carregar o PDF. -invalid_file_error=Ficheiro PDF inválido ou danificado. -missing_file_error=Ficheiro PDF inexistente. -unexpected_response_error=Resposta inesperada do servidor. -rendering_error=Ocorreu um erro ao processar a página. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Anotação {{type}}] -password_label=Introduza a palavra-passe para abrir este ficheiro PDF. -password_invalid=Palavra-passe inválida. Por favor, tente novamente. -password_ok=OK -password_cancel=Cancelar - -printing_not_supported=Aviso: a impressão não é totalmente suportada por este navegador. -printing_not_ready=Aviso: o PDF ainda não está totalmente carregado. -web_fonts_disabled=Os tipos de letra web estão desativados: não é possível utilizar os tipos de letra PDF embutidos. - -# Editor -editor_free_text2.title=Texto -editor_free_text2_label=Texto -editor_ink2.title=Desenhar -editor_ink2_label=Desenhar - -editor_stamp.title=Adicionar uma imagem -editor_stamp_label=Adicionar uma imagem - -editor_stamp1.title=Adicionar ou editar imagens -editor_stamp1_label=Adicionar ou editar imagens - -free_text2_default_content=Começar a digitar… - -# Editor Parameters -editor_free_text_color=Cor -editor_free_text_size=Tamanho -editor_ink_color=Cor -editor_ink_thickness=Espessura -editor_ink_opacity=Opacidade - -editor_stamp_add_image_label=Adicionar imagem -editor_stamp_add_image.title=Adicionar imagem - -# Editor aria -editor_free_text2_aria_label=Editor de texto -editor_ink2_aria_label=Editor de desenho -editor_ink_canvas_aria_label=Imagem criada pelo utilizador diff --git a/static/pdf.js/locale/rm/viewer.ftl b/static/pdf.js/locale/rm/viewer.ftl new file mode 100644 index 00000000..e428e133 --- /dev/null +++ b/static/pdf.js/locale/rm/viewer.ftl @@ -0,0 +1,396 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Pagina precedenta +pdfjs-previous-button-label = Enavos +pdfjs-next-button = + .title = Proxima pagina +pdfjs-next-button-label = Enavant +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Pagina +# 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 = da { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } da { $pagesCount }) +pdfjs-zoom-out-button = + .title = Empitschnir +pdfjs-zoom-out-button-label = Empitschnir +pdfjs-zoom-in-button = + .title = Engrondir +pdfjs-zoom-in-button-label = Engrondir +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Midar en il modus da preschentaziun +pdfjs-presentation-mode-button-label = Modus da preschentaziun +pdfjs-open-file-button = + .title = Avrir datoteca +pdfjs-open-file-button-label = Avrir +pdfjs-print-button = + .title = Stampar +pdfjs-print-button-label = Stampar +pdfjs-save-button = + .title = Memorisar +pdfjs-save-button-label = Memorisar +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Telechargiar +# 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 = Telechargiar +pdfjs-bookmark-button = + .title = Pagina actuala (mussar l'URL da la pagina actuala) +pdfjs-bookmark-button-label = Pagina actuala + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Utensils +pdfjs-tools-button-label = Utensils +pdfjs-first-page-button = + .title = Siglir a l'emprima pagina +pdfjs-first-page-button-label = Siglir a l'emprima pagina +pdfjs-last-page-button = + .title = Siglir a la davosa pagina +pdfjs-last-page-button-label = Siglir a la davosa pagina +pdfjs-page-rotate-cw-button = + .title = Rotar en direcziun da l'ura +pdfjs-page-rotate-cw-button-label = Rotar en direcziun da l'ura +pdfjs-page-rotate-ccw-button = + .title = Rotar en direcziun cuntraria a l'ura +pdfjs-page-rotate-ccw-button-label = Rotar en direcziun cuntraria a l'ura +pdfjs-cursor-text-select-tool-button = + .title = Activar l'utensil per selecziunar text +pdfjs-cursor-text-select-tool-button-label = Utensil per selecziunar text +pdfjs-cursor-hand-tool-button = + .title = Activar l'utensil da maun +pdfjs-cursor-hand-tool-button-label = Utensil da maun +pdfjs-scroll-page-button = + .title = Utilisar la defilada per pagina +pdfjs-scroll-page-button-label = Defilada per pagina +pdfjs-scroll-vertical-button = + .title = Utilisar il defilar vertical +pdfjs-scroll-vertical-button-label = Defilar vertical +pdfjs-scroll-horizontal-button = + .title = Utilisar il defilar orizontal +pdfjs-scroll-horizontal-button-label = Defilar orizontal +pdfjs-scroll-wrapped-button = + .title = Utilisar il defilar en colonnas +pdfjs-scroll-wrapped-button-label = Defilar en colonnas +pdfjs-spread-none-button = + .title = Betg parallelisar las paginas +pdfjs-spread-none-button-label = Betg parallel +pdfjs-spread-odd-button = + .title = Parallelisar las paginas cun cumenzar cun paginas spèras +pdfjs-spread-odd-button-label = Parallel spèr +pdfjs-spread-even-button = + .title = Parallelisar las paginas cun cumenzar cun paginas pèras +pdfjs-spread-even-button-label = Parallel pèr + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Caracteristicas dal document… +pdfjs-document-properties-button-label = Caracteristicas dal document… +pdfjs-document-properties-file-name = Num da la datoteca: +pdfjs-document-properties-file-size = Grondezza da la datoteca: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Titel: +pdfjs-document-properties-author = Autur: +pdfjs-document-properties-subject = Tema: +pdfjs-document-properties-keywords = Chavazzins: +pdfjs-document-properties-creation-date = Data da creaziun: +pdfjs-document-properties-modification-date = Data da modificaziun: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date } { $time } +pdfjs-document-properties-creator = Creà da: +pdfjs-document-properties-producer = Creà il PDF cun: +pdfjs-document-properties-version = Versiun da PDF: +pdfjs-document-properties-page-count = Dumber da paginas: +pdfjs-document-properties-page-size = Grondezza da la pagina: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = vertical +pdfjs-document-properties-page-size-orientation-landscape = orizontal +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Fast Web View: +pdfjs-document-properties-linearized-yes = Gea +pdfjs-document-properties-linearized-no = Na +pdfjs-document-properties-close-button = Serrar + +## Print + +pdfjs-print-progress-message = Preparar il document per stampar… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Interrumper +pdfjs-printing-not-supported = Attenziun: Il stampar na funcziunescha anc betg dal tut en quest navigatur. +pdfjs-printing-not-ready = Attenziun: Il PDF n'è betg chargià cumplettamain per stampar. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Activar/deactivar la trav laterala +pdfjs-toggle-sidebar-notification-button = + .title = Activar/deactivar la trav laterala (il document cuntegna structura dal document/agiuntas/nivels) +pdfjs-toggle-sidebar-button-label = Activar/deactivar la trav laterala +pdfjs-document-outline-button = + .title = Mussar la structura dal document (cliccar duas giadas per extender/cumprimer tut ils elements) +pdfjs-document-outline-button-label = Structura dal document +pdfjs-attachments-button = + .title = Mussar agiuntas +pdfjs-attachments-button-label = Agiuntas +pdfjs-layers-button = + .title = Mussar ils nivels (cliccar dubel per restaurar il stadi da standard da tut ils nivels) +pdfjs-layers-button-label = Nivels +pdfjs-thumbs-button = + .title = Mussar las miniaturas +pdfjs-thumbs-button-label = Miniaturas +pdfjs-current-outline-item-button = + .title = Tschertgar l'element da structura actual +pdfjs-current-outline-item-button-label = Element da structura actual +pdfjs-findbar-button = + .title = Tschertgar en il document +pdfjs-findbar-button-label = Tschertgar +pdfjs-additional-layers = Nivels supplementars + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Pagina { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura da la pagina { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Tschertgar + .placeholder = Tschertgar en il document… +pdfjs-find-previous-button = + .title = Tschertgar la posiziun precedenta da l'expressiun +pdfjs-find-previous-button-label = Enavos +pdfjs-find-next-button = + .title = Tschertgar la proxima posiziun da l'expressiun +pdfjs-find-next-button-label = Enavant +pdfjs-find-highlight-checkbox = Relevar tuts +pdfjs-find-match-case-checkbox-label = Resguardar maiusclas/minusclas +pdfjs-find-match-diacritics-checkbox-label = Resguardar ils segns diacritics +pdfjs-find-entire-word-checkbox-label = Pleds entirs +pdfjs-find-reached-top = Il cumenzament dal document è cuntanschì, la tschertga cuntinuescha a la fin dal document +pdfjs-find-reached-bottom = La fin dal document è cuntanschì, la tschertga cuntinuescha al cumenzament dal document +# 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 } dad { $total } correspundenza + *[other] { $current } da { $total } correspundenzas + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Dapli che { $limit } correspundenza + *[other] Dapli che { $limit } correspundenzas + } +pdfjs-find-not-found = Impussibel da chattar l'expressiun + +## Predefined zoom values + +pdfjs-page-scale-width = Ladezza da la pagina +pdfjs-page-scale-fit = Entira pagina +pdfjs-page-scale-auto = Zoom automatic +pdfjs-page-scale-actual = Grondezza actuala +# 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 = Pagina { $page } + +## Loading indicator messages + +pdfjs-loading-error = Ina errur è cumparida cun chargiar il PDF. +pdfjs-invalid-file-error = Datoteca PDF nunvalida u donnegiada. +pdfjs-missing-file-error = Datoteca PDF manconta. +pdfjs-unexpected-response-error = Resposta nunspetgada dal server. +pdfjs-rendering-error = Ina errur è cumparida cun visualisar questa pagina. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Annotaziun da { $type }] + +## Password + +pdfjs-password-label = Endatescha il pled-clav per avrir questa datoteca da PDF. +pdfjs-password-invalid = Pled-clav nunvalid. Emprova anc ina giada. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Interrumper +pdfjs-web-fonts-disabled = Scrittiras dal web èn deactivadas: impussibel dad utilisar las scrittiras integradas en il PDF. + +## Editing + +pdfjs-editor-free-text-button = + .title = Text +pdfjs-editor-free-text-button-label = Text +pdfjs-editor-ink-button = + .title = Dissegnar +pdfjs-editor-ink-button-label = Dissegnar +pdfjs-editor-stamp-button = + .title = Agiuntar u modifitgar maletgs +pdfjs-editor-stamp-button-label = Agiuntar u modifitgar maletgs +pdfjs-editor-highlight-button = + .title = Marcar +pdfjs-editor-highlight-button-label = Marcar +pdfjs-highlight-floating-button = + .title = Relevar +pdfjs-highlight-floating-button1 = + .title = Marcar + .aria-label = Marcar +pdfjs-highlight-floating-button-label = Marcar + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Allontanar il dissegn +pdfjs-editor-remove-freetext-button = + .title = Allontanar il text +pdfjs-editor-remove-stamp-button = + .title = Allontanar la grafica +pdfjs-editor-remove-highlight-button = + .title = Allontanar l'emfasa + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Colur +pdfjs-editor-free-text-size-input = Grondezza +pdfjs-editor-ink-color-input = Colur +pdfjs-editor-ink-thickness-input = Grossezza +pdfjs-editor-ink-opacity-input = Opacitad +pdfjs-editor-stamp-add-image-button = + .title = Agiuntar in maletg +pdfjs-editor-stamp-add-image-button-label = Agiuntar in maletg +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Grossezza +pdfjs-editor-free-highlight-thickness-title = + .title = Midar la grossezza cun relevar elements betg textuals +pdfjs-free-text = + .aria-label = Editur da text +pdfjs-free-text-default-content = Cumenzar a tippar… +pdfjs-ink = + .aria-label = Editur dissegn +pdfjs-ink-canvas = + .aria-label = Maletg creà da l'utilisader + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Text alternativ +pdfjs-editor-alt-text-edit-button-label = Modifitgar il text alternativ +pdfjs-editor-alt-text-dialog-label = Tscherner ina opziun +pdfjs-editor-alt-text-dialog-description = Il text alternativ (alt text) gida en cas che persunas na vesan betg il maletg u sch'i na reussescha betg d'al chargiar. +pdfjs-editor-alt-text-add-description-label = Agiuntar ina descripziun +pdfjs-editor-alt-text-add-description-description = Scriva idealmain 1-2 frasas che descrivan l'object, la situaziun u las acziuns. +pdfjs-editor-alt-text-mark-decorative-label = Marcar sco decorativ +pdfjs-editor-alt-text-mark-decorative-description = Quai vegn duvrà per maletgs ornamentals, sco urs u filigranas. +pdfjs-editor-alt-text-cancel-button = Interrumper +pdfjs-editor-alt-text-save-button = Memorisar +pdfjs-editor-alt-text-decorative-tooltip = Marcà sco decorativ +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Per exempel: «In um giuven sesa a maisa per mangiar in past» + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Chantun sura a sanestra — redimensiunar +pdfjs-editor-resizer-label-top-middle = Sura amez — redimensiunar +pdfjs-editor-resizer-label-top-right = Chantun sura a dretga — redimensiunar +pdfjs-editor-resizer-label-middle-right = Da vart dretga amez — redimensiunar +pdfjs-editor-resizer-label-bottom-right = Chantun sut a dretga — redimensiunar +pdfjs-editor-resizer-label-bottom-middle = Sutvart amez — redimensiunar +pdfjs-editor-resizer-label-bottom-left = Chantun sut a sanestra — redimensiunar +pdfjs-editor-resizer-label-middle-left = Vart sanestra amez — redimensiunar + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Colur per l'emfasa +pdfjs-editor-colorpicker-button = + .title = Midar la colur +pdfjs-editor-colorpicker-dropdown = + .aria-label = Colurs disponiblas +pdfjs-editor-colorpicker-yellow = + .title = Mellen +pdfjs-editor-colorpicker-green = + .title = Verd +pdfjs-editor-colorpicker-blue = + .title = Blau +pdfjs-editor-colorpicker-pink = + .title = Rosa +pdfjs-editor-colorpicker-red = + .title = Cotschen + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Mussar tut +pdfjs-editor-highlight-show-all-button = + .title = Mussar tut diff --git a/static/pdf.js/locale/rm/viewer.properties b/static/pdf.js/locale/rm/viewer.properties deleted file mode 100644 index ea0a1182..00000000 --- a/static/pdf.js/locale/rm/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Pagina precedenta -previous_label=Enavos -next.title=Proxima pagina -next_label=Enavant - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Pagina -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=da {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} da {{pagesCount}}) - -zoom_out.title=Empitschnir -zoom_out_label=Empitschnir -zoom_in.title=Engrondir -zoom_in_label=Engrondir -zoom.title=Zoom -presentation_mode.title=Midar en il modus da preschentaziun -presentation_mode_label=Modus da preschentaziun -open_file.title=Avrir datoteca -open_file_label=Avrir -print.title=Stampar -print_label=Stampar -save.title=Memorisar -save_label=Memorisar -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Telechargiar -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Telechargiar -bookmark1.title=Pagina actuala (mussar l'URL da la pagina actuala) -bookmark1_label=Pagina actuala -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Avrir en ina app -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Avrir en ina app - -# Secondary toolbar and context menu -tools.title=Utensils -tools_label=Utensils -first_page.title=Siglir a l'emprima pagina -first_page_label=Siglir a l'emprima pagina -last_page.title=Siglir a la davosa pagina -last_page_label=Siglir a la davosa pagina -page_rotate_cw.title=Rotar en direcziun da l'ura -page_rotate_cw_label=Rotar en direcziun da l'ura -page_rotate_ccw.title=Rotar en direcziun cuntraria a l'ura -page_rotate_ccw_label=Rotar en direcziun cuntraria a l'ura - -cursor_text_select_tool.title=Activar l'utensil per selecziunar text -cursor_text_select_tool_label=Utensil per selecziunar text -cursor_hand_tool.title=Activar l'utensil da maun -cursor_hand_tool_label=Utensil da maun - -scroll_page.title=Utilisar la defilada per pagina -scroll_page_label=Defilada per pagina -scroll_vertical.title=Utilisar il defilar vertical -scroll_vertical_label=Defilar vertical -scroll_horizontal.title=Utilisar il defilar orizontal -scroll_horizontal_label=Defilar orizontal -scroll_wrapped.title=Utilisar il defilar en colonnas -scroll_wrapped_label=Defilar en colonnas - -spread_none.title=Betg parallelisar las paginas -spread_none_label=Betg parallel -spread_odd.title=Parallelisar las paginas cun cumenzar cun paginas spèras -spread_odd_label=Parallel spèr -spread_even.title=Parallelisar las paginas cun cumenzar cun paginas pèras -spread_even_label=Parallel pèr - -# Document properties dialog box -document_properties.title=Caracteristicas dal document… -document_properties_label=Caracteristicas dal document… -document_properties_file_name=Num da la datoteca: -document_properties_file_size=Grondezza da la datoteca: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Titel: -document_properties_author=Autur: -document_properties_subject=Tema: -document_properties_keywords=Chavazzins: -document_properties_creation_date=Data da creaziun: -document_properties_modification_date=Data da modificaziun: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}} {{time}} -document_properties_creator=Creà da: -document_properties_producer=Creà il PDF cun: -document_properties_version=Versiun da PDF: -document_properties_page_count=Dumber da paginas: -document_properties_page_size=Grondezza da la pagina: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=vertical -document_properties_page_size_orientation_landscape=orizontal -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Fast Web View: -document_properties_linearized_yes=Gea -document_properties_linearized_no=Na -document_properties_close=Serrar - -print_progress_message=Preparar il document per stampar… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Interrumper - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Activar/deactivar la trav laterala -toggle_sidebar_notification2.title=Activar/deactivar la trav laterala (il document cuntegna structura dal document/agiuntas/nivels) -toggle_sidebar_label=Activar/deactivar la trav laterala -document_outline.title=Mussar la structura dal document (cliccar duas giadas per extender/cumprimer tut ils elements) -document_outline_label=Structura dal document -attachments.title=Mussar agiuntas -attachments_label=Agiuntas -layers.title=Mussar ils nivels (cliccar dubel per restaurar il stadi da standard da tut ils nivels) -layers_label=Nivels -thumbs.title=Mussar las miniaturas -thumbs_label=Miniaturas -current_outline_item.title=Tschertgar l'element da structura actual -current_outline_item_label=Element da structura actual -findbar.title=Tschertgar en il document -findbar_label=Tschertgar - -additional_layers=Nivels supplementars -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Pagina {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Pagina {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura da la pagina {{page}} - -# Find panel button title and messages -find_input.title=Tschertgar -find_input.placeholder=Tschertgar en il document… -find_previous.title=Tschertgar la posiziun precedenta da l'expressiun -find_previous_label=Enavos -find_next.title=Tschertgar la proxima posiziun da l'expressiun -find_next_label=Enavant -find_highlight=Relevar tuts -find_match_case_label=Resguardar maiusclas/minusclas -find_match_diacritics_label=Resguardar ils segns diacritics -find_entire_word_label=Pleds entirs -find_reached_top=Il cumenzament dal document è cuntanschì, la tschertga cuntinuescha a la fin dal document -find_reached_bottom=La fin dal document è cuntanschì, la tschertga cuntinuescha al cumenzament dal document -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} dad {{total}} correspundenza -find_match_count[two]={{current}} da {{total}} correspundenzas -find_match_count[few]={{current}} da {{total}} correspundenzas -find_match_count[many]={{current}} da {{total}} correspundenzas -find_match_count[other]={{current}} da {{total}} correspundenzas -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Dapli che {{limit}} correspundenzas -find_match_count_limit[one]=Dapli che {{limit}} correspundenza -find_match_count_limit[two]=Dapli che {{limit}} correspundenzas -find_match_count_limit[few]=Dapli che {{limit}} correspundenzas -find_match_count_limit[many]=Dapli che {{limit}} correspundenzas -find_match_count_limit[other]=Dapli che {{limit}} correspundenzas -find_not_found=Impussibel da chattar l'expressiun - -# Predefined zoom values -page_scale_width=Ladezza da la pagina -page_scale_fit=Entira pagina -page_scale_auto=Zoom automatic -page_scale_actual=Grondezza actuala -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Ina errur è cumparida cun chargiar il PDF. -invalid_file_error=Datoteca PDF nunvalida u donnegiada. -missing_file_error=Datoteca PDF manconta. -unexpected_response_error=Resposta nunspetgada dal server. -rendering_error=Ina errur è cumparida cun visualisar questa pagina. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Annotaziun da {{type}}] -password_label=Endatescha il pled-clav per avrir questa datoteca da PDF. -password_invalid=Pled-clav nunvalid. Emprova anc ina giada. -password_ok=OK -password_cancel=Interrumper - -printing_not_supported=Attenziun: Il stampar na funcziunescha anc betg dal tut en quest navigatur. -printing_not_ready=Attenziun: Il PDF n'è betg chargià cumplettamain per stampar. -web_fonts_disabled=Scrittiras dal web èn deactivadas: impussibel dad utilisar las scrittiras integradas en il PDF. - -# Editor -editor_free_text2.title=Text -editor_free_text2_label=Text -editor_ink2.title=Dissegnar -editor_ink2_label=Dissegnar - -editor_stamp.title=Agiuntar in maletg -editor_stamp_label=Agiuntar in maletg - -editor_stamp1.title=Agiuntar u modifitgar maletgs -editor_stamp1_label=Agiuntar u modifitgar maletgs - -free_text2_default_content=Cumenzar a tippar… - -# Editor Parameters -editor_free_text_color=Colur -editor_free_text_size=Grondezza -editor_ink_color=Colur -editor_ink_thickness=Grossezza -editor_ink_opacity=Opacitad - -editor_stamp_add_image_label=Agiuntar in maletg -editor_stamp_add_image.title=Agiuntar in maletg - -# Editor aria -editor_free_text2_aria_label=Editur da text -editor_ink2_aria_label=Editur dissegn -editor_ink_canvas_aria_label=Maletg creà da l'utilisader diff --git a/static/pdf.js/locale/ro/viewer.ftl b/static/pdf.js/locale/ro/viewer.ftl new file mode 100644 index 00000000..7c6f0b6a --- /dev/null +++ b/static/pdf.js/locale/ro/viewer.ftl @@ -0,0 +1,251 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Pagina precedentă +pdfjs-previous-button-label = Înapoi +pdfjs-next-button = + .title = Pagina următoare +pdfjs-next-button-label = Înainte +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Pagina +# 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 = din { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } din { $pagesCount }) +pdfjs-zoom-out-button = + .title = Micșorează +pdfjs-zoom-out-button-label = Micșorează +pdfjs-zoom-in-button = + .title = Mărește +pdfjs-zoom-in-button-label = Mărește +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Comută la modul de prezentare +pdfjs-presentation-mode-button-label = Mod de prezentare +pdfjs-open-file-button = + .title = Deschide un fișier +pdfjs-open-file-button-label = Deschide +pdfjs-print-button = + .title = Tipărește +pdfjs-print-button-label = Tipărește + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Instrumente +pdfjs-tools-button-label = Instrumente +pdfjs-first-page-button = + .title = Mergi la prima pagină +pdfjs-first-page-button-label = Mergi la prima pagină +pdfjs-last-page-button = + .title = Mergi la ultima pagină +pdfjs-last-page-button-label = Mergi la ultima pagină +pdfjs-page-rotate-cw-button = + .title = Rotește în sensul acelor de ceas +pdfjs-page-rotate-cw-button-label = Rotește în sensul acelor de ceas +pdfjs-page-rotate-ccw-button = + .title = Rotește în sens invers al acelor de ceas +pdfjs-page-rotate-ccw-button-label = Rotește în sens invers al acelor de ceas +pdfjs-cursor-text-select-tool-button = + .title = Activează instrumentul de selecție a textului +pdfjs-cursor-text-select-tool-button-label = Instrumentul de selecție a textului +pdfjs-cursor-hand-tool-button = + .title = Activează instrumentul mână +pdfjs-cursor-hand-tool-button-label = Unealta mână +pdfjs-scroll-vertical-button = + .title = Folosește derularea verticală +pdfjs-scroll-vertical-button-label = Derulare verticală +pdfjs-scroll-horizontal-button = + .title = Folosește derularea orizontală +pdfjs-scroll-horizontal-button-label = Derulare orizontală +pdfjs-scroll-wrapped-button = + .title = Folosește derularea încadrată +pdfjs-scroll-wrapped-button-label = Derulare încadrată +pdfjs-spread-none-button = + .title = Nu uni paginile broșate +pdfjs-spread-none-button-label = Fără pagini broșate +pdfjs-spread-odd-button = + .title = Unește paginile broșate începând cu cele impare +pdfjs-spread-odd-button-label = Broșare pagini impare +pdfjs-spread-even-button = + .title = Unește paginile broșate începând cu cele pare +pdfjs-spread-even-button-label = Broșare pagini pare + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Proprietățile documentului… +pdfjs-document-properties-button-label = Proprietățile documentului… +pdfjs-document-properties-file-name = Numele fișierului: +pdfjs-document-properties-file-size = Mărimea fișierului: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } byți) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } byți) +pdfjs-document-properties-title = Titlu: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Subiect: +pdfjs-document-properties-keywords = Cuvinte cheie: +pdfjs-document-properties-creation-date = Data creării: +pdfjs-document-properties-modification-date = Data modificării: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Autor: +pdfjs-document-properties-producer = Producător PDF: +pdfjs-document-properties-version = Versiune PDF: +pdfjs-document-properties-page-count = Număr de pagini: +pdfjs-document-properties-page-size = Mărimea paginii: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = verticală +pdfjs-document-properties-page-size-orientation-landscape = orizontală +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 = Literă +pdfjs-document-properties-page-size-name-legal = 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 = Vizualizare web rapidă: +pdfjs-document-properties-linearized-yes = Da +pdfjs-document-properties-linearized-no = Nu +pdfjs-document-properties-close-button = Închide + +## Print + +pdfjs-print-progress-message = Se pregătește documentul pentru tipărire… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Renunță +pdfjs-printing-not-supported = Avertisment: Tipărirea nu este suportată în totalitate de acest browser. +pdfjs-printing-not-ready = Avertisment: PDF-ul nu este încărcat complet pentru tipărire. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Comută bara laterală +pdfjs-toggle-sidebar-button-label = Comută bara laterală +pdfjs-document-outline-button = + .title = Afișează schița documentului (dublu-clic pentru a extinde/restrânge toate elementele) +pdfjs-document-outline-button-label = Schița documentului +pdfjs-attachments-button = + .title = Afișează atașamentele +pdfjs-attachments-button-label = Atașamente +pdfjs-thumbs-button = + .title = Afișează miniaturi +pdfjs-thumbs-button-label = Miniaturi +pdfjs-findbar-button = + .title = Caută în document +pdfjs-findbar-button-label = Caută + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Pagina { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura paginii { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Caută + .placeholder = Caută în document… +pdfjs-find-previous-button = + .title = Mergi la apariția anterioară a textului +pdfjs-find-previous-button-label = Înapoi +pdfjs-find-next-button = + .title = Mergi la apariția următoare a textului +pdfjs-find-next-button-label = Înainte +pdfjs-find-highlight-checkbox = Evidențiază toate aparițiile +pdfjs-find-match-case-checkbox-label = Ține cont de majuscule și minuscule +pdfjs-find-entire-word-checkbox-label = Cuvinte întregi +pdfjs-find-reached-top = Am ajuns la începutul documentului, continuă de la sfârșit +pdfjs-find-reached-bottom = Am ajuns la sfârșitul documentului, continuă de la început +pdfjs-find-not-found = Nu s-a găsit textul + +## Predefined zoom values + +pdfjs-page-scale-width = Lățime pagină +pdfjs-page-scale-fit = Potrivire la pagină +pdfjs-page-scale-auto = Zoom automat +pdfjs-page-scale-actual = Mărime reală +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = A intervenit o eroare la încărcarea PDF-ului. +pdfjs-invalid-file-error = Fișier PDF nevalid sau corupt. +pdfjs-missing-file-error = Fișier PDF lipsă. +pdfjs-unexpected-response-error = Răspuns neașteptat de la server. +pdfjs-rendering-error = A intervenit o eroare la randarea paginii. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Adnotare { $type }] + +## Password + +pdfjs-password-label = Introdu parola pentru a deschide acest fișier PDF. +pdfjs-password-invalid = Parolă nevalidă. Te rugăm să încerci din nou. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Renunță +pdfjs-web-fonts-disabled = Fonturile web sunt dezactivate: nu se pot folosi fonturile PDF încorporate. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/ro/viewer.properties b/static/pdf.js/locale/ro/viewer.properties deleted file mode 100644 index 487b483f..00000000 --- a/static/pdf.js/locale/ro/viewer.properties +++ /dev/null @@ -1,220 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Pagina precedentă -previous_label=Înapoi -next.title=Pagina următoare -next_label=Înainte - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Pagina -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=din {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} din {{pagesCount}}) - -zoom_out.title=Micșorează -zoom_out_label=Micșorează -zoom_in.title=Mărește -zoom_in_label=Mărește -zoom.title=Zoom -presentation_mode.title=Comută la modul de prezentare -presentation_mode_label=Mod de prezentare -open_file.title=Deschide un fișier -open_file_label=Deschide -print.title=Tipărește -print_label=Tipărește - -# Secondary toolbar and context menu -tools.title=Instrumente -tools_label=Instrumente -first_page.title=Mergi la prima pagină -first_page_label=Mergi la prima pagină -last_page.title=Mergi la ultima pagină -last_page_label=Mergi la ultima pagină -page_rotate_cw.title=Rotește în sensul acelor de ceas -page_rotate_cw_label=Rotește în sensul acelor de ceas -page_rotate_ccw.title=Rotește în sens invers al acelor de ceas -page_rotate_ccw_label=Rotește în sens invers al acelor de ceas - -cursor_text_select_tool.title=Activează instrumentul de selecție a textului -cursor_text_select_tool_label=Instrumentul de selecție a textului -cursor_hand_tool.title=Activează instrumentul mână -cursor_hand_tool_label=Unealta mână - -scroll_vertical.title=Folosește derularea verticală -scroll_vertical_label=Derulare verticală -scroll_horizontal.title=Folosește derularea orizontală -scroll_horizontal_label=Derulare orizontală -scroll_wrapped.title=Folosește derularea încadrată -scroll_wrapped_label=Derulare încadrată - -spread_none.title=Nu uni paginile broșate -spread_none_label=Fără pagini broșate -spread_odd.title=Unește paginile broșate începând cu cele impare -spread_odd_label=Broșare pagini impare -spread_even.title=Unește paginile broșate începând cu cele pare -spread_even_label=Broșare pagini pare - -# Document properties dialog box -document_properties.title=Proprietățile documentului… -document_properties_label=Proprietățile documentului… -document_properties_file_name=Numele fișierului: -document_properties_file_size=Mărimea fișierului: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} byți) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} byți) -document_properties_title=Titlu: -document_properties_author=Autor: -document_properties_subject=Subiect: -document_properties_keywords=Cuvinte cheie: -document_properties_creation_date=Data creării: -document_properties_modification_date=Data modificării: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Autor: -document_properties_producer=Producător PDF: -document_properties_version=Versiune PDF: -document_properties_page_count=Număr de pagini: -document_properties_page_size=Mărimea paginii: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=verticală -document_properties_page_size_orientation_landscape=orizontală -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Literă -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Vizualizare web rapidă: -document_properties_linearized_yes=Da -document_properties_linearized_no=Nu -document_properties_close=Închide - -print_progress_message=Se pregătește documentul pentru tipărire… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Renunță - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Comută bara laterală -toggle_sidebar_label=Comută bara laterală -document_outline.title=Afișează schița documentului (dublu-clic pentru a extinde/restrânge toate elementele) -document_outline_label=Schița documentului -attachments.title=Afișează atașamentele -attachments_label=Atașamente -thumbs.title=Afișează miniaturi -thumbs_label=Miniaturi -findbar.title=Caută în document -findbar_label=Caută - -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Pagina {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura paginii {{page}} - -# Find panel button title and messages -find_input.title=Caută -find_input.placeholder=Caută în document… -find_previous.title=Mergi la apariția anterioară a textului -find_previous_label=Înapoi -find_next.title=Mergi la apariția următoare a textului -find_next_label=Înainte -find_highlight=Evidențiază toate aparițiile -find_match_case_label=Ține cont de majuscule și minuscule -find_entire_word_label=Cuvinte întregi -find_reached_top=Am ajuns la începutul documentului, continuă de la sfârșit -find_reached_bottom=Am ajuns la sfârșitul documentului, continuă de la început -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} din {{total}} rezultat -find_match_count[two]={{current}} din {{total}} rezultate -find_match_count[few]={{current}} din {{total}} rezultate -find_match_count[many]={{current}} din {{total}} de rezultate -find_match_count[other]={{current}} din {{total}} de rezultate -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Peste {{limit}} rezultate -find_match_count_limit[one]=Peste {{limit}} rezultat -find_match_count_limit[two]=Peste {{limit}} rezultate -find_match_count_limit[few]=Peste {{limit}} rezultate -find_match_count_limit[many]=Peste {{limit}} de rezultate -find_match_count_limit[other]=Peste {{limit}} de rezultate -find_not_found=Nu s-a găsit textul - -# Predefined zoom values -page_scale_width=Lățime pagină -page_scale_fit=Potrivire la pagină -page_scale_auto=Zoom automat -page_scale_actual=Mărime reală -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=A intervenit o eroare la încărcarea PDF-ului. -invalid_file_error=Fișier PDF nevalid sau corupt. -missing_file_error=Fișier PDF lipsă. -unexpected_response_error=Răspuns neașteptat de la server. - -rendering_error=A intervenit o eroare la randarea paginii. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Adnotare {{type}}] -password_label=Introdu parola pentru a deschide acest fișier PDF. -password_invalid=Parolă nevalidă. Te rugăm să încerci din nou. -password_ok=OK -password_cancel=Renunță - -printing_not_supported=Avertisment: Tipărirea nu este suportată în totalitate de acest browser. -printing_not_ready=Avertisment: PDF-ul nu este încărcat complet pentru tipărire. -web_fonts_disabled=Fonturile web sunt dezactivate: nu se pot folosi fonturile PDF încorporate. - diff --git a/static/pdf.js/locale/ru/viewer.ftl b/static/pdf.js/locale/ru/viewer.ftl new file mode 100644 index 00000000..6e3713ce --- /dev/null +++ b/static/pdf.js/locale/ru/viewer.ftl @@ -0,0 +1,404 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = Перейти в режим презентации +pdfjs-presentation-mode-button-label = Режим презентации +pdfjs-open-file-button = + .title = Открыть файл +pdfjs-open-file-button-label = Открыть +pdfjs-print-button = + .title = Печать +pdfjs-print-button-label = Печать +pdfjs-save-button = + .title = Сохранить +pdfjs-save-button-label = Сохранить +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Загрузить +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = Загрузить +pdfjs-bookmark-button = + .title = Текущая страница (просмотр URL-адреса с текущей страницы) +pdfjs-bookmark-button-label = Текущая страница +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Открыть в приложении +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-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 = Масштабируемая прокрутка +pdfjs-spread-none-button = + .title = Не использовать режим разворотов страниц +pdfjs-spread-none-button-label = Без разворотов страниц +pdfjs-spread-odd-button = + .title = Развороты начинаются с нечётных номеров страниц +pdfjs-spread-odd-button-label = Нечётные страницы слева +pdfjs-spread-even-button = + .title = Развороты начинаются с чётных номеров страниц +pdfjs-spread-even-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 = Размер файла: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } байт) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } МБ ({ $size_b } байт) +pdfjs-document-properties-title = Заголовок: +pdfjs-document-properties-author = Автор: +pdfjs-document-properties-subject = Тема: +pdfjs-document-properties-keywords = Ключевые слова: +pdfjs-document-properties-creation-date = Дата создания: +pdfjs-document-properties-modification-date = Дата изменения: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = книжная +pdfjs-document-properties-page-size-orientation-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 = Letter +pdfjs-document-properties-page-size-name-legal = 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 = Быстрый просмотр в Web: +pdfjs-document-properties-linearized-yes = Да +pdfjs-document-properties-linearized-no = Нет +pdfjs-document-properties-close-button = Закрыть + +## Print + +pdfjs-print-progress-message = Подготовка документа к печати… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Отмена +pdfjs-printing-not-supported = Предупреждение: В этом браузере не полностью поддерживается печать. +pdfjs-printing-not-ready = Предупреждение: PDF не полностью загружен для печати. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Показать/скрыть боковую панель +pdfjs-toggle-sidebar-notification-button = + .title = Показать/скрыть боковую панель (документ имеет содержание/вложения/слои) +pdfjs-toggle-sidebar-button-label = Показать/скрыть боковую панель +pdfjs-document-outline-button = + .title = Показать содержание документа (двойной щелчок, чтобы развернуть/свернуть все элементы) +pdfjs-document-outline-button-label = Содержание документа +pdfjs-attachments-button = + .title = Показать вложения +pdfjs-attachments-button-label = Вложения +pdfjs-layers-button = + .title = Показать слои (дважды щёлкните, чтобы сбросить все слои к состоянию по умолчанию) +pdfjs-layers-button-label = Слои +pdfjs-thumbs-button = + .title = Показать миниатюры +pdfjs-thumbs-button-label = Миниатюры +pdfjs-current-outline-item-button = + .title = Найти текущий элемент структуры +pdfjs-current-outline-item-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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Миниатюра страницы { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Найти + .placeholder = Найти в документе… +pdfjs-find-previous-button = + .title = Найти предыдущее вхождение фразы в текст +pdfjs-find-previous-button-label = Назад +pdfjs-find-next-button = + .title = Найти следующее вхождение фразы в текст +pdfjs-find-next-button-label = Далее +pdfjs-find-highlight-checkbox = Подсветить все +pdfjs-find-match-case-checkbox-label = С учётом регистра +pdfjs-find-match-diacritics-checkbox-label = С учётом диакритических знаков +pdfjs-find-entire-word-checkbox-label = Слова целиком +pdfjs-find-reached-top = Достигнут верх документа, продолжено снизу +pdfjs-find-reached-bottom = Достигнут конец документа, продолжено сверху +# 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 } из { $total } совпадения + [few] { $current } из { $total } совпадений + *[many] { $current } из { $total } совпадений + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Более { $limit } совпадения + [few] Более { $limit } совпадений + *[many] Более { $limit } совпадений + } +pdfjs-find-not-found = Фраза не найдена + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = При загрузке PDF произошла ошибка. +pdfjs-invalid-file-error = Некорректный или повреждённый PDF-файл. +pdfjs-missing-file-error = PDF-файл отсутствует. +pdfjs-unexpected-response-error = Неожиданный ответ сервера. +pdfjs-rendering-error = При создании страницы произошла ошибка. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Аннотация { $type }] + +## Password + +pdfjs-password-label = Введите пароль, чтобы открыть этот PDF-файл. +pdfjs-password-invalid = Неверный пароль. Пожалуйста, попробуйте снова. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Отмена +pdfjs-web-fonts-disabled = Веб-шрифты отключены: не удалось задействовать встроенные PDF-шрифты. + +## Editing + +pdfjs-editor-free-text-button = + .title = Текст +pdfjs-editor-free-text-button-label = Текст +pdfjs-editor-ink-button = + .title = Рисовать +pdfjs-editor-ink-button-label = Рисовать +pdfjs-editor-stamp-button = + .title = Добавить или изменить изображения +pdfjs-editor-stamp-button-label = Добавить или изменить изображения +pdfjs-editor-highlight-button = + .title = Выделение +pdfjs-editor-highlight-button-label = Выделение +pdfjs-highlight-floating-button = + .title = Выделение +pdfjs-highlight-floating-button1 = + .title = Выделение + .aria-label = Выделение +pdfjs-highlight-floating-button-label = Выделение + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Удалить рисунок +pdfjs-editor-remove-freetext-button = + .title = Удалить текст +pdfjs-editor-remove-stamp-button = + .title = Удалить изображение +pdfjs-editor-remove-highlight-button = + .title = Удалить выделение + +## + +# 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 = Прозрачность +pdfjs-editor-stamp-add-image-button = + .title = Добавить изображение +pdfjs-editor-stamp-add-image-button-label = Добавить изображение +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Толщина +pdfjs-editor-free-highlight-thickness-title = + .title = Изменить толщину при выделении элементов, кроме текста +pdfjs-free-text = + .aria-label = Текстовый редактор +pdfjs-free-text-default-content = Начните вводить… +pdfjs-ink = + .aria-label = Редактор рисования +pdfjs-ink-canvas = + .aria-label = Созданное пользователем изображение + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Альтернативный текст +pdfjs-editor-alt-text-edit-button-label = Изменить альтернативный текст +pdfjs-editor-alt-text-dialog-label = Выберите вариант +pdfjs-editor-alt-text-dialog-description = Альтернативный текст помогает, когда люди не видят изображение или оно не загружается. +pdfjs-editor-alt-text-add-description-label = Добавить описание +pdfjs-editor-alt-text-add-description-description = Старайтесь составлять 1–2 предложения, описывающих предмет, обстановку или действия. +pdfjs-editor-alt-text-mark-decorative-label = Отметить как декоративное +pdfjs-editor-alt-text-mark-decorative-description = Используется для декоративных изображений, таких как рамки или водяные знаки. +pdfjs-editor-alt-text-cancel-button = Отменить +pdfjs-editor-alt-text-save-button = Сохранить +pdfjs-editor-alt-text-decorative-tooltip = Помечен как декоративный +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Например: «Молодой человек садится за стол, чтобы поесть» + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Левый верхний угол — изменить размер +pdfjs-editor-resizer-label-top-middle = Вверху посередине — изменить размер +pdfjs-editor-resizer-label-top-right = Верхний правый угол — изменить размер +pdfjs-editor-resizer-label-middle-right = В центре справа — изменить размер +pdfjs-editor-resizer-label-bottom-right = Нижний правый угол — изменить размер +pdfjs-editor-resizer-label-bottom-middle = Внизу посередине — изменить размер +pdfjs-editor-resizer-label-bottom-left = Нижний левый угол — изменить размер +pdfjs-editor-resizer-label-middle-left = В центре слева — изменить размер + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Цвет выделения +pdfjs-editor-colorpicker-button = + .title = Изменить цвет +pdfjs-editor-colorpicker-dropdown = + .aria-label = Выбор цвета +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 = Показать все diff --git a/static/pdf.js/locale/ru/viewer.properties b/static/pdf.js/locale/ru/viewer.properties deleted file mode 100644 index 22bcda44..00000000 --- a/static/pdf.js/locale/ru/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Предыдущая страница -previous_label=Предыдущая -next.title=Следующая страница -next_label=Следующая - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Страница -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=из {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} из {{pagesCount}}) - -zoom_out.title=Уменьшить -zoom_out_label=Уменьшить -zoom_in.title=Увеличить -zoom_in_label=Увеличить -zoom.title=Масштаб -presentation_mode.title=Перейти в режим презентации -presentation_mode_label=Режим презентации -open_file.title=Открыть файл -open_file_label=Открыть -print.title=Печать -print_label=Печать -save.title=Сохранить -save_label=Сохранить -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Загрузить -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Загрузить -bookmark1.title=Текущая страница (просмотр URL-адреса с текущей страницы) -bookmark1_label=Текущая страница -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Открыть в приложении -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Открыть в программе - -# Secondary toolbar and context menu -tools.title=Инструменты -tools_label=Инструменты -first_page.title=Перейти на первую страницу -first_page_label=Перейти на первую страницу -last_page.title=Перейти на последнюю страницу -last_page_label=Перейти на последнюю страницу -page_rotate_cw.title=Повернуть по часовой стрелке -page_rotate_cw_label=Повернуть по часовой стрелке -page_rotate_ccw.title=Повернуть против часовой стрелки -page_rotate_ccw_label=Повернуть против часовой стрелки - -cursor_text_select_tool.title=Включить Инструмент «Выделение текста» -cursor_text_select_tool_label=Инструмент «Выделение текста» -cursor_hand_tool.title=Включить Инструмент «Рука» -cursor_hand_tool_label=Инструмент «Рука» - -scroll_page.title=Использовать прокрутку страниц -scroll_page_label=Прокрутка страниц -scroll_vertical.title=Использовать вертикальную прокрутку -scroll_vertical_label=Вертикальная прокрутка -scroll_horizontal.title=Использовать горизонтальную прокрутку -scroll_horizontal_label=Горизонтальная прокрутка -scroll_wrapped.title=Использовать масштабируемую прокрутку -scroll_wrapped_label=Масштабируемая прокрутка - -spread_none.title=Не использовать режим разворотов страниц -spread_none_label=Без разворотов страниц -spread_odd.title=Развороты начинаются с нечётных номеров страниц -spread_odd_label=Нечётные страницы слева -spread_even.title=Развороты начинаются с чётных номеров страниц -spread_even_label=Чётные страницы слева - -# Document properties dialog box -document_properties.title=Свойства документа… -document_properties_label=Свойства документа… -document_properties_file_name=Имя файла: -document_properties_file_size=Размер файла: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} КБ ({{size_b}} байт) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} МБ ({{size_b}} байт) -document_properties_title=Заголовок: -document_properties_author=Автор: -document_properties_subject=Тема: -document_properties_keywords=Ключевые слова: -document_properties_creation_date=Дата создания: -document_properties_modification_date=Дата изменения: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Приложение: -document_properties_producer=Производитель PDF: -document_properties_version=Версия PDF: -document_properties_page_count=Число страниц: -document_properties_page_size=Размер страницы: -document_properties_page_size_unit_inches=дюймов -document_properties_page_size_unit_millimeters=мм -document_properties_page_size_orientation_portrait=книжная -document_properties_page_size_orientation_landscape=альбомная -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Быстрый просмотр в Web: -document_properties_linearized_yes=Да -document_properties_linearized_no=Нет -document_properties_close=Закрыть - -print_progress_message=Подготовка документа к печати… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Отмена - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Показать/скрыть боковую панель -toggle_sidebar_notification2.title=Показать/скрыть боковую панель (документ имеет содержание/вложения/слои) -toggle_sidebar_label=Показать/скрыть боковую панель -document_outline.title=Показать содержание документа (двойной щелчок, чтобы развернуть/свернуть все элементы) -document_outline_label=Содержание документа -attachments.title=Показать вложения -attachments_label=Вложения -layers.title=Показать слои (дважды щёлкните, чтобы сбросить все слои к состоянию по умолчанию) -layers_label=Слои -thumbs.title=Показать миниатюры -thumbs_label=Миниатюры -current_outline_item.title=Найти текущий элемент структуры -current_outline_item_label=Текущий элемент структуры -findbar.title=Найти в документе -findbar_label=Найти - -additional_layers=Дополнительные слои -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Страница {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Страница {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Миниатюра страницы {{page}} - -# Find panel button title and messages -find_input.title=Найти -find_input.placeholder=Найти в документе… -find_previous.title=Найти предыдущее вхождение фразы в текст -find_previous_label=Назад -find_next.title=Найти следующее вхождение фразы в текст -find_next_label=Далее -find_highlight=Подсветить все -find_match_case_label=С учётом регистра -find_match_diacritics_label=С учётом диакритических знаков -find_entire_word_label=Слова целиком -find_reached_top=Достигнут верх документа, продолжено снизу -find_reached_bottom=Достигнут конец документа, продолжено сверху -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} из {{total}} совпадения -find_match_count[two]={{current}} из {{total}} совпадений -find_match_count[few]={{current}} из {{total}} совпадений -find_match_count[many]={{current}} из {{total}} совпадений -find_match_count[other]={{current}} из {{total}} совпадений -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Более {{limit}} совпадений -find_match_count_limit[one]=Более {{limit}} совпадения -find_match_count_limit[two]=Более {{limit}} совпадений -find_match_count_limit[few]=Более {{limit}} совпадений -find_match_count_limit[many]=Более {{limit}} совпадений -find_match_count_limit[other]=Более {{limit}} совпадений -find_not_found=Фраза не найдена - -# Predefined zoom values -page_scale_width=По ширине страницы -page_scale_fit=По размеру страницы -page_scale_auto=Автоматически -page_scale_actual=Реальный размер -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=При загрузке PDF произошла ошибка. -invalid_file_error=Некорректный или повреждённый PDF-файл. -missing_file_error=PDF-файл отсутствует. -unexpected_response_error=Неожиданный ответ сервера. -rendering_error=При создании страницы произошла ошибка. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Аннотация {{type}}] -password_label=Введите пароль, чтобы открыть этот PDF-файл. -password_invalid=Неверный пароль. Пожалуйста, попробуйте снова. -password_ok=OK -password_cancel=Отмена - -printing_not_supported=Предупреждение: В этом браузере не полностью поддерживается печать. -printing_not_ready=Предупреждение: PDF не полностью загружен для печати. -web_fonts_disabled=Веб-шрифты отключены: не удалось задействовать встроенные PDF-шрифты. - -# Editor -editor_free_text2.title=Текст -editor_free_text2_label=Текст -editor_ink2.title=Рисовать -editor_ink2_label=Рисовать - -editor_stamp.title=Добавить изображение -editor_stamp_label=Добавить изображение - -editor_stamp1.title=Добавить или изменить изображения -editor_stamp1_label=Добавить или изменить изображения - -free_text2_default_content=Начните вводить… - -# Editor Parameters -editor_free_text_color=Цвет -editor_free_text_size=Размер -editor_ink_color=Цвет -editor_ink_thickness=Толщина -editor_ink_opacity=Прозрачность - -editor_stamp_add_image_label=Добавить изображение -editor_stamp_add_image.title=Добавить изображение - -# Editor aria -editor_free_text2_aria_label=Текстовый редактор -editor_ink2_aria_label=Редактор рисования -editor_ink_canvas_aria_label=Созданное пользователем изображение diff --git a/static/pdf.js/locale/sat/viewer.ftl b/static/pdf.js/locale/sat/viewer.ftl new file mode 100644 index 00000000..90f12a31 --- /dev/null +++ b/static/pdf.js/locale/sat/viewer.ftl @@ -0,0 +1,311 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = ᱩᱫᱩᱜ ᱥᱚᱫᱚᱨ ᱚᱵᱚᱥᱛᱟ ᱨᱮ ᱚᱛᱟᱭ ᱢᱮ +pdfjs-presentation-mode-button-label = ᱩᱫᱩᱜ ᱥᱚᱫᱚᱨ ᱚᱵᱚᱥᱛᱟ ᱨᱮ +pdfjs-open-file-button = + .title = ᱨᱮᱫ ᱡᱷᱤᱡᱽ ᱢᱮ +pdfjs-open-file-button-label = ᱡᱷᱤᱡᱽ ᱢᱮ +pdfjs-print-button = + .title = ᱪᱷᱟᱯᱟ +pdfjs-print-button-label = ᱪᱷᱟᱯᱟ +pdfjs-save-button = + .title = ᱥᱟᱺᱪᱟᱣ ᱢᱮ +pdfjs-save-button-label = ᱥᱟᱺᱪᱟᱣ ᱢᱮ +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = ᱰᱟᱣᱩᱱᱞᱚᱰ +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = ᱰᱟᱣᱩᱱᱞᱚᱰ +pdfjs-bookmark-button = + .title = ᱱᱤᱛᱚᱜᱟᱜ ᱥᱟᱦᱴᱟ (ᱱᱤᱛᱚᱜᱟᱜ ᱥᱟᱦᱴᱟ ᱠᱷᱚᱱ URL ᱫᱮᱠᱷᱟᱣ ᱢᱮ) +pdfjs-bookmark-button-label = ᱱᱤᱛᱚᱜᱟᱜ ᱥᱟᱦᱴᱟ +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = ᱮᱯ ᱨᱮ ᱡᱷᱤᱡᱽ ᱢᱮ +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-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 = ᱞᱤᱯᱴᱟᱣ ᱜᱩᱰᱨᱟᱹᱣ +pdfjs-spread-none-button = + .title = ᱟᱞᱚᱢ ᱡᱚᱲᱟᱣ ᱟ ᱥᱟᱦᱴᱟ ᱫᱚ ᱯᱟᱥᱱᱟᱣᱜᱼᱟ +pdfjs-spread-none-button-label = ᱯᱟᱥᱱᱟᱣ ᱵᱟᱹᱱᱩᱜᱼᱟ +pdfjs-spread-odd-button = + .title = ᱥᱟᱦᱴᱟ ᱯᱟᱥᱱᱟᱣ ᱡᱚᱲᱟᱣ ᱢᱮ ᱡᱟᱦᱟᱸ ᱫᱚ ᱚᱰᱼᱮᱞ ᱥᱟᱦᱴᱟᱠᱚ ᱥᱟᱞᱟᱜ ᱮᱛᱦᱚᱵᱚᱜ ᱠᱟᱱᱟ +pdfjs-spread-odd-button-label = ᱚᱰ ᱯᱟᱥᱱᱟᱣ +pdfjs-spread-even-button = + .title = ᱥᱟᱦᱴᱟ ᱯᱟᱥᱱᱟᱣ ᱡᱚᱲᱟᱣ ᱢᱮ ᱡᱟᱦᱟᱸ ᱫᱚ ᱤᱣᱮᱱᱼᱮᱞ ᱥᱟᱦᱴᱟᱠᱚ ᱥᱟᱞᱟᱜ ᱮᱛᱦᱚᱵᱚᱜ ᱠᱟᱱᱟ +pdfjs-spread-even-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 = ᱨᱮᱫᱽ ᱢᱟᱯ : +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } ᱵᱟᱭᱤᱴ ᱠᱚ) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } ᱵᱟᱭᱤᱴ ᱠᱚ) +pdfjs-document-properties-title = ᱧᱩᱛᱩᱢ : +pdfjs-document-properties-author = ᱚᱱᱚᱞᱤᱭᱟᱹ : +pdfjs-document-properties-subject = ᱵᱤᱥᱚᱭ : +pdfjs-document-properties-keywords = ᱠᱟᱹᱴᱷᱤ ᱥᱟᱵᱟᱫᱽ : +pdfjs-document-properties-creation-date = ᱛᱮᱭᱟᱨ ᱢᱟᱸᱦᱤᱛ : +pdfjs-document-properties-modification-date = ᱵᱚᱫᱚᱞ ᱦᱚᱪᱚ ᱢᱟᱹᱦᱤᱛ : +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = ᱯᱚᱴᱨᱮᱴ +pdfjs-document-properties-page-size-orientation-landscape = ᱞᱮᱱᱰᱥᱠᱮᱯ +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = ᱪᱤᱴᱷᱤ +pdfjs-document-properties-page-size-name-legal = ᱠᱟᱹᱱᱩᱱᱤ + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = ᱞᱚᱜᱚᱱ ᱣᱮᱵᱽ ᱧᱮᱞ : +pdfjs-document-properties-linearized-yes = ᱦᱚᱭ +pdfjs-document-properties-linearized-no = ᱵᱟᱝ +pdfjs-document-properties-close-button = ᱵᱚᱸᱫᱚᱭ ᱢᱮ + +## Print + +pdfjs-print-progress-message = ᱪᱷᱟᱯᱟ ᱞᱟᱹᱜᱤᱫ ᱫᱚᱞᱤᱞ ᱛᱮᱭᱟᱨᱚᱜ ᱠᱟᱱᱟ … +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = ᱵᱟᱹᱰᱨᱟᱹ +pdfjs-printing-not-supported = ᱦᱚᱥᱤᱭᱟᱨ : ᱪᱷᱟᱯᱟ ᱱᱚᱣᱟ ᱯᱟᱱᱛᱮᱭᱟᱜ ᱫᱟᱨᱟᱭ ᱛᱮ ᱯᱩᱨᱟᱹᱣ ᱵᱟᱭ ᱜᱚᱲᱚᱣᱟᱠᱟᱱᱟ ᱾ +pdfjs-printing-not-ready = ᱦᱩᱥᱤᱭᱟᱹᱨ : ᱪᱷᱟᱯᱟ ᱞᱟᱹᱜᱤᱫ PDF ᱯᱩᱨᱟᱹ ᱵᱟᱭ ᱞᱟᱫᱮ ᱟᱠᱟᱱᱟ ᱾ + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = ᱫᱷᱟᱨᱮᱵᱟᱨ ᱥᱮᱫ ᱩᱪᱟᱹᱲᱚᱜ ᱢᱮ +pdfjs-toggle-sidebar-notification-button = + .title = ᱫᱷᱟᱨᱮᱵᱟᱨ ᱥᱮᱫ ᱩᱪᱟᱹᱲᱚᱜ ᱢᱮ (ᱫᱚᱞᱤᱞ ᱨᱮ ᱟᱣᱴᱞᱟᱭᱤᱢ ᱢᱮᱱᱟᱜᱼᱟ/ᱞᱟᱪᱷᱟᱠᱚ/ᱯᱚᱨᱚᱛᱠᱚ) +pdfjs-toggle-sidebar-button-label = ᱫᱷᱟᱨᱮᱵᱟᱨ ᱥᱮᱫ ᱩᱪᱟᱹᱲᱚᱜ ᱢᱮ +pdfjs-document-outline-button = + .title = ᱫᱚᱞᱚᱞ ᱟᱣᱴᱞᱟᱭᱤᱱ ᱫᱮᱠᱷᱟᱣ ᱢᱮ (ᱡᱷᱚᱛᱚ ᱡᱤᱱᱤᱥᱠᱚ ᱵᱟᱨ ᱡᱮᱠᱷᱟ ᱚᱛᱟ ᱠᱮᱛᱮ ᱡᱷᱟᱹᱞ/ᱦᱩᱰᱤᱧ ᱪᱷᱚᱭ ᱢᱮ) +pdfjs-document-outline-button-label = ᱫᱚᱞᱤᱞ ᱛᱮᱭᱟᱨ ᱛᱮᱫ +pdfjs-attachments-button = + .title = ᱞᱟᱴᱷᱟ ᱥᱮᱞᱮᱫ ᱠᱚ ᱩᱫᱩᱜᱽ ᱢᱮ +pdfjs-attachments-button-label = ᱞᱟᱴᱷᱟ ᱥᱮᱞᱮᱫ ᱠᱚ +pdfjs-layers-button = + .title = ᱯᱚᱨᱚᱛ ᱫᱮᱠᱷᱟᱣ ᱢᱮ (ᱢᱩᱞ ᱡᱟᱭᱜᱟ ᱛᱮ ᱡᱷᱚᱛᱚ ᱯᱚᱨᱚᱛᱠᱚ ᱨᱤᱥᱮᱴ ᱞᱟᱹᱜᱤᱫ ᱵᱟᱨ ᱡᱮᱠᱷᱟ ᱚᱛᱚᱭ ᱢᱮ) +pdfjs-layers-button-label = ᱯᱚᱨᱚᱛᱠᱚ +pdfjs-thumbs-button = + .title = ᱪᱤᱛᱟᱹᱨ ᱟᱦᱞᱟ ᱠᱚ ᱩᱫᱩᱜᱽ ᱢᱮ +pdfjs-thumbs-button-label = ᱪᱤᱛᱟᱹᱨ ᱟᱦᱞᱟ ᱠᱚ +pdfjs-current-outline-item-button = + .title = ᱱᱤᱛᱚᱜᱟᱜ ᱟᱣᱴᱞᱟᱭᱤᱱ ᱡᱟᱱᱤᱥ ᱯᱟᱱᱛᱮ ᱢᱮ +pdfjs-current-outline-item-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 } ᱥᱟᱦᱴᱟ +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = { $page } ᱥᱟᱦᱴᱟ ᱨᱮᱭᱟᱜ ᱪᱤᱛᱟᱹᱨ ᱟᱦᱞᱟ + +## Find panel button title and messages + +pdfjs-find-input = + .title = ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ + .placeholder = ᱫᱚᱞᱤᱞ ᱨᱮ ᱯᱟᱱᱛᱮ ᱢᱮ … +pdfjs-find-previous-button = + .title = ᱟᱭᱟᱛ ᱦᱤᱸᱥ ᱨᱮᱭᱟᱜ ᱯᱟᱹᱦᱤᱞ ᱥᱮᱫᱟᱜ ᱚᱰᱚᱠ ᱧᱟᱢ ᱢᱮ +pdfjs-find-previous-button-label = ᱢᱟᱲᱟᱝᱟᱜ +pdfjs-find-next-button = + .title = ᱟᱭᱟᱛ ᱦᱤᱸᱥ ᱨᱮᱭᱟᱜ ᱤᱱᱟᱹ ᱛᱟᱭᱚᱢ ᱚᱰᱚᱠ ᱧᱟᱢ ᱢᱮ +pdfjs-find-next-button-label = ᱤᱱᱟᱹ ᱛᱟᱭᱚᱢ +pdfjs-find-highlight-checkbox = ᱡᱷᱚᱛᱚ ᱩᱫᱩᱜ ᱨᱟᱠᱟᱵ +pdfjs-find-match-case-checkbox-label = ᱡᱚᱲ ᱠᱟᱛᱷᱟ +pdfjs-find-match-diacritics-checkbox-label = ᱵᱤᱥᱮᱥᱚᱠ ᱠᱚ ᱢᱮᱲᱟᱣ ᱢᱮ +pdfjs-find-entire-word-checkbox-label = ᱡᱷᱚᱛᱚ ᱟᱹᱲᱟᱹᱠᱚ +pdfjs-find-reached-top = ᱫᱚᱞᱤᱞ ᱨᱮᱭᱟᱜ ᱪᱤᱴ ᱨᱮ ᱥᱮᱴᱮᱨ, ᱞᱟᱛᱟᱨ ᱠᱷᱚᱱ ᱞᱮᱛᱟᱲ +pdfjs-find-reached-bottom = ᱫᱚᱞᱤᱞ ᱨᱮᱭᱟᱜ ᱢᱩᱪᱟᱹᱫ ᱨᱮ ᱥᱮᱴᱮᱨ, ᱪᱚᱴ ᱠᱷᱚᱱ ᱞᱮᱛᱟᱲ +pdfjs-find-not-found = ᱛᱚᱯᱚᱞ ᱫᱚᱱᱚᱲ ᱵᱟᱝ ᱧᱟᱢ ᱞᱮᱱᱟ + +## 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 } ᱥᱟᱦᱴᱟ + +## Loading indicator messages + +pdfjs-loading-error = PDF ᱞᱟᱫᱮ ᱡᱚᱦᱚᱜ ᱢᱤᱫ ᱵᱷᱩᱞ ᱦᱩᱭ ᱮᱱᱟ ᱾ +pdfjs-invalid-file-error = ᱵᱟᱝ ᱵᱟᱛᱟᱣ ᱟᱨᱵᱟᱝᱠᱷᱟᱱ ᱰᱤᱜᱟᱹᱣ PDF ᱨᱮᱫᱽ ᱾ +pdfjs-missing-file-error = ᱟᱫᱟᱜ PDF ᱨᱮᱫᱽ ᱾ +pdfjs-unexpected-response-error = ᱵᱟᱝᱵᱩᱡᱷ ᱥᱚᱨᱵᱷᱚᱨ ᱛᱮᱞᱟ ᱾ +pdfjs-rendering-error = ᱥᱟᱦᱴᱟ ᱮᱢ ᱡᱚᱦᱚᱠ ᱢᱤᱫ ᱵᱷᱩᱞ ᱦᱩᱭ ᱮᱱᱟ ᱾ + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } ᱢᱚᱱᱛᱚ ᱮᱢ] + +## Password + +pdfjs-password-label = ᱱᱚᱶᱟ PDF ᱨᱮᱫᱽ ᱡᱷᱤᱡᱽ ᱞᱟᱹᱜᱤᱫ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱟᱫᱮᱨ ᱢᱮ ᱾ +pdfjs-password-invalid = ᱵᱷᱩᱞ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱾ ᱫᱟᱭᱟᱠᱟᱛᱮ ᱫᱩᱦᱲᱟᱹ ᱪᱮᱥᱴᱟᱭ ᱢᱮ ᱾ +pdfjs-password-ok-button = ᱴᱷᱤᱠ +pdfjs-password-cancel-button = ᱵᱟᱹᱰᱨᱟᱹ +pdfjs-web-fonts-disabled = ᱣᱮᱵᱽ ᱪᱤᱠᱤ ᱵᱟᱝ ᱦᱩᱭ ᱦᱚᱪᱚ ᱠᱟᱱᱟ : ᱵᱷᱤᱛᱤᱨ ᱛᱷᱟᱯᱚᱱ PDF ᱪᱤᱠᱤ ᱵᱮᱵᱷᱟᱨ ᱵᱟᱝ ᱦᱩᱭ ᱠᱮᱭᱟ ᱾ + +## Editing + +pdfjs-editor-free-text-button = + .title = ᱚᱞ +pdfjs-editor-free-text-button-label = ᱚᱞ +pdfjs-editor-ink-button = + .title = ᱛᱮᱭᱟᱨ +pdfjs-editor-ink-button-label = ᱛᱮᱭᱟᱨ +pdfjs-editor-stamp-button = + .title = ᱪᱤᱛᱟᱹᱨᱠᱚ ᱥᱮᱞᱮᱫ ᱥᱮ ᱥᱟᱯᱲᱟᱣ ᱢᱮ +pdfjs-editor-stamp-button-label = ᱪᱤᱛᱟᱹᱨᱠᱚ ᱥᱮᱞᱮᱫ ᱥᱮ ᱥᱟᱯᱲᱟᱣ ᱢᱮ +# 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 = ᱟᱨᱯᱟᱨ +pdfjs-editor-stamp-add-image-button = + .title = ᱪᱤᱛᱟᱹᱨ ᱥᱮᱞᱮᱫ ᱢᱮ +pdfjs-editor-stamp-add-image-button-label = ᱪᱤᱛᱟᱹᱨ ᱥᱮᱞᱮᱫ ᱢᱮ +pdfjs-free-text = + .aria-label = ᱚᱞ ᱥᱟᱯᱲᱟᱣᱤᱭᱟᱹ +pdfjs-free-text-default-content = ᱚᱞ ᱮᱛᱦᱚᱵ ᱢᱮ … +pdfjs-ink = + .aria-label = ᱛᱮᱭᱟᱨ ᱥᱟᱯᱲᱟᱣᱤᱭᱟᱹ +pdfjs-ink-canvas = + .aria-label = ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱛᱮᱭᱟᱨ ᱠᱟᱫ ᱪᱤᱛᱟᱹᱨ + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/sat/viewer.properties b/static/pdf.js/locale/sat/viewer.properties deleted file mode 100644 index b8c53998..00000000 --- a/static/pdf.js/locale/sat/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=ᱢᱟᱲᱟᱝ ᱥᱟᱦᱴᱟ -previous_label=ᱢᱟᱲᱟᱝᱟᱜ -next.title=ᱤᱱᱟᱹ ᱛᱟᱭᱚᱢ ᱥᱟᱦᱴᱟ -next_label=ᱤᱱᱟᱹ ᱛᱟᱭᱚᱢ - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=ᱥᱟᱦᱴᱟ -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=ᱨᱮᱭᱟᱜ {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} ᱠᱷᱚᱱ {{pagesCount}}) - -zoom_out.title=ᱦᱤᱲᱤᱧ ᱛᱮᱭᱟᱨ -zoom_out_label=ᱦᱤᱲᱤᱧ ᱛᱮᱭᱟᱨ -zoom_in.title=ᱢᱟᱨᱟᱝ ᱛᱮᱭᱟᱨ -zoom_in_label=ᱢᱟᱨᱟᱝ ᱛᱮᱭᱟᱨ -zoom.title=ᱡᱩᱢ -presentation_mode.title=ᱩᱫᱩᱜ ᱥᱚᱫᱚᱨ ᱚᱵᱚᱥᱛᱟ ᱨᱮ ᱚᱛᱟᱭ ᱢᱮ -presentation_mode_label=ᱩᱫᱩᱜ ᱥᱚᱫᱚᱨ ᱚᱵᱚᱥᱛᱟ ᱨᱮ -open_file.title=ᱨᱮᱫ ᱡᱷᱤᱡᱽ ᱢᱮ -open_file_label=ᱡᱷᱤᱡᱽ ᱢᱮ -print.title=ᱪᱷᱟᱯᱟ -print_label=ᱪᱷᱟᱯᱟ -save.title=ᱥᱟᱺᱪᱟᱣ ᱢᱮ -save_label=ᱥᱟᱺᱪᱟᱣ ᱢᱮ -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=ᱰᱟᱣᱩᱱᱞᱚᱰ -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=ᱰᱟᱣᱩᱱᱞᱚᱰ -bookmark1.title=ᱱᱤᱛᱚᱜᱟᱜ ᱥᱟᱦᱴᱟ (ᱱᱤᱛᱚᱜᱟᱜ ᱥᱟᱦᱴᱟ ᱠᱷᱚᱱ URL ᱫᱮᱠᱷᱟᱣ ᱢᱮ) -bookmark1_label=ᱱᱤᱛᱚᱜᱟᱜ ᱥᱟᱦᱴᱟ -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=ᱮᱯ ᱨᱮ ᱡᱷᱤᱡᱽ ᱢᱮ -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=ᱮᱯ ᱨᱮ ᱡᱷᱤᱡᱽ ᱢᱮ - -# Secondary toolbar and context menu -tools.title=ᱦᱟᱹᱛᱤᱭᱟᱹᱨ ᱠᱚ -tools_label=ᱦᱟᱹᱛᱤᱭᱟᱹᱨ ᱠᱚ -first_page.title=ᱯᱩᱭᱞᱩ ᱥᱟᱦᱴᱟ ᱥᱮᱫ ᱪᱟᱞᱟᱜ ᱢᱮ -first_page_label=ᱯᱩᱭᱞᱩ ᱥᱟᱦᱴᱟ ᱥᱮᱫ ᱪᱟᱞᱟᱜ ᱢᱮ -last_page.title=ᱢᱩᱪᱟᱹᱫ ᱥᱟᱦᱴᱟ ᱥᱮᱫ ᱪᱟᱞᱟᱜ ᱢᱮ -last_page_label=ᱢᱩᱪᱟᱹᱫ ᱥᱟᱦᱴᱟ ᱥᱮᱫ ᱪᱟᱞᱟᱜ ᱢᱮ -page_rotate_cw.title=ᱜᱷᱚᱰᱤ ᱦᱤᱥᱟᱹᱵ ᱛᱮ ᱟᱹᱪᱩᱨ -page_rotate_cw_label=ᱜᱷᱚᱰᱤ ᱦᱤᱥᱟᱹᱵ ᱛᱮ ᱟᱹᱪᱩᱨ -page_rotate_ccw.title=ᱜᱷᱚᱰᱤ ᱦᱤᱥᱟᱹᱵ ᱛᱮ ᱩᱞᱴᱟᱹ ᱟᱹᱪᱩᱨ -page_rotate_ccw_label=ᱜᱷᱚᱰᱤ ᱦᱤᱥᱟᱹᱵ ᱛᱮ ᱩᱞᱴᱟᱹ ᱟᱹᱪᱩᱨ - -cursor_text_select_tool.title=ᱚᱞ ᱵᱟᱪᱷᱟᱣ ᱦᱟᱹᱛᱤᱭᱟᱨ ᱮᱢ ᱪᱷᱚᱭ ᱢᱮ -cursor_text_select_tool_label=ᱚᱞ ᱵᱟᱪᱷᱟᱣ ᱦᱟᱹᱛᱤᱭᱟᱨ -cursor_hand_tool.title=ᱛᱤ ᱦᱟᱹᱛᱤᱭᱟᱨ ᱮᱢ ᱪᱷᱚᱭ ᱢᱮ -cursor_hand_tool_label=ᱛᱤ ᱦᱟᱹᱛᱤᱭᱟᱨ - -scroll_page.title=ᱥᱟᱦᱴᱟ ᱜᱩᱲᱟᱹᱣ ᱵᱮᱵᱷᱟᱨ ᱢᱮ -scroll_page_label=ᱥᱟᱦᱴᱟ ᱜᱩᱲᱟᱹᱣ -scroll_vertical.title=ᱥᱤᱫᱽ ᱜᱩᱲᱟᱹᱣ ᱵᱮᱵᱷᱟᱨ ᱢᱮ -scroll_vertical_label=ᱥᱤᱫᱽ ᱜᱩᱲᱟᱹᱣ -scroll_horizontal.title=ᱜᱤᱛᱤᱡ ᱛᱮ ᱜᱩᱲᱟᱹᱣ ᱵᱮᱵᱷᱟᱨ ᱢᱮ -scroll_horizontal_label=ᱜᱤᱛᱤᱡ ᱛᱮ ᱜᱩᱲᱟᱹᱣ -scroll_wrapped.title=ᱞᱤᱯᱴᱟᱹᱣ ᱜᱩᱰᱨᱟᱹᱣ ᱵᱮᱵᱷᱟᱨ ᱢᱮ -scroll_wrapped_label=ᱞᱤᱯᱴᱟᱣ ᱜᱩᱰᱨᱟᱹᱣ - -spread_none.title=ᱟᱞᱚᱢ ᱡᱚᱲᱟᱣ ᱟ ᱥᱟᱦᱴᱟ ᱫᱚ ᱯᱟᱥᱱᱟᱣᱜᱼᱟ -spread_none_label=ᱯᱟᱥᱱᱟᱣ ᱵᱟᱹᱱᱩᱜᱼᱟ -spread_odd.title=ᱥᱟᱦᱴᱟ ᱯᱟᱥᱱᱟᱣ ᱡᱚᱲᱟᱣ ᱢᱮ ᱡᱟᱦᱟᱸ ᱫᱚ ᱚᱰᱼᱮᱞ ᱥᱟᱦᱴᱟᱠᱚ ᱥᱟᱞᱟᱜ ᱮᱛᱦᱚᱵᱚᱜ ᱠᱟᱱᱟ -spread_odd_label=ᱚᱰ ᱯᱟᱥᱱᱟᱣ -spread_even.title=ᱥᱟᱦᱴᱟ ᱯᱟᱥᱱᱟᱣ ᱡᱚᱲᱟᱣ ᱢᱮ ᱡᱟᱦᱟᱸ ᱫᱚ ᱤᱣᱮᱱᱼᱮᱞ ᱥᱟᱦᱴᱟᱠᱚ ᱥᱟᱞᱟᱜ ᱮᱛᱦᱚᱵᱚᱜ ᱠᱟᱱᱟ -spread_even_label=ᱯᱟᱥᱱᱟᱣ ᱤᱣᱮᱱ - -# Document properties dialog box -document_properties.title=ᱫᱚᱞᱤᱞ ᱜᱩᱱᱠᱚ … -document_properties_label=ᱫᱚᱞᱤᱞ ᱜᱩᱱᱠᱚ … -document_properties_file_name=ᱨᱮᱫᱽ ᱧᱩᱛᱩᱢ : -document_properties_file_size=ᱨᱮᱫᱽ ᱢᱟᱯ : -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} ᱵᱟᱭᱤᱴ ᱠᱚ) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} ᱵᱟᱭᱤᱴ ᱠᱚ) -document_properties_title=ᱧᱩᱛᱩᱢ : -document_properties_author=ᱚᱱᱚᱞᱤᱭᱟᱹ : -document_properties_subject=ᱵᱤᱥᱚᱭ : -document_properties_keywords=ᱠᱟᱹᱴᱷᱤ ᱥᱟᱵᱟᱫᱽ : -document_properties_creation_date=ᱛᱮᱭᱟᱨ ᱢᱟᱸᱦᱤᱛ : -document_properties_modification_date=ᱵᱚᱫᱚᱞ ᱦᱚᱪᱚ ᱢᱟᱹᱦᱤᱛ : -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=ᱵᱮᱱᱟᱣᱤᱡ : -document_properties_producer=PDF ᱛᱮᱭᱟᱨ ᱚᱰᱚᱠᱤᱡ : -document_properties_version=PDF ᱵᱷᱟᱹᱨᱥᱚᱱ : -document_properties_page_count=ᱥᱟᱦᱴᱟ ᱞᱮᱠᱷᱟ : -document_properties_page_size=ᱥᱟᱦᱴᱟ ᱢᱟᱯ : -document_properties_page_size_unit_inches=ᱤᱧᱪ -document_properties_page_size_unit_millimeters=ᱢᱤᱢᱤ -document_properties_page_size_orientation_portrait=ᱯᱚᱴᱨᱮᱴ -document_properties_page_size_orientation_landscape=ᱞᱮᱱᱰᱥᱠᱮᱯ -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=ᱪᱤᱴᱷᱤ -document_properties_page_size_name_legal=ᱠᱟᱹᱱᱩᱱᱤ -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=ᱞᱚᱜᱚᱱ ᱣᱮᱵᱽ ᱧᱮᱞ : -document_properties_linearized_yes=ᱦᱚᱭ -document_properties_linearized_no=ᱵᱟᱝ -document_properties_close=ᱵᱚᱸᱫᱚᱭ ᱢᱮ - -print_progress_message=ᱪᱷᱟᱯᱟ ᱞᱟᱹᱜᱤᱫ ᱫᱚᱞᱤᱞ ᱛᱮᱭᱟᱨᱚᱜ ᱠᱟᱱᱟ … -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=ᱵᱟᱹᱰᱨᱟᱹ - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=ᱫᱷᱟᱨᱮᱵᱟᱨ ᱥᱮᱫ ᱩᱪᱟᱹᱲᱚᱜ ᱢᱮ -toggle_sidebar_notification2.title=ᱫᱷᱟᱨᱮᱵᱟᱨ ᱥᱮᱫ ᱩᱪᱟᱹᱲᱚᱜ ᱢᱮ (ᱫᱚᱞᱤᱞ ᱨᱮ ᱟᱣᱴᱞᱟᱭᱤᱢ ᱢᱮᱱᱟᱜᱼᱟ/ᱞᱟᱪᱷᱟᱠᱚ/ᱯᱚᱨᱚᱛᱠᱚ) -toggle_sidebar_label=ᱫᱷᱟᱨᱮᱵᱟᱨ ᱥᱮᱫ ᱩᱪᱟᱹᱲᱚᱜ ᱢᱮ -document_outline.title=ᱫᱚᱞᱚᱞ ᱟᱣᱴᱞᱟᱭᱤᱱ ᱫᱮᱠᱷᱟᱣ ᱢᱮ (ᱡᱷᱚᱛᱚ ᱡᱤᱱᱤᱥᱠᱚ ᱵᱟᱨ ᱡᱮᱠᱷᱟ ᱚᱛᱟ ᱠᱮᱛᱮ ᱡᱷᱟᱹᱞ/ᱦᱩᱰᱤᱧ ᱪᱷᱚᱭ ᱢᱮ) -document_outline_label=ᱫᱚᱞᱤᱞ ᱛᱮᱭᱟᱨ ᱛᱮᱫ -attachments.title=ᱞᱟᱴᱷᱟ ᱥᱮᱞᱮᱫ ᱠᱚ ᱩᱫᱩᱜᱽ ᱢᱮ -attachments_label=ᱞᱟᱴᱷᱟ ᱥᱮᱞᱮᱫ ᱠᱚ -layers.title=ᱯᱚᱨᱚᱛ ᱫᱮᱠᱷᱟᱣ ᱢᱮ (ᱢᱩᱞ ᱡᱟᱭᱜᱟ ᱛᱮ ᱡᱷᱚᱛᱚ ᱯᱚᱨᱚᱛᱠᱚ ᱨᱤᱥᱮᱴ ᱞᱟᱹᱜᱤᱫ ᱵᱟᱨ ᱡᱮᱠᱷᱟ ᱚᱛᱚᱭ ᱢᱮ) -layers_label=ᱯᱚᱨᱚᱛᱠᱚ -thumbs.title=ᱪᱤᱛᱟᱹᱨ ᱟᱦᱞᱟ ᱠᱚ ᱩᱫᱩᱜᱽ ᱢᱮ -thumbs_label=ᱪᱤᱛᱟᱹᱨ ᱟᱦᱞᱟ ᱠᱚ -current_outline_item.title=ᱱᱤᱛᱚᱜᱟᱜ ᱟᱣᱴᱞᱟᱭᱤᱱ ᱡᱟᱱᱤᱥ ᱯᱟᱱᱛᱮ ᱢᱮ -current_outline_item_label=ᱱᱤᱛᱚᱜᱟᱜ ᱟᱣᱴᱞᱟᱭᱤᱱ ᱡᱟᱱᱤᱥ -findbar.title=ᱫᱚᱞᱤᱞ ᱨᱮ ᱯᱟᱱᱛᱮ -findbar_label=ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ - -additional_layers=ᱵᱟᱹᱲᱛᱤ ᱯᱚᱨᱚᱛᱠᱚ -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark={{page}} ᱥᱟᱦᱴᱟ -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title={{page}} ᱥᱟᱦᱴᱟ -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas={{page}} ᱥᱟᱦᱴᱟ ᱨᱮᱭᱟᱜ ᱪᱤᱛᱟᱹᱨ ᱟᱦᱞᱟ - -# Find panel button title and messages -find_input.title=ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ -find_input.placeholder=ᱫᱚᱞᱤᱞ ᱨᱮ ᱯᱟᱱᱛᱮ ᱢᱮ … -find_previous.title=ᱟᱭᱟᱛ ᱦᱤᱸᱥ ᱨᱮᱭᱟᱜ ᱯᱟᱹᱦᱤᱞ ᱥᱮᱫᱟᱜ ᱚᱰᱚᱠ ᱧᱟᱢ ᱢᱮ -find_previous_label=ᱢᱟᱲᱟᱝᱟᱜ -find_next.title=ᱟᱭᱟᱛ ᱦᱤᱸᱥ ᱨᱮᱭᱟᱜ ᱤᱱᱟᱹ ᱛᱟᱭᱚᱢ ᱚᱰᱚᱠ ᱧᱟᱢ ᱢᱮ -find_next_label=ᱤᱱᱟᱹ ᱛᱟᱭᱚᱢ -find_highlight=ᱡᱷᱚᱛᱚ ᱩᱫᱩᱜ ᱨᱟᱠᱟᱵ -find_match_case_label=ᱡᱚᱲ ᱠᱟᱛᱷᱟ -find_match_diacritics_label=ᱵᱤᱥᱮᱥᱚᱠ ᱠᱚ ᱢᱮᱲᱟᱣ ᱢᱮ -find_entire_word_label=ᱡᱷᱚᱛᱚ ᱟᱹᱲᱟᱹᱠᱚ -find_reached_top=ᱫᱚᱞᱤᱞ ᱨᱮᱭᱟᱜ ᱪᱤᱴ ᱨᱮ ᱥᱮᱴᱮᱨ, ᱞᱟᱛᱟᱨ ᱠᱷᱚᱱ ᱞᱮᱛᱟᱲ -find_reached_bottom=ᱫᱚᱞᱤᱞ ᱨᱮᱭᱟᱜ ᱢᱩᱪᱟᱹᱫ ᱨᱮ ᱥᱮᱴᱮᱨ, ᱪᱚᱴ ᱠᱷᱚᱱ ᱞᱮᱛᱟᱲ -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} ᱨᱮᱭᱟᱜ {{total}} ᱡᱚᱲ -find_match_count[two]={{current}} ᱨᱮᱭᱟᱜ {{total}} ᱡᱚᱲᱠᱚ -find_match_count[few]={{current}} ᱨᱮᱭᱟᱜ {{total}} ᱡᱚᱲᱠᱚ -find_match_count[many]={{current}} ᱨᱮᱭᱟᱜ {{total}} ᱡᱚᱲᱠᱚ -find_match_count[other]={{current}} ᱨᱮᱭᱟᱜ {{total}} ᱡᱚᱲᱠᱚ -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]={{limit}} ᱡᱚᱲ ᱠᱚ ᱠᱷᱚᱱ ᱰᱷᱮᱨ -find_match_count_limit[one]={{limit}} ᱡᱚᱲ ᱠᱷᱚᱱ ᱰᱷᱮᱨ -find_match_count_limit[two]={{limit}} ᱡᱚᱲ ᱠᱚ ᱠᱷᱚᱱ ᱰᱷᱮᱨ -find_match_count_limit[few]={{limit}} ᱡᱚᱲ ᱠᱚ ᱠᱷᱚᱱ ᱰᱷᱮᱨ -find_match_count_limit[many]={{limit}} ᱡᱚᱲ ᱠᱚ ᱠᱷᱚᱱ ᱰᱷᱮᱨ -find_match_count_limit[other]={{limit}} ᱡᱚᱲ ᱠᱚ ᱠᱷᱚᱱ ᱰᱷᱮᱨ -find_not_found=ᱛᱚᱯᱚᱞ ᱫᱚᱱᱚᱲ ᱵᱟᱝ ᱧᱟᱢ ᱞᱮᱱᱟ - -# Predefined zoom values -page_scale_width=ᱥᱟᱦᱴᱟ ᱚᱥᱟᱨ -page_scale_fit=ᱥᱟᱦᱴᱟ ᱠᱷᱟᱯ -page_scale_auto=ᱟᱡᱼᱟᱡ ᱛᱮ ᱦᱩᱰᱤᱧ ᱞᱟᱹᱴᱩ ᱛᱮᱭᱟᱨ -page_scale_actual=ᱴᱷᱤᱠ ᱢᱟᱨᱟᱝ ᱛᱮᱫ -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=PDF ᱞᱟᱫᱮ ᱡᱚᱦᱚᱜ ᱢᱤᱫ ᱵᱷᱩᱞ ᱦᱩᱭ ᱮᱱᱟ ᱾ -invalid_file_error=ᱵᱟᱝ ᱵᱟᱛᱟᱣ ᱟᱨᱵᱟᱝᱠᱷᱟᱱ ᱰᱤᱜᱟᱹᱣ PDF ᱨᱮᱫᱽ ᱾ -missing_file_error=ᱟᱫᱟᱜ PDF ᱨᱮᱫᱽ ᱾ -unexpected_response_error=ᱵᱟᱝᱵᱩᱡᱷ ᱥᱚᱨᱵᱷᱚᱨ ᱛᱮᱞᱟ ᱾ -rendering_error=ᱥᱟᱦᱴᱟ ᱮᱢ ᱡᱚᱦᱚᱠ ᱢᱤᱫ ᱵᱷᱩᱞ ᱦᱩᱭ ᱮᱱᱟ ᱾ - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} ᱢᱚᱱᱛᱚ ᱮᱢ] -password_label=ᱱᱚᱶᱟ PDF ᱨᱮᱫᱽ ᱡᱷᱤᱡᱽ ᱞᱟᱹᱜᱤᱫ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱟᱫᱮᱨ ᱢᱮ ᱾ -password_invalid=ᱵᱷᱩᱞ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱾ ᱫᱟᱭᱟᱠᱟᱛᱮ ᱫᱩᱦᱲᱟᱹ ᱪᱮᱥᱴᱟᱭ ᱢᱮ ᱾ -password_ok=ᱴᱷᱤᱠ -password_cancel=ᱵᱟᱹᱰᱨᱟᱹ - -printing_not_supported=ᱦᱚᱥᱤᱭᱟᱨ : ᱪᱷᱟᱯᱟ ᱱᱚᱣᱟ ᱯᱟᱱᱛᱮᱭᱟᱜ ᱫᱟᱨᱟᱭ ᱛᱮ ᱯᱩᱨᱟᱹᱣ ᱵᱟᱭ ᱜᱚᱲᱚᱣᱟᱠᱟᱱᱟ ᱾ -printing_not_ready=ᱦᱩᱥᱤᱭᱟᱹᱨ : ᱪᱷᱟᱯᱟ ᱞᱟᱹᱜᱤᱫ PDF ᱯᱩᱨᱟᱹ ᱵᱟᱭ ᱞᱟᱫᱮ ᱟᱠᱟᱱᱟ ᱾ -web_fonts_disabled=ᱣᱮᱵᱽ ᱪᱤᱠᱤ ᱵᱟᱝ ᱦᱩᱭ ᱦᱚᱪᱚ ᱠᱟᱱᱟ : ᱵᱷᱤᱛᱤᱨ ᱛᱷᱟᱯᱚᱱ PDF ᱪᱤᱠᱤ ᱵᱮᱵᱷᱟᱨ ᱵᱟᱝ ᱦᱩᱭ ᱠᱮᱭᱟ ᱾ - -# Editor -editor_free_text2.title=ᱚᱞ -editor_free_text2_label=ᱚᱞ -editor_ink2.title=ᱛᱮᱭᱟᱨ -editor_ink2_label=ᱛᱮᱭᱟᱨ - -editor_stamp.title=ᱢᱤᱫᱴᱟᱝ ᱪᱤᱛᱟᱹᱨ ᱥᱮᱞᱮᱫ ᱢᱮ -editor_stamp_label=ᱢᱤᱫᱴᱟᱝ ᱪᱤᱛᱟᱹᱨ ᱥᱮᱞᱮᱫ ᱢᱮ - -editor_stamp1.title=ᱪᱤᱛᱟᱹᱨᱠᱚ ᱥᱮᱞᱮᱫ ᱥᱮ ᱥᱟᱯᱲᱟᱣ ᱢᱮ -editor_stamp1_label=ᱪᱤᱛᱟᱹᱨᱠᱚ ᱥᱮᱞᱮᱫ ᱥᱮ ᱥᱟᱯᱲᱟᱣ ᱢᱮ - -free_text2_default_content=ᱚᱞ ᱮᱛᱦᱚᱵ ᱢᱮ … - -# Editor Parameters -editor_free_text_color=ᱨᱚᱝ -editor_free_text_size=ᱢᱟᱯ -editor_ink_color=ᱨᱚᱝ -editor_ink_thickness=ᱢᱚᱴᱟ -editor_ink_opacity=ᱟᱨᱯᱟᱨ - -editor_stamp_add_image_label=ᱪᱤᱛᱟᱹᱨ ᱥᱮᱞᱮᱫ ᱢᱮ -editor_stamp_add_image.title=ᱪᱤᱛᱟᱹᱨ ᱥᱮᱞᱮᱫ ᱢᱮ - -# Editor aria -editor_free_text2_aria_label=ᱚᱞ ᱥᱟᱯᱲᱟᱣᱤᱭᱟᱹ -editor_ink2_aria_label=ᱛᱮᱭᱟᱨ ᱥᱟᱯᱲᱟᱣᱤᱭᱟᱹ -editor_ink_canvas_aria_label=ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱛᱮᱭᱟᱨ ᱠᱟᱫ ᱪᱤᱛᱟᱹᱨ diff --git a/static/pdf.js/locale/sc/viewer.ftl b/static/pdf.js/locale/sc/viewer.ftl new file mode 100644 index 00000000..a51943c9 --- /dev/null +++ b/static/pdf.js/locale/sc/viewer.ftl @@ -0,0 +1,290 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Pàgina anteriore +pdfjs-previous-button-label = S'ischeda chi b'est primu +pdfjs-next-button = + .title = Pàgina imbeniente +pdfjs-next-button-label = Imbeniente +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Pàgina +# 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 = de { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount }) +pdfjs-zoom-out-button = + .title = Impitica +pdfjs-zoom-out-button-label = Impitica +pdfjs-zoom-in-button = + .title = Ismànnia +pdfjs-zoom-in-button-label = Ismànnia +pdfjs-zoom-select = + .title = Ismànnia +pdfjs-presentation-mode-button = + .title = Cola a sa modalidade de presentatzione +pdfjs-presentation-mode-button-label = Modalidade de presentatzione +pdfjs-open-file-button = + .title = Aberi s'archìviu +pdfjs-open-file-button-label = Abertu +pdfjs-print-button = + .title = Imprenta +pdfjs-print-button-label = Imprenta +pdfjs-save-button = + .title = Sarva +pdfjs-save-button-label = Sarva +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Iscàrriga +# 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 = Iscàrriga +pdfjs-bookmark-button = + .title = Pàgina atuale (ammustra s’URL de sa pàgina atuale) +pdfjs-bookmark-button-label = Pàgina atuale +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Aberi in un’aplicatzione +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Aberi in un’aplicatzione + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Istrumentos +pdfjs-tools-button-label = Istrumentos +pdfjs-first-page-button = + .title = Bae a sa prima pàgina +pdfjs-first-page-button-label = Bae a sa prima pàgina +pdfjs-last-page-button = + .title = Bae a s'ùrtima pàgina +pdfjs-last-page-button-label = Bae a s'ùrtima pàgina +pdfjs-page-rotate-cw-button = + .title = Gira in sensu oràriu +pdfjs-page-rotate-cw-button-label = Gira in sensu oràriu +pdfjs-page-rotate-ccw-button = + .title = Gira in sensu anti-oràriu +pdfjs-page-rotate-ccw-button-label = Gira in sensu anti-oràriu +pdfjs-cursor-text-select-tool-button = + .title = Ativa s'aina de seletzione de testu +pdfjs-cursor-text-select-tool-button-label = Aina de seletzione de testu +pdfjs-cursor-hand-tool-button = + .title = Ativa s'aina de manu +pdfjs-cursor-hand-tool-button-label = Aina de manu +pdfjs-scroll-page-button = + .title = Imprea s'iscurrimentu de pàgina +pdfjs-scroll-page-button-label = Iscurrimentu de pàgina +pdfjs-scroll-vertical-button = + .title = Imprea s'iscurrimentu verticale +pdfjs-scroll-vertical-button-label = Iscurrimentu verticale +pdfjs-scroll-horizontal-button = + .title = Imprea s'iscurrimentu orizontale +pdfjs-scroll-horizontal-button-label = Iscurrimentu orizontale +pdfjs-scroll-wrapped-button = + .title = Imprea s'iscurrimentu continu +pdfjs-scroll-wrapped-button-label = Iscurrimentu continu + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Propiedades de su documentu… +pdfjs-document-properties-button-label = Propiedades de su documentu… +pdfjs-document-properties-file-name = Nòmine de s'archìviu: +pdfjs-document-properties-file-size = Mannària de s'archìviu: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Tìtulu: +pdfjs-document-properties-author = Autoria: +pdfjs-document-properties-subject = Ogetu: +pdfjs-document-properties-keywords = Faeddos crae: +pdfjs-document-properties-creation-date = Data de creatzione: +pdfjs-document-properties-modification-date = Data de modìfica: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Creatzione: +pdfjs-document-properties-producer = Produtore de PDF: +pdfjs-document-properties-version = Versione de PDF: +pdfjs-document-properties-page-count = Contu de pàginas: +pdfjs-document-properties-page-size = Mannària de sa pàgina: +pdfjs-document-properties-page-size-unit-inches = pòddighes +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = verticale +pdfjs-document-properties-page-size-orientation-landscape = orizontale +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 = Lìtera +pdfjs-document-properties-page-size-name-legal = Legale + +## 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 = Visualizatzione web lestra: +pdfjs-document-properties-linearized-yes = Eja +pdfjs-document-properties-linearized-no = Nono +pdfjs-document-properties-close-button = Serra + +## Print + +pdfjs-print-progress-message = Aparitzende s'imprenta de su documentu… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Cantzella +pdfjs-printing-not-supported = Atentzione: s'imprenta no est funtzionende de su totu in custu navigadore. +pdfjs-printing-not-ready = Atentzione: su PDF no est istadu carrigadu de su totu pro s'imprenta. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Ativa/disativa sa barra laterale +pdfjs-toggle-sidebar-notification-button = + .title = Ativa/disativa sa barra laterale (su documentu cuntenet un'ischema, alligongiados o livellos) +pdfjs-toggle-sidebar-button-label = Ativa/disativa sa barra laterale +pdfjs-document-outline-button-label = Ischema de su documentu +pdfjs-attachments-button = + .title = Ammustra alligongiados +pdfjs-attachments-button-label = Alliongiados +pdfjs-layers-button = + .title = Ammustra livellos (clic dòpiu pro ripristinare totu is livellos a s'istadu predefinidu) +pdfjs-layers-button-label = Livellos +pdfjs-thumbs-button = + .title = Ammustra miniaturas +pdfjs-thumbs-button-label = Miniaturas +pdfjs-current-outline-item-button = + .title = Agata s'elementu atuale de s'ischema +pdfjs-current-outline-item-button-label = Elementu atuale de s'ischema +pdfjs-findbar-button = + .title = Agata in su documentu +pdfjs-findbar-button-label = Agata +pdfjs-additional-layers = Livellos additzionales + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Pàgina { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura de sa pàgina { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Agata + .placeholder = Agata in su documentu… +pdfjs-find-previous-button = + .title = Agata s'ocurrèntzia pretzedente de sa fràsia +pdfjs-find-previous-button-label = S'ischeda chi b'est primu +pdfjs-find-next-button = + .title = Agata s'ocurrèntzia imbeniente de sa fràsia +pdfjs-find-next-button-label = Imbeniente +pdfjs-find-highlight-checkbox = Evidèntzia totu +pdfjs-find-match-case-checkbox-label = Distinghe intre majùsculas e minùsculas +pdfjs-find-match-diacritics-checkbox-label = Respeta is diacrìticos +pdfjs-find-entire-word-checkbox-label = Faeddos intreos +pdfjs-find-reached-top = S'est lòmpidu a su cumintzu de su documentu, si sighit dae su bàsciu +pdfjs-find-reached-bottom = Acabbu de su documentu, si sighit dae s'artu +pdfjs-find-not-found = Testu no agatadu + +## Predefined zoom values + +pdfjs-page-scale-auto = Ingrandimentu automàticu +pdfjs-page-scale-actual = Mannària reale +# 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 = Pàgina { $page } + +## Loading indicator messages + +pdfjs-loading-error = Faddina in sa càrriga de su PDF. +pdfjs-invalid-file-error = Archìviu PDF non vàlidu o corrùmpidu. +pdfjs-missing-file-error = Ammancat s'archìviu PDF. +pdfjs-unexpected-response-error = Risposta imprevista de su serbidore. +pdfjs-rendering-error = Faddina in sa visualizatzione de sa pàgina. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } + +## Password + +pdfjs-password-label = Inserta sa crae pro abèrrere custu archìviu PDF. +pdfjs-password-invalid = Sa crae no est curreta. Torra a nche proare. +pdfjs-password-ok-button = Andat bene +pdfjs-password-cancel-button = Cantzella +pdfjs-web-fonts-disabled = Is tipografias web sunt disativadas: is tipografias incrustadas a su PDF non podent èssere impreadas. + +## Editing + +pdfjs-editor-free-text-button = + .title = Testu +pdfjs-editor-free-text-button-label = Testu +pdfjs-editor-ink-button = + .title = Disinnu +pdfjs-editor-ink-button-label = Disinnu +pdfjs-editor-stamp-button = + .title = Agiunghe o modìfica immàgines +pdfjs-editor-stamp-button-label = Agiunghe o modìfica immàgines +# Editor Parameters +pdfjs-editor-free-text-color-input = Colore +pdfjs-editor-free-text-size-input = Mannària +pdfjs-editor-ink-color-input = Colore +pdfjs-editor-ink-thickness-input = Grussària +pdfjs-editor-stamp-add-image-button = + .title = Agiunghe un’immàgine +pdfjs-editor-stamp-add-image-button-label = Agiunghe un’immàgine +pdfjs-free-text = + .aria-label = Editore de testu +pdfjs-free-text-default-content = Cumintza a iscrìere… +pdfjs-ink = + .aria-label = Editore de disinnos +pdfjs-ink-canvas = + .aria-label = Immàgine creada dae s’utente + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/sc/viewer.properties b/static/pdf.js/locale/sc/viewer.properties deleted file mode 100644 index 4da24c12..00000000 --- a/static/pdf.js/locale/sc/viewer.properties +++ /dev/null @@ -1,258 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Pàgina anteriore -previous_label=S'ischeda chi b'est primu -next.title=Pàgina imbeniente -next_label=Imbeniente - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Pàgina -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=de {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} de {{pagesCount}}) - -zoom_out.title=Impitica -zoom_out_label=Impitica -zoom_in.title=Ismànnia -zoom_in_label=Ismànnia -zoom.title=Ismànnia -presentation_mode.title=Cola a sa modalidade de presentatzione -presentation_mode_label=Modalidade de presentatzione -open_file.title=Aberi s'archìviu -open_file_label=Abertu -print.title=Imprenta -print_label=Imprenta -save.title=Sarva -save_label=Sarva -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Iscàrriga -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Iscàrriga -bookmark1.title=Pàgina atuale (ammustra s’URL de sa pàgina atuale) -bookmark1_label=Pàgina atuale -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Aberi in un’aplicatzione -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Aberi in un’aplicatzione - -# Secondary toolbar and context menu -tools.title=Istrumentos -tools_label=Istrumentos -first_page.title=Bae a sa prima pàgina -first_page_label=Bae a sa prima pàgina -last_page.title=Bae a s'ùrtima pàgina -last_page_label=Bae a s'ùrtima pàgina -page_rotate_cw.title=Gira in sensu oràriu -page_rotate_cw_label=Gira in sensu oràriu -page_rotate_ccw.title=Gira in sensu anti-oràriu -page_rotate_ccw_label=Gira in sensu anti-oràriu - -cursor_text_select_tool.title=Ativa s'aina de seletzione de testu -cursor_text_select_tool_label=Aina de seletzione de testu -cursor_hand_tool.title=Ativa s'aina de manu -cursor_hand_tool_label=Aina de manu - -scroll_page.title=Imprea s'iscurrimentu de pàgina -scroll_page_label=Iscurrimentu de pàgina -scroll_vertical.title=Imprea s'iscurrimentu verticale -scroll_vertical_label=Iscurrimentu verticale -scroll_horizontal.title=Imprea s'iscurrimentu orizontale -scroll_horizontal_label=Iscurrimentu orizontale -scroll_wrapped.title=Imprea s'iscurrimentu continu -scroll_wrapped_label=Iscurrimentu continu - - -# Document properties dialog box -document_properties.title=Propiedades de su documentu… -document_properties_label=Propiedades de su documentu… -document_properties_file_name=Nòmine de s'archìviu: -document_properties_file_size=Mannària de s'archìviu: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Tìtulu: -document_properties_author=Autoria: -document_properties_subject=Ogetu: -document_properties_keywords=Faeddos crae: -document_properties_creation_date=Data de creatzione: -document_properties_modification_date=Data de modìfica: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Creatzione: -document_properties_producer=Produtore de PDF: -document_properties_version=Versione de PDF: -document_properties_page_count=Contu de pàginas: -document_properties_page_size=Mannària de sa pàgina: -document_properties_page_size_unit_inches=pòddighes -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=verticale -document_properties_page_size_orientation_landscape=orizontale -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Lìtera -document_properties_page_size_name_legal=Legale -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Visualizatzione web lestra: -document_properties_linearized_yes=Eja -document_properties_linearized_no=Nono -document_properties_close=Serra - -print_progress_message=Aparitzende s'imprenta de su documentu… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Cantzella - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Ativa/disativa sa barra laterale -toggle_sidebar_notification2.title=Ativa/disativa sa barra laterale (su documentu cuntenet un'ischema, alligongiados o livellos) -toggle_sidebar_label=Ativa/disativa sa barra laterale -document_outline_label=Ischema de su documentu -attachments.title=Ammustra alligongiados -attachments_label=Alliongiados -layers.title=Ammustra livellos (clic dòpiu pro ripristinare totu is livellos a s'istadu predefinidu) -layers_label=Livellos -thumbs.title=Ammustra miniaturas -thumbs_label=Miniaturas -current_outline_item.title=Agata s'elementu atuale de s'ischema -current_outline_item_label=Elementu atuale de s'ischema -findbar.title=Agata in su documentu -findbar_label=Agata - -additional_layers=Livellos additzionales -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Pàgina {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Pàgina {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura de sa pàgina {{page}} - -# Find panel button title and messages -find_input.title=Agata -find_input.placeholder=Agata in su documentu… -find_previous.title=Agata s'ocurrèntzia pretzedente de sa fràsia -find_previous_label=S'ischeda chi b'est primu -find_next.title=Agata s'ocurrèntzia imbeniente de sa fràsia -find_next_label=Imbeniente -find_highlight=Evidèntzia totu -find_match_case_label=Distinghe intre majùsculas e minùsculas -find_match_diacritics_label=Respeta is diacrìticos -find_entire_word_label=Faeddos intreos -find_reached_top=S'est lòmpidu a su cumintzu de su documentu, si sighit dae su bàsciu -find_reached_bottom=Acabbu de su documentu, si sighit dae s'artu -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} dae {{total}} currispondèntzia -find_match_count[two]={{current}} dae {{total}} currispondèntzias -find_match_count[few]={{current}} dae {{total}} currispondèntzias -find_match_count[many]={{current}} dae {{total}} currispondèntzias -find_match_count[other]={{current}} dae {{total}} currispondèntzias -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Prus de {{limit}} currispondèntzias -find_match_count_limit[one]=Prus de {{limit}} currispondèntzia -find_match_count_limit[two]=Prus de {{limit}} currispondèntzias -find_match_count_limit[few]=Prus de {{limit}} currispondèntzias -find_match_count_limit[many]=Prus de {{limit}} currispondèntzias -find_match_count_limit[other]=Prus de {{limit}} currispondèntzias -find_not_found=Testu no agatadu - -# Predefined zoom values -page_scale_auto=Ingrandimentu automàticu -page_scale_actual=Mannària reale -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Faddina in sa càrriga de su PDF. -invalid_file_error=Archìviu PDF non vàlidu o corrùmpidu. -missing_file_error=Ammancat s'archìviu PDF. -unexpected_response_error=Risposta imprevista de su serbidore. -rendering_error=Faddina in sa visualizatzione de sa pàgina. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -password_label=Inserta sa crae pro abèrrere custu archìviu PDF. -password_invalid=Sa crae no est curreta. Torra a nche proare. -password_ok=Andat bene -password_cancel=Cantzella - -printing_not_supported=Atentzione: s'imprenta no est funtzionende de su totu in custu navigadore. -printing_not_ready=Atentzione: su PDF no est istadu carrigadu de su totu pro s'imprenta. -web_fonts_disabled=Is tipografias web sunt disativadas: is tipografias incrustadas a su PDF non podent èssere impreadas. - -# Editor -editor_free_text2.title=Testu -editor_free_text2_label=Testu -editor_ink2.title=Disinnu -editor_ink2_label=Disinnu - -editor_stamp_label=Agiunghe un’immàgine - -editor_stamp1.title=Agiunghe o modìfica immàgines -editor_stamp1_label=Agiunghe o modìfica immàgines - -free_text2_default_content=Cumintza a iscrìere… - -# Editor Parameters -editor_free_text_color=Colore -editor_free_text_size=Mannària -editor_ink_color=Colore -editor_ink_thickness=Grussària - -editor_stamp_add_image_label=Agiunghe un’immàgine -editor_stamp_add_image.title=Agiunghe un’immàgine - -# Editor aria -editor_free_text2_aria_label=Editore de testu -editor_ink2_aria_label=Editore de disinnos -editor_ink_canvas_aria_label=Immàgine creada dae s’utente diff --git a/static/pdf.js/locale/scn/viewer.ftl b/static/pdf.js/locale/scn/viewer.ftl new file mode 100644 index 00000000..a3c7c038 --- /dev/null +++ b/static/pdf.js/locale/scn/viewer.ftl @@ -0,0 +1,74 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-zoom-out-button = + .title = Cchiù nicu +pdfjs-zoom-out-button-label = Cchiù nicu +pdfjs-zoom-in-button = + .title = Cchiù granni +pdfjs-zoom-in-button-label = Cchiù granni + +## Secondary toolbar and context menu + + +## Document properties dialog + + +## 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 + + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = Vista web lesta: +pdfjs-document-properties-linearized-yes = Se + +## Print + +pdfjs-print-progress-close-button = Sfai + +## Tooltips and alt text for side panel toolbar buttons + + +## Thumbnails panel item (tooltip and alt text for images) + + +## Find panel button title and messages + + +## Predefined zoom values + +pdfjs-page-scale-width = Larghizza dâ pàggina + +## PDF page + + +## Loading indicator messages + + +## Annotations + + +## Password + +pdfjs-password-cancel-button = Sfai + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/scn/viewer.properties b/static/pdf.js/locale/scn/viewer.properties deleted file mode 100644 index e9a650a9..00000000 --- a/static/pdf.js/locale/scn/viewer.properties +++ /dev/null @@ -1,101 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. - -zoom_out.title=Cchiù nicu -zoom_out_label=Cchiù nicu -zoom_in.title=Cchiù granni -zoom_in_label=Cchiù granni - -# Secondary toolbar and context menu - - - - -# Document properties dialog box -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Vista web lesta: -document_properties_linearized_yes=Se - -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_close=Sfai - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. - -# Find panel button title and messages -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. - -# Error panel labels -# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be -# replaced by the PDF.JS version and build ID. -# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an -# english string describing the error. -# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack -# trace. -# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename -# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number - -# Predefined zoom values -page_scale_width=Larghizza dâ pàggina -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. - -# Loading indicator messages - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -password_cancel=Sfai - diff --git a/static/pdf.js/locale/sco/viewer.ftl b/static/pdf.js/locale/sco/viewer.ftl new file mode 100644 index 00000000..6f71c47a --- /dev/null +++ b/static/pdf.js/locale/sco/viewer.ftl @@ -0,0 +1,264 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Page Afore +pdfjs-previous-button-label = Previous +pdfjs-next-button = + .title = Page Efter +pdfjs-next-button-label = Neist +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Page +# 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 = o { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } o { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zoom Oot +pdfjs-zoom-out-button-label = Zoom Oot +pdfjs-zoom-in-button = + .title = Zoom In +pdfjs-zoom-in-button-label = Zoom In +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Flit tae Presentation Mode +pdfjs-presentation-mode-button-label = Presentation Mode +pdfjs-open-file-button = + .title = Open File +pdfjs-open-file-button-label = Open +pdfjs-print-button = + .title = Prent +pdfjs-print-button-label = Prent + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Tools +pdfjs-tools-button-label = Tools +pdfjs-first-page-button = + .title = Gang tae First Page +pdfjs-first-page-button-label = Gang tae First Page +pdfjs-last-page-button = + .title = Gang tae Lest Page +pdfjs-last-page-button-label = Gang tae Lest Page +pdfjs-page-rotate-cw-button = + .title = Rotate Clockwise +pdfjs-page-rotate-cw-button-label = Rotate Clockwise +pdfjs-page-rotate-ccw-button = + .title = Rotate Coonterclockwise +pdfjs-page-rotate-ccw-button-label = Rotate Coonterclockwise +pdfjs-cursor-text-select-tool-button = + .title = Enable Text Walin Tool +pdfjs-cursor-text-select-tool-button-label = Text Walin Tool +pdfjs-cursor-hand-tool-button = + .title = Enable Haun Tool +pdfjs-cursor-hand-tool-button-label = Haun Tool +pdfjs-scroll-vertical-button = + .title = Yaise Vertical Scrollin +pdfjs-scroll-vertical-button-label = Vertical Scrollin +pdfjs-scroll-horizontal-button = + .title = Yaise Horizontal Scrollin +pdfjs-scroll-horizontal-button-label = Horizontal Scrollin +pdfjs-scroll-wrapped-button = + .title = Yaise Wrapped Scrollin +pdfjs-scroll-wrapped-button-label = Wrapped Scrollin +pdfjs-spread-none-button = + .title = Dinnae jyn page spreids +pdfjs-spread-none-button-label = Nae Spreids +pdfjs-spread-odd-button = + .title = Jyn page spreids stertin wi odd-numbered pages +pdfjs-spread-odd-button-label = Odd Spreids +pdfjs-spread-even-button = + .title = Jyn page spreids stertin wi even-numbered pages +pdfjs-spread-even-button-label = Even Spreids + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Document Properties… +pdfjs-document-properties-button-label = Document Properties… +pdfjs-document-properties-file-name = File nemme: +pdfjs-document-properties-file-size = File size: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Title: +pdfjs-document-properties-author = Author: +pdfjs-document-properties-subject = Subjeck: +pdfjs-document-properties-keywords = Keywirds: +pdfjs-document-properties-creation-date = Date o Makkin: +pdfjs-document-properties-modification-date = Date o Chynges: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Makker: +pdfjs-document-properties-producer = PDF Producer: +pdfjs-document-properties-version = PDF Version: +pdfjs-document-properties-page-count = Page Coont: +pdfjs-document-properties-page-size = Page Size: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +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 = Letter +pdfjs-document-properties-page-size-name-legal = 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 = Fast Wab View: +pdfjs-document-properties-linearized-yes = Aye +pdfjs-document-properties-linearized-no = Naw +pdfjs-document-properties-close-button = Sneck + +## Print + +pdfjs-print-progress-message = Reddin document fur prentin… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Stap +pdfjs-printing-not-supported = Tak tent: Prentin isnae richt supportit by this stravaiger. +pdfjs-printing-not-ready = Tak tent: The PDF isnae richt loadit fur prentin. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Toggle Sidebaur +pdfjs-toggle-sidebar-notification-button = + .title = Toggle Sidebaur (document conteens ootline/attachments/layers) +pdfjs-toggle-sidebar-button-label = Toggle Sidebaur +pdfjs-document-outline-button = + .title = Kythe Document Ootline (double-click fur tae oot-fauld/in-fauld aw items) +pdfjs-document-outline-button-label = Document Ootline +pdfjs-attachments-button = + .title = Kythe Attachments +pdfjs-attachments-button-label = Attachments +pdfjs-layers-button = + .title = Kythe Layers (double-click fur tae reset aw layers tae the staunart state) +pdfjs-layers-button-label = Layers +pdfjs-thumbs-button = + .title = Kythe Thumbnails +pdfjs-thumbs-button-label = Thumbnails +pdfjs-current-outline-item-button = + .title = Find Current Ootline Item +pdfjs-current-outline-item-button-label = Current Ootline Item +pdfjs-findbar-button = + .title = Find in Document +pdfjs-findbar-button-label = Find +pdfjs-additional-layers = Mair Layers + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Page { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Thumbnail o Page { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Find + .placeholder = Find in document… +pdfjs-find-previous-button = + .title = Airt oot the last time this phrase occurred +pdfjs-find-previous-button-label = Previous +pdfjs-find-next-button = + .title = Airt oot the neist time this phrase occurs +pdfjs-find-next-button-label = Neist +pdfjs-find-highlight-checkbox = Highlicht aw +pdfjs-find-match-case-checkbox-label = Match case +pdfjs-find-entire-word-checkbox-label = Hale Wirds +pdfjs-find-reached-top = Raxed tap o document, went on fae the dowp end +pdfjs-find-reached-bottom = Raxed end o document, went on fae the tap +pdfjs-find-not-found = Phrase no fund + +## Predefined zoom values + +pdfjs-page-scale-width = Page Width +pdfjs-page-scale-fit = Page Fit +pdfjs-page-scale-auto = Automatic Zoom +pdfjs-page-scale-actual = Actual Size +# 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 { $page } + +## Loading indicator messages + +pdfjs-loading-error = An mishanter tuik place while loadin the PDF. +pdfjs-invalid-file-error = No suithfest or camshauchlet PDF file. +pdfjs-missing-file-error = PDF file tint. +pdfjs-unexpected-response-error = Unexpectit server repone. +pdfjs-rendering-error = A mishanter tuik place while renderin the page. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Annotation] + +## Password + +pdfjs-password-label = Inpit the passwird fur tae open this PDF file. +pdfjs-password-invalid = Passwird no suithfest. Gonnae gie it anither shot. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Stap +pdfjs-web-fonts-disabled = Wab fonts are disabled: cannae yaise embeddit PDF fonts. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/sco/viewer.properties b/static/pdf.js/locale/sco/viewer.properties deleted file mode 100644 index 81203d10..00000000 --- a/static/pdf.js/locale/sco/viewer.properties +++ /dev/null @@ -1,226 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Page Afore -previous_label=Previous -next.title=Page Efter -next_label=Neist - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Page -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=o {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} o {{pagesCount}}) - -zoom_out.title=Zoom Oot -zoom_out_label=Zoom Oot -zoom_in.title=Zoom In -zoom_in_label=Zoom In -zoom.title=Zoom -presentation_mode.title=Flit tae Presentation Mode -presentation_mode_label=Presentation Mode -open_file.title=Open File -open_file_label=Open -print.title=Prent -print_label=Prent - -# Secondary toolbar and context menu -tools.title=Tools -tools_label=Tools -first_page.title=Gang tae First Page -first_page_label=Gang tae First Page -last_page.title=Gang tae Lest Page -last_page_label=Gang tae Lest Page -page_rotate_cw.title=Rotate Clockwise -page_rotate_cw_label=Rotate Clockwise -page_rotate_ccw.title=Rotate Coonterclockwise -page_rotate_ccw_label=Rotate Coonterclockwise - -cursor_text_select_tool.title=Enable Text Walin Tool -cursor_text_select_tool_label=Text Walin Tool -cursor_hand_tool.title=Enable Haun Tool -cursor_hand_tool_label=Haun Tool - -scroll_vertical.title=Yaise Vertical Scrollin -scroll_vertical_label=Vertical Scrollin -scroll_horizontal.title=Yaise Horizontal Scrollin -scroll_horizontal_label=Horizontal Scrollin -scroll_wrapped.title=Yaise Wrapped Scrollin -scroll_wrapped_label=Wrapped Scrollin - -spread_none.title=Dinnae jyn page spreids -spread_none_label=Nae Spreids -spread_odd.title=Jyn page spreids stertin wi odd-numbered pages -spread_odd_label=Odd Spreids -spread_even.title=Jyn page spreids stertin wi even-numbered pages -spread_even_label=Even Spreids - -# Document properties dialog box -document_properties.title=Document Properties… -document_properties_label=Document Properties… -document_properties_file_name=File nemme: -document_properties_file_size=File size: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Title: -document_properties_author=Author: -document_properties_subject=Subjeck: -document_properties_keywords=Keywirds: -document_properties_creation_date=Date o Makkin: -document_properties_modification_date=Date o Chynges: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Makker: -document_properties_producer=PDF Producer: -document_properties_version=PDF Version: -document_properties_page_count=Page Coont: -document_properties_page_size=Page Size: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=portrait -document_properties_page_size_orientation_landscape=landscape -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Fast Wab View: -document_properties_linearized_yes=Aye -document_properties_linearized_no=Naw -document_properties_close=Sneck - -print_progress_message=Reddin document fur prentin… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Stap - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Toggle Sidebaur -toggle_sidebar_notification2.title=Toggle Sidebaur (document conteens ootline/attachments/layers) -toggle_sidebar_label=Toggle Sidebaur -document_outline.title=Kythe Document Ootline (double-click fur tae oot-fauld/in-fauld aw items) -document_outline_label=Document Ootline -attachments.title=Kythe Attachments -attachments_label=Attachments -layers.title=Kythe Layers (double-click fur tae reset aw layers tae the staunart state) -layers_label=Layers -thumbs.title=Kythe Thumbnails -thumbs_label=Thumbnails -current_outline_item.title=Find Current Ootline Item -current_outline_item_label=Current Ootline Item -findbar.title=Find in Document -findbar_label=Find - -additional_layers=Mair Layers -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Page {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Page {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Thumbnail o Page {{page}} - -# Find panel button title and messages -find_input.title=Find -find_input.placeholder=Find in document… -find_previous.title=Airt oot the last time this phrase occurred -find_previous_label=Previous -find_next.title=Airt oot the neist time this phrase occurs -find_next_label=Neist -find_highlight=Highlicht aw -find_match_case_label=Match case -find_entire_word_label=Hale Wirds -find_reached_top=Raxed tap o document, went on fae the dowp end -find_reached_bottom=Raxed end o document, went on fae the tap -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} o {{total}} match -find_match_count[two]={{current}} o {{total}} matches -find_match_count[few]={{current}} o {{total}} matches -find_match_count[many]={{current}} o {{total}} matches -find_match_count[other]={{current}} o {{total}} matches -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Mair nor {{limit}} matches -find_match_count_limit[one]=Mair nor {{limit}} match -find_match_count_limit[two]=Mair nor {{limit}} matches -find_match_count_limit[few]=Mair nor {{limit}} matches -find_match_count_limit[many]=Mair nor {{limit}} matches -find_match_count_limit[other]=Mair nor {{limit}} matches -find_not_found=Phrase no fund - -# Predefined zoom values -page_scale_width=Page Width -page_scale_fit=Page Fit -page_scale_auto=Automatic Zoom -page_scale_actual=Actual Size -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=An mishanter tuik place while loadin the PDF. -invalid_file_error=No suithfest or camshauchlet PDF file. -missing_file_error=PDF file tint. -unexpected_response_error=Unexpectit server repone. - -rendering_error=A mishanter tuik place while renderin the page. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Annotation] -password_label=Inpit the passwird fur tae open this PDF file. -password_invalid=Passwird no suithfest. Gonnae gie it anither shot. -password_ok=OK -password_cancel=Stap - -printing_not_supported=Tak tent: Prentin isnae richt supportit by this stravaiger. -printing_not_ready=Tak tent: The PDF isnae richt loadit fur prentin. -web_fonts_disabled=Wab fonts are disabled: cannae yaise embeddit PDF fonts. - diff --git a/static/pdf.js/locale/si/viewer.ftl b/static/pdf.js/locale/si/viewer.ftl new file mode 100644 index 00000000..28387298 --- /dev/null +++ b/static/pdf.js/locale/si/viewer.ftl @@ -0,0 +1,253 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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: +# $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-presentation-mode-button = + .title = සමර්පණ ප්‍රකාරය වෙත මාරුවන්න +pdfjs-presentation-mode-button-label = සමර්පණ ප්‍රකාරය +pdfjs-open-file-button = + .title = ගොනුව අරින්න +pdfjs-open-file-button-label = අරින්න +pdfjs-print-button = + .title = මුද්‍රණය +pdfjs-print-button-label = මුද්‍රණය +pdfjs-save-button = + .title = සුරකින්න +pdfjs-save-button-label = සුරකින්න +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = බාගන්න +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = බාගන්න +pdfjs-bookmark-button-label = පවතින පිටුව +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = යෙදුමෙහි අරින්න +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-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-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 = තිරස් අනුචලනය + +## Document properties dialog + +pdfjs-document-properties-button = + .title = ලේඛනයේ ගුණාංග… +pdfjs-document-properties-button-label = ලේඛනයේ ගුණාංග… +pdfjs-document-properties-file-name = ගොනුවේ නම: +pdfjs-document-properties-file-size = ගොනුවේ ප්‍රමාණය: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = කි.බ. { $size_kb } (බයිට { $size_b }) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = මෙ.බ. { $size_mb } (බයිට { $size_b }) +pdfjs-document-properties-title = සිරැසිය: +pdfjs-document-properties-author = කතෘ: +pdfjs-document-properties-subject = මාතෘකාව: +pdfjs-document-properties-keywords = මූල පද: +pdfjs-document-properties-creation-date = සෑදූ දිනය: +pdfjs-document-properties-modification-date = සංශෝධිත දිනය: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = නිර්මාතෘ: +pdfjs-document-properties-producer = පීඩීඑෆ් සම්පාදක: +pdfjs-document-properties-version = පීඩීඑෆ් අනුවාදය: +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 = සිරස් +pdfjs-document-properties-page-size-orientation-landscape = තිරස් +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width }×{ $height }{ $unit }{ $name }{ $orientation } + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = වේගවත් වියමන දැක්ම: +pdfjs-document-properties-linearized-yes = ඔව් +pdfjs-document-properties-linearized-no = නැහැ +pdfjs-document-properties-close-button = වසන්න + +## Print + +pdfjs-print-progress-message = මුද්‍රණය සඳහා ලේඛනය සූදානම් වෙමින්… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = අවලංගු කරන්න +pdfjs-printing-not-supported = අවවාදයයි: මෙම අතිරික්සුව මුද්‍රණය සඳහා හොඳින් සහාය නොදක්වයි. +pdfjs-printing-not-ready = අවවාදයයි: මුද්‍රණයට පීඩීඑෆ් ගොනුව සම්පූර්ණයෙන් පූරණය වී නැත. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-document-outline-button-label = ලේඛනයේ වටසන +pdfjs-attachments-button = + .title = ඇමුණුම් පෙන්වන්න +pdfjs-attachments-button-label = ඇමුණුම් +pdfjs-layers-button = + .title = ස්තර පෙන්වන්න (සියළු ස්තර පෙරනිමි තත්‍වයට යළි සැකසීමට දෙවරක් ඔබන්න) +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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = පිටුවේ සිඟිත රූව { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = සොයන්න + .placeholder = ලේඛනයේ සොයන්න… +pdfjs-find-previous-button = + .title = මෙම වැකිකඩ කලින් යෙදුණු ස්ථානය සොයන්න +pdfjs-find-previous-button-label = කලින් +pdfjs-find-next-button = + .title = මෙම වැකිකඩ ඊළඟට යෙදෙන ස්ථානය සොයන්න +pdfjs-find-next-button-label = ඊළඟ +pdfjs-find-highlight-checkbox = සියල්ල උද්දීපනය +pdfjs-find-entire-word-checkbox-label = සමස්ත වචන +pdfjs-find-reached-top = ලේඛනයේ මුදුනට ළඟා විය, පහළ සිට ඉහළට +pdfjs-find-reached-bottom = ලේඛනයේ අවසානයට ළඟා විය, ඉහළ සිට පහළට +pdfjs-find-not-found = වැකිකඩ හමු නොවිණි + +## Predefined zoom values + +pdfjs-page-scale-width = පිටුවේ පළල +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 } + +## Loading indicator messages + +pdfjs-loading-error = පීඩීඑෆ් පූරණය කිරීමේදී දෝෂයක් සිදු විය. +pdfjs-invalid-file-error = වලංගු නොවන හෝ හානිවූ පීඩීඑෆ් ගොනුවකි. +pdfjs-missing-file-error = මඟහැරුණු පීඩීඑෆ් ගොනුවකි. +pdfjs-unexpected-response-error = අනපේක්‍ෂිත සේවාදායක ප්‍රතිචාරයකි. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } + +## Password + +pdfjs-password-label = මෙම පීඩීඑෆ් ගොනුව විවෘත කිරීමට මුරපදය යොදන්න. +pdfjs-password-invalid = වැරදි මුරපදයකි. නැවත උත්සාහ කරන්න. +pdfjs-password-ok-button = හරි +pdfjs-password-cancel-button = අවලංගු +pdfjs-web-fonts-disabled = වියමන අකුරු අබලයි: පීඩීඑෆ් වෙත කාවැද්දූ රුවකුරු භාවිතා කළ නොහැකිය. + +## Editing + +pdfjs-editor-free-text-button = + .title = පෙළ +pdfjs-editor-free-text-button-label = පෙළ +pdfjs-editor-ink-button = + .title = අඳින්න +pdfjs-editor-ink-button-label = අඳින්න +# 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-free-text = + .aria-label = වදන් සකසනය +pdfjs-free-text-default-content = ලිවීීම අරඹන්න… + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/si/viewer.properties b/static/pdf.js/locale/si/viewer.properties deleted file mode 100644 index 05dde248..00000000 --- a/static/pdf.js/locale/si/viewer.properties +++ /dev/null @@ -1,228 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=කලින් පිටුව -previous_label=කලින් -next.title=ඊළඟ පිටුව -next_label=ඊළඟ - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=පිටුව -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} / {{pagesCount}}) - -zoom_out.title=කුඩාලනය -zoom_out_label=කුඩාලනය -zoom_in.title=විශාලනය -zoom_in_label=විශාලනය -zoom.title=විශාල කරන්න -presentation_mode.title=සමර්පණ ප්‍රකාරය වෙත මාරුවන්න -presentation_mode_label=සමර්පණ ප්‍රකාරය -open_file.title=ගොනුව අරින්න -open_file_label=අරින්න -print.title=මුද්‍රණය -print_label=මුද්‍රණය -save.title=සුරකින්න -save_label=සුරකින්න -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=බාගන්න -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=බාගන්න -bookmark1_label=පවතින පිටුව -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=යෙදුමෙහි අරින්න -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=යෙදුමෙහි අරින්න - -# Secondary toolbar and context menu -tools.title=මෙවලම් -tools_label=මෙවලම් -first_page.title=මුල් පිටුවට යන්න -first_page_label=මුල් පිටුවට යන්න -last_page.title=අවසන් පිටුවට යන්න -last_page_label=අවසන් පිටුවට යන්න - -cursor_text_select_tool.title=පෙළ තේරීමේ මෙවලම සබල කරන්න -cursor_text_select_tool_label=පෙළ තේරීමේ මෙවලම -cursor_hand_tool.title=අත් මෙවලම සබල කරන්න -cursor_hand_tool_label=අත් මෙවලම - -scroll_page.title=පිටුව අනුචලනය භාවිතය -scroll_page_label=පිටුව අනුචලනය -scroll_vertical.title=සිරස් අනුචලනය භාවිතය -scroll_vertical_label=සිරස් අනුචලනය -scroll_horizontal.title=තිරස් අනුචලනය භාවිතය -scroll_horizontal_label=තිරස් අනුචලනය - - -# Document properties dialog box -document_properties.title=ලේඛනයේ ගුණාංග… -document_properties_label=ලේඛනයේ ගුණාංග… -document_properties_file_name=ගොනුවේ නම: -document_properties_file_size=ගොනුවේ ප්‍රමාණය: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb=කි.බ. {{size_kb}} (බයිට {{size_b}}) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb=මෙ.බ. {{size_mb}} (බයිට {{size_b}}) -document_properties_title=සිරැසිය: -document_properties_author=කතෘ: -document_properties_subject=මාතෘකාව: -document_properties_keywords=මූල පද: -document_properties_creation_date=සෑදූ දිනය: -document_properties_modification_date=සංශෝධිත දිනය: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=නිර්මාතෘ: -document_properties_producer=පීඩීඑෆ් සම්පාදක: -document_properties_version=පීඩීඑෆ් අනුවාදය: -document_properties_page_count=පිටු ගණන: -document_properties_page_size=පිටුවේ තරම: -document_properties_page_size_unit_inches=අඟල් -document_properties_page_size_unit_millimeters=මි.මී. -document_properties_page_size_orientation_portrait=සිරස් -document_properties_page_size_orientation_landscape=තිරස් -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}}×{{height}}{{unit}}{{name}}{{orientation}} -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=වේගවත් වියමන දැක්ම: -document_properties_linearized_yes=ඔව් -document_properties_linearized_no=නැහැ -document_properties_close=වසන්න - -print_progress_message=මුද්‍රණය සඳහා ලේඛනය සූදානම් වෙමින්… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=අවලංගු කරන්න - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -document_outline_label=ලේඛනයේ වටසන -attachments.title=ඇමුණුම් පෙන්වන්න -attachments_label=ඇමුණුම් -layers.title=ස්තර පෙන්වන්න (සියළු ස්තර පෙරනිමි තත්‍වයට යළි සැකසීමට දෙවරක් ඔබන්න) -layers_label=ස්තර -thumbs.title=සිඟිති රූ පෙන්වන්න -thumbs_label=සිඟිති රූ -findbar.title=ලේඛනයෙහි සොයන්න -findbar_label=සොයන්න - -additional_layers=අතිරේක ස්තර -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=පිටුව {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=පිටුව {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=පිටුවේ සිඟිත රූව {{page}} - -# Find panel button title and messages -find_input.title=සොයන්න -find_input.placeholder=ලේඛනයේ සොයන්න… -find_previous.title=මෙම වැකිකඩ කලින් යෙදුණු ස්ථානය සොයන්න -find_previous_label=කලින් -find_next.title=මෙම වැකිකඩ ඊළඟට යෙදෙන ස්ථානය සොයන්න -find_next_label=ඊළඟ -find_highlight=සියල්ල උද්දීපනය -find_entire_word_label=සමස්ත වචන -find_reached_top=ලේඛනයේ මුදුනට ළඟා විය, පහළ සිට ඉහළට -find_reached_bottom=ලේඛනයේ අවසානයට ළඟා විය, ඉහළ සිට පහළට -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=ගැළපීම් {{limit}} කට වඩා -find_match_count_limit[two]=ගැළපුම් {{limit}} කට වඩා -find_match_count_limit[few]=ගැළපුම් {{limit}} කට වඩා -find_match_count_limit[many]=ගැළපුම් {{limit}} කට වඩා -find_match_count_limit[other]=ගැළපුම් {{limit}} කට වඩා -find_not_found=වැකිකඩ හමු නොවිණි - -# Predefined zoom values -page_scale_width=පිටුවේ පළල -page_scale_auto=ස්වයංක්‍රීය විශාලනය -page_scale_actual=සැබෑ ප්‍රමාණය -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=පීඩීඑෆ් පූරණය කිරීමේදී දෝෂයක් සිදු විය. -invalid_file_error=වලංගු නොවන හෝ හානිවූ පීඩීඑෆ් ගොනුවකි. -missing_file_error=මඟහැරුණු පීඩීඑෆ් ගොනුවකි. -unexpected_response_error=අනපේක්‍ෂිත සේවාදායක ප්‍රතිචාරයකි. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -password_label=මෙම පීඩීඑෆ් ගොනුව විවෘත කිරීමට මුරපදය යොදන්න. -password_invalid=වැරදි මුරපදයකි. නැවත උත්සාහ කරන්න. -password_ok=හරි -password_cancel=අවලංගු - -printing_not_supported=අවවාදයයි: මෙම අතිරික්සුව මුද්‍රණය සඳහා හොඳින් සහාය නොදක්වයි. -printing_not_ready=අවවාදයයි: මුද්‍රණයට පීඩීඑෆ් ගොනුව සම්පූර්ණයෙන් පූරණය වී නැත. -web_fonts_disabled=වියමන අකුරු අබලයි: පීඩීඑෆ් වෙත කාවැද්දූ රුවකුරු භාවිතා කළ නොහැකිය. - -# Editor -editor_free_text2.title=පෙළ -editor_free_text2_label=පෙළ -editor_ink2.title=අඳින්න -editor_ink2_label=අඳින්න - -editor_stamp.title=රූපයක් එක් කරන්න -editor_stamp_label=රූපයක් එක් කරන්න - -free_text2_default_content=ලිවීීම අරඹන්න… - -# Editor Parameters -editor_free_text_color=වර්ණය -editor_free_text_size=තරම -editor_ink_color=වර්ණය -editor_ink_thickness=ඝණකම - -# Editor aria -editor_free_text2_aria_label=වදන් සකසනය diff --git a/static/pdf.js/locale/sk/viewer.ftl b/static/pdf.js/locale/sk/viewer.ftl new file mode 100644 index 00000000..07a0c5ef --- /dev/null +++ b/static/pdf.js/locale/sk/viewer.ftl @@ -0,0 +1,406 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Predchádzajúca strana +pdfjs-previous-button-label = Predchádzajúca +pdfjs-next-button = + .title = Nasledujúca strana +pdfjs-next-button-label = Nasledujúca +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Strana +# 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 = z { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } z { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zmenšiť veľkosť +pdfjs-zoom-out-button-label = Zmenšiť veľkosť +pdfjs-zoom-in-button = + .title = Zväčšiť veľkosť +pdfjs-zoom-in-button-label = Zväčšiť veľkosť +pdfjs-zoom-select = + .title = Nastavenie veľkosti +pdfjs-presentation-mode-button = + .title = Prepnúť na režim prezentácie +pdfjs-presentation-mode-button-label = Režim prezentácie +pdfjs-open-file-button = + .title = Otvoriť súbor +pdfjs-open-file-button-label = Otvoriť +pdfjs-print-button = + .title = Tlačiť +pdfjs-print-button-label = Tlačiť +pdfjs-save-button = + .title = Uložiť +pdfjs-save-button-label = Uložiť +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Stiahnuť +# 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 = Stiahnuť +pdfjs-bookmark-button = + .title = Aktuálna stránka (zobraziť adresu URL z aktuálnej stránky) +pdfjs-bookmark-button-label = Aktuálna stránka +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Otvoriť v aplikácii +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Otvoriť v aplikácii + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Nástroje +pdfjs-tools-button-label = Nástroje +pdfjs-first-page-button = + .title = Prejsť na prvú stranu +pdfjs-first-page-button-label = Prejsť na prvú stranu +pdfjs-last-page-button = + .title = Prejsť na poslednú stranu +pdfjs-last-page-button-label = Prejsť na poslednú stranu +pdfjs-page-rotate-cw-button = + .title = Otočiť v smere hodinových ručičiek +pdfjs-page-rotate-cw-button-label = Otočiť v smere hodinových ručičiek +pdfjs-page-rotate-ccw-button = + .title = Otočiť proti smeru hodinových ručičiek +pdfjs-page-rotate-ccw-button-label = Otočiť proti smeru hodinových ručičiek +pdfjs-cursor-text-select-tool-button = + .title = Povoliť výber textu +pdfjs-cursor-text-select-tool-button-label = Výber textu +pdfjs-cursor-hand-tool-button = + .title = Povoliť nástroj ruka +pdfjs-cursor-hand-tool-button-label = Nástroj ruka +pdfjs-scroll-page-button = + .title = Použiť rolovanie po stránkach +pdfjs-scroll-page-button-label = Rolovanie po stránkach +pdfjs-scroll-vertical-button = + .title = Používať zvislé posúvanie +pdfjs-scroll-vertical-button-label = Zvislé posúvanie +pdfjs-scroll-horizontal-button = + .title = Používať vodorovné posúvanie +pdfjs-scroll-horizontal-button-label = Vodorovné posúvanie +pdfjs-scroll-wrapped-button = + .title = Použiť postupné posúvanie +pdfjs-scroll-wrapped-button-label = Postupné posúvanie +pdfjs-spread-none-button = + .title = Nezdružovať stránky +pdfjs-spread-none-button-label = Žiadne združovanie +pdfjs-spread-odd-button = + .title = Združí stránky a umiestni nepárne stránky vľavo +pdfjs-spread-odd-button-label = Združiť stránky (nepárne vľavo) +pdfjs-spread-even-button = + .title = Združí stránky a umiestni párne stránky vľavo +pdfjs-spread-even-button-label = Združiť stránky (párne vľavo) + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Vlastnosti dokumentu… +pdfjs-document-properties-button-label = Vlastnosti dokumentu… +pdfjs-document-properties-file-name = Názov súboru: +pdfjs-document-properties-file-size = Veľkosť súboru: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } kB ({ $size_b } bajtov) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bajtov) +pdfjs-document-properties-title = Názov: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Predmet: +pdfjs-document-properties-keywords = Kľúčové slová: +pdfjs-document-properties-creation-date = Dátum vytvorenia: +pdfjs-document-properties-modification-date = Dátum úpravy: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Aplikácia: +pdfjs-document-properties-producer = Tvorca PDF: +pdfjs-document-properties-version = Verzia PDF: +pdfjs-document-properties-page-count = Počet strán: +pdfjs-document-properties-page-size = Veľkosť stránky: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = na výšku +pdfjs-document-properties-page-size-orientation-landscape = na šírku +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 = List +pdfjs-document-properties-page-size-name-legal = 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 = Rýchle zobrazovanie z webu: +pdfjs-document-properties-linearized-yes = Áno +pdfjs-document-properties-linearized-no = Nie +pdfjs-document-properties-close-button = Zavrieť + +## Print + +pdfjs-print-progress-message = Príprava dokumentu na tlač… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress } % +pdfjs-print-progress-close-button = Zrušiť +pdfjs-printing-not-supported = Upozornenie: tlač nie je v tomto prehliadači plne podporovaná. +pdfjs-printing-not-ready = Upozornenie: súbor PDF nie je plne načítaný pre tlač. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Prepnúť bočný panel +pdfjs-toggle-sidebar-notification-button = + .title = Prepnúť bočný panel (dokument obsahuje osnovu/prílohy/vrstvy) +pdfjs-toggle-sidebar-button-label = Prepnúť bočný panel +pdfjs-document-outline-button = + .title = Zobraziť osnovu dokumentu (dvojitým kliknutím rozbalíte/zbalíte všetky položky) +pdfjs-document-outline-button-label = Osnova dokumentu +pdfjs-attachments-button = + .title = Zobraziť prílohy +pdfjs-attachments-button-label = Prílohy +pdfjs-layers-button = + .title = Zobraziť vrstvy (dvojitým kliknutím uvediete všetky vrstvy do pôvodného stavu) +pdfjs-layers-button-label = Vrstvy +pdfjs-thumbs-button = + .title = Zobraziť miniatúry +pdfjs-thumbs-button-label = Miniatúry +pdfjs-current-outline-item-button = + .title = Nájsť aktuálnu položku v osnove +pdfjs-current-outline-item-button-label = Aktuálna položka v osnove +pdfjs-findbar-button = + .title = Hľadať v dokumente +pdfjs-findbar-button-label = Hľadať +pdfjs-additional-layers = Ďalšie vrstvy + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Strana { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatúra strany { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Hľadať + .placeholder = Hľadať v dokumente… +pdfjs-find-previous-button = + .title = Vyhľadať predchádzajúci výskyt reťazca +pdfjs-find-previous-button-label = Predchádzajúce +pdfjs-find-next-button = + .title = Vyhľadať ďalší výskyt reťazca +pdfjs-find-next-button-label = Ďalšie +pdfjs-find-highlight-checkbox = Zvýrazniť všetky +pdfjs-find-match-case-checkbox-label = Rozlišovať veľkosť písmen +pdfjs-find-match-diacritics-checkbox-label = Rozlišovať diakritiku +pdfjs-find-entire-word-checkbox-label = Celé slová +pdfjs-find-reached-top = Bol dosiahnutý začiatok stránky, pokračuje sa od konca +pdfjs-find-reached-bottom = Bol dosiahnutý koniec stránky, pokračuje sa od začiatku +# 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] Výskyt { $current } z { $total } + [few] Výskyt { $current } z { $total } + [many] Výskyt { $current } z { $total } + *[other] Výskyt { $current } z { $total } + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Viac ako { $limit } výskyt + [few] Viac ako { $limit } výskyty + [many] Viac ako { $limit } výskytov + *[other] Viac ako { $limit } výskytov + } +pdfjs-find-not-found = Výraz nebol nájdený + +## Predefined zoom values + +pdfjs-page-scale-width = Na šírku strany +pdfjs-page-scale-fit = Na veľkosť strany +pdfjs-page-scale-auto = Automatická veľkosť +pdfjs-page-scale-actual = Skutočná veľkosť +# 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 = Strana { $page } + +## Loading indicator messages + +pdfjs-loading-error = Počas načítavania dokumentu PDF sa vyskytla chyba. +pdfjs-invalid-file-error = Neplatný alebo poškodený súbor PDF. +pdfjs-missing-file-error = Chýbajúci súbor PDF. +pdfjs-unexpected-response-error = Neočakávaná odpoveď zo servera. +pdfjs-rendering-error = Pri vykresľovaní stránky sa vyskytla chyba. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Anotácia typu { $type }] + +## Password + +pdfjs-password-label = Ak chcete otvoriť tento súbor PDF, zadajte jeho heslo. +pdfjs-password-invalid = Heslo nie je platné. Skúste to znova. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Zrušiť +pdfjs-web-fonts-disabled = Webové písma sú vypnuté: nie je možné použiť písma vložené do súboru PDF. + +## Editing + +pdfjs-editor-free-text-button = + .title = Text +pdfjs-editor-free-text-button-label = Text +pdfjs-editor-ink-button = + .title = Kresliť +pdfjs-editor-ink-button-label = Kresliť +pdfjs-editor-stamp-button = + .title = Pridať alebo upraviť obrázky +pdfjs-editor-stamp-button-label = Pridať alebo upraviť obrázky +pdfjs-editor-highlight-button = + .title = Zvýrazniť +pdfjs-editor-highlight-button-label = Zvýrazniť +pdfjs-highlight-floating-button = + .title = Zvýrazniť +pdfjs-highlight-floating-button1 = + .title = Zvýrazniť + .aria-label = Zvýrazniť +pdfjs-highlight-floating-button-label = Zvýrazniť + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Odstrániť kresbu +pdfjs-editor-remove-freetext-button = + .title = Odstrániť text +pdfjs-editor-remove-stamp-button = + .title = Odstrániť obrázok +pdfjs-editor-remove-highlight-button = + .title = Odstrániť zvýraznenie + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Farba +pdfjs-editor-free-text-size-input = Veľkosť +pdfjs-editor-ink-color-input = Farba +pdfjs-editor-ink-thickness-input = Hrúbka +pdfjs-editor-ink-opacity-input = Priehľadnosť +pdfjs-editor-stamp-add-image-button = + .title = Pridať obrázok +pdfjs-editor-stamp-add-image-button-label = Pridať obrázok +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Hrúbka +pdfjs-editor-free-highlight-thickness-title = + .title = Zmeňte hrúbku pre zvýrazňovanie iných položiek ako textu +pdfjs-free-text = + .aria-label = Textový editor +pdfjs-free-text-default-content = Začnite písať… +pdfjs-ink = + .aria-label = Editor kreslenia +pdfjs-ink-canvas = + .aria-label = Obrázok vytvorený používateľom + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alternatívny text +pdfjs-editor-alt-text-edit-button-label = Upraviť alternatívny text +pdfjs-editor-alt-text-dialog-label = Vyberte možnosť +pdfjs-editor-alt-text-dialog-description = Alternatívny text (alt text) pomáha, keď ľudia obrázok nevidia alebo sa nenačítava. +pdfjs-editor-alt-text-add-description-label = Pridať popis +pdfjs-editor-alt-text-add-description-description = Zamerajte sa na 1-2 vety, ktoré popisujú predmet, prostredie alebo akcie. +pdfjs-editor-alt-text-mark-decorative-label = Označiť ako dekoratívny +pdfjs-editor-alt-text-mark-decorative-description = Používa sa na ozdobné obrázky, ako sú okraje alebo vodoznaky. +pdfjs-editor-alt-text-cancel-button = Zrušiť +pdfjs-editor-alt-text-save-button = Uložiť +pdfjs-editor-alt-text-decorative-tooltip = Označený ako dekoratívny +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Napríklad: „Mladý muž si sadá za stôl, aby sa najedol“ + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Ľavý horný roh – zmena veľkosti +pdfjs-editor-resizer-label-top-middle = Horný stred – zmena veľkosti +pdfjs-editor-resizer-label-top-right = Pravý horný roh – zmena veľkosti +pdfjs-editor-resizer-label-middle-right = Vpravo uprostred – zmena veľkosti +pdfjs-editor-resizer-label-bottom-right = Pravý dolný roh – zmena veľkosti +pdfjs-editor-resizer-label-bottom-middle = Stred dole – zmena veľkosti +pdfjs-editor-resizer-label-bottom-left = Ľavý dolný roh – zmena veľkosti +pdfjs-editor-resizer-label-middle-left = Vľavo uprostred – zmena veľkosti + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Farba zvýraznenia +pdfjs-editor-colorpicker-button = + .title = Zmeniť farbu +pdfjs-editor-colorpicker-dropdown = + .aria-label = Výber farieb +pdfjs-editor-colorpicker-yellow = + .title = Žltá +pdfjs-editor-colorpicker-green = + .title = Zelená +pdfjs-editor-colorpicker-blue = + .title = Modrá +pdfjs-editor-colorpicker-pink = + .title = Ružová +pdfjs-editor-colorpicker-red = + .title = Červená + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Zobraziť všetko +pdfjs-editor-highlight-show-all-button = + .title = Zobraziť všetko diff --git a/static/pdf.js/locale/sk/viewer.properties b/static/pdf.js/locale/sk/viewer.properties deleted file mode 100644 index 22ce0590..00000000 --- a/static/pdf.js/locale/sk/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Predchádzajúca strana -previous_label=Predchádzajúca -next.title=Nasledujúca strana -next_label=Nasledujúca - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Strana -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=z {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} z {{pagesCount}}) - -zoom_out.title=Zmenšiť veľkosť -zoom_out_label=Zmenšiť veľkosť -zoom_in.title=Zväčšiť veľkosť -zoom_in_label=Zväčšiť veľkosť -zoom.title=Nastavenie veľkosti -presentation_mode.title=Prepnúť na režim prezentácie -presentation_mode_label=Režim prezentácie -open_file.title=Otvoriť súbor -open_file_label=Otvoriť -print.title=Tlačiť -print_label=Tlačiť -save.title=Uložiť -save_label=Uložiť -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Stiahnuť -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Stiahnuť -bookmark1.title=Aktuálna stránka (zobraziť adresu URL z aktuálnej stránky) -bookmark1_label=Aktuálna stránka -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Otvoriť v aplikácii -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Otvoriť v aplikácii - -# Secondary toolbar and context menu -tools.title=Nástroje -tools_label=Nástroje -first_page.title=Prejsť na prvú stranu -first_page_label=Prejsť na prvú stranu -last_page.title=Prejsť na poslednú stranu -last_page_label=Prejsť na poslednú stranu -page_rotate_cw.title=Otočiť v smere hodinových ručičiek -page_rotate_cw_label=Otočiť v smere hodinových ručičiek -page_rotate_ccw.title=Otočiť proti smeru hodinových ručičiek -page_rotate_ccw_label=Otočiť proti smeru hodinových ručičiek - -cursor_text_select_tool.title=Povoliť výber textu -cursor_text_select_tool_label=Výber textu -cursor_hand_tool.title=Povoliť nástroj ruka -cursor_hand_tool_label=Nástroj ruka - -scroll_page.title=Použiť rolovanie po stránkach -scroll_page_label=Rolovanie po stránkach -scroll_vertical.title=Používať zvislé posúvanie -scroll_vertical_label=Zvislé posúvanie -scroll_horizontal.title=Používať vodorovné posúvanie -scroll_horizontal_label=Vodorovné posúvanie -scroll_wrapped.title=Použiť postupné posúvanie -scroll_wrapped_label=Postupné posúvanie - -spread_none.title=Nezdružovať stránky -spread_none_label=Žiadne združovanie -spread_odd.title=Združí stránky a umiestni nepárne stránky vľavo -spread_odd_label=Združiť stránky (nepárne vľavo) -spread_even.title=Združí stránky a umiestni párne stránky vľavo -spread_even_label=Združiť stránky (párne vľavo) - -# Document properties dialog box -document_properties.title=Vlastnosti dokumentu… -document_properties_label=Vlastnosti dokumentu… -document_properties_file_name=Názov súboru: -document_properties_file_size=Veľkosť súboru: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} kB ({{size_b}} bajtov) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bajtov) -document_properties_title=Názov: -document_properties_author=Autor: -document_properties_subject=Predmet: -document_properties_keywords=Kľúčové slová: -document_properties_creation_date=Dátum vytvorenia: -document_properties_modification_date=Dátum úpravy: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Vytvoril: -document_properties_producer=Tvorca PDF: -document_properties_version=Verzia PDF: -document_properties_page_count=Počet strán: -document_properties_page_size=Veľkosť stránky: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=na výšku -document_properties_page_size_orientation_landscape=na šírku -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=List -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Rýchle Web View: -document_properties_linearized_yes=Áno -document_properties_linearized_no=Nie -document_properties_close=Zavrieť - -print_progress_message=Príprava dokumentu na tlač… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}} % -print_progress_close=Zrušiť - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Prepnúť bočný panel -toggle_sidebar_notification2.title=Prepnúť bočný panel (dokument obsahuje osnovu/prílohy/vrstvy) -toggle_sidebar_label=Prepnúť bočný panel -document_outline.title=Zobraziť osnovu dokumentu (dvojitým kliknutím rozbalíte/zbalíte všetky položky) -document_outline_label=Osnova dokumentu -attachments.title=Zobraziť prílohy -attachments_label=Prílohy -layers.title=Zobraziť vrstvy (dvojitým kliknutím uvediete všetky vrstvy do pôvodného stavu) -layers_label=Vrstvy -thumbs.title=Zobraziť miniatúry -thumbs_label=Miniatúry -current_outline_item.title=Nájsť aktuálnu položku v osnove -current_outline_item_label=Aktuálna položka v osnove -findbar.title=Hľadať v dokumente -findbar_label=Hľadať - -additional_layers=Ďalšie vrstvy -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Strana {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Strana {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatúra strany {{page}} - -# Find panel button title and messages -find_input.title=Hľadať -find_input.placeholder=Hľadať v dokumente… -find_previous.title=Vyhľadať predchádzajúci výskyt reťazca -find_previous_label=Predchádzajúce -find_next.title=Vyhľadať ďalší výskyt reťazca -find_next_label=Ďalšie -find_highlight=Zvýrazniť všetky -find_match_case_label=Rozlišovať veľkosť písmen -find_match_diacritics_label=Rozlišovať diakritiku -find_entire_word_label=Celé slová -find_reached_top=Bol dosiahnutý začiatok stránky, pokračuje sa od konca -find_reached_bottom=Bol dosiahnutý koniec stránky, pokračuje sa od začiatku -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}}. z {{total}} výsledku -find_match_count[two]={{current}}. z {{total}} výsledkov -find_match_count[few]={{current}}. z {{total}} výsledkov -find_match_count[many]={{current}}. z {{total}} výsledkov -find_match_count[other]={{current}}. z {{total}} výsledkov -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Viac než {{limit}} výsledkov -find_match_count_limit[one]=Viac než {{limit}} výsledok -find_match_count_limit[two]=Viac než {{limit}} výsledky -find_match_count_limit[few]=Viac než {{limit}} výsledky -find_match_count_limit[many]=Viac než {{limit}} výsledkov -find_match_count_limit[other]=Viac než {{limit}} výsledkov -find_not_found=Výraz nebol nájdený - -# Predefined zoom values -page_scale_width=Na šírku strany -page_scale_fit=Na veľkosť strany -page_scale_auto=Automatická veľkosť -page_scale_actual=Skutočná veľkosť -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}} % - -# Loading indicator messages -loading_error=Počas načítavania dokumentu PDF sa vyskytla chyba. -invalid_file_error=Neplatný alebo poškodený súbor PDF. -missing_file_error=Chýbajúci súbor PDF. -unexpected_response_error=Neočakávaná odpoveď zo servera. -rendering_error=Pri vykresľovaní stránky sa vyskytla chyba. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Anotácia typu {{type}}] -password_label=Ak chcete otvoriť tento súbor PDF, zadajte jeho heslo. -password_invalid=Heslo nie je platné. Skúste to znova. -password_ok=OK -password_cancel=Zrušiť - -printing_not_supported=Upozornenie: tlač nie je v tomto prehliadači plne podporovaná. -printing_not_ready=Upozornenie: súbor PDF nie je plne načítaný pre tlač. -web_fonts_disabled=Webové písma sú vypnuté: nie je možné použiť písma vložené do súboru PDF. - -# Editor -editor_free_text2.title=Text -editor_free_text2_label=Text -editor_ink2.title=Kreslenie -editor_ink2_label=Kresliť - -editor_stamp.title=Pridať obrázok -editor_stamp_label=Pridať obrázok - -editor_stamp1.title=Pridať alebo upraviť obrázky -editor_stamp1_label=Pridať alebo upraviť obrázky - -free_text2_default_content=Začnite písať… - -# Editor Parameters -editor_free_text_color=Farba -editor_free_text_size=Veľkosť -editor_ink_color=Farba -editor_ink_thickness=Hrúbka -editor_ink_opacity=Priehľadnosť - -editor_stamp_add_image_label=Pridať obrázok -editor_stamp_add_image.title=Pridať obrázok - -# Editor aria -editor_free_text2_aria_label=Textový editor -editor_ink2_aria_label=Editor kreslenia -editor_ink_canvas_aria_label=Obrázok vytvorený používateľom diff --git a/static/pdf.js/locale/skr/viewer.ftl b/static/pdf.js/locale/skr/viewer.ftl new file mode 100644 index 00000000..72afe356 --- /dev/null +++ b/static/pdf.js/locale/skr/viewer.ftl @@ -0,0 +1,396 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = پریزنٹیشن موڈ تے سوئچ کرو +pdfjs-presentation-mode-button-label = پریزنٹیشن موڈ +pdfjs-open-file-button = + .title = فائل کھولو +pdfjs-open-file-button-label = کھولو +pdfjs-print-button = + .title = چھاپو +pdfjs-print-button-label = چھاپو +pdfjs-save-button = + .title = ہتھیکڑا کرو +pdfjs-save-button-label = ہتھیکڑا کرو +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = ڈاؤن لوڈ +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = ڈاؤن لوڈ +pdfjs-bookmark-button = + .title = موجودہ ورقہ (موجودہ ورقے کنوں یوآرایل ݙیکھو) +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 = وہڑھی ہوئی سکرولنگ +pdfjs-spread-none-button = + .title = پیج سپریڈز وِچ شامل نہ تھیوو۔ +pdfjs-spread-none-button-label = کوئی پولھ کائنی +pdfjs-spread-odd-button = + .title = طاق نمبر والے ورقیاں دے نال شروع تھیوݨ والے پیج سپریڈز وِچ شامل تھیوو۔ +pdfjs-spread-odd-button-label = تاک پھیلاؤ +pdfjs-spread-even-button = + .title = جفت نمر والے ورقیاں نال شروع تھیوݨ والے پیج سپریڈز وِ شامل تھیوو۔ +pdfjs-spread-even-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 = فائل دا سائز: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } کے بی ({ $size_b } بائٹس) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } ایم بی ({ $size_b } بائٹس) +pdfjs-document-properties-title = عنوان: +pdfjs-document-properties-author = تخلیق کار: +pdfjs-document-properties-subject = موضوع: +pdfjs-document-properties-keywords = کلیدی الفاظ: +pdfjs-document-properties-creation-date = تخلیق دی تاریخ: +pdfjs-document-properties-modification-date = ترمیم دی تاریخ: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = mm +pdfjs-document-properties-page-size-orientation-portrait = عمودی انداز +pdfjs-document-properties-page-size-orientation-landscape = افقى انداز +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = لیٹر +pdfjs-document-properties-page-size-name-legal = قنونی + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = تکھا ویب نظارہ: +pdfjs-document-properties-linearized-yes = جیا +pdfjs-document-properties-linearized-no = کو +pdfjs-document-properties-close-button = بند کرو + +## Print + +pdfjs-print-progress-message = چھاپݨ کیتے دستاویز تیار تھیندے پئے ہن … +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = منسوخ کرو +pdfjs-printing-not-supported = چتاوݨی: چھپائی ایں براؤزر تے پوری طراں معاونت شدہ کائنی۔ +pdfjs-printing-not-ready = چتاوݨی: PDF چھپائی کیتے پوری طراں لوڈ نئیں تھئی۔ + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = سائیڈ بار ٹوگل کرو +pdfjs-toggle-sidebar-notification-button = + .title = سائیڈ بار ٹوگل کرو (دستاویز وِچ آؤٹ لائن/ منسلکات/ پرتاں شامل ہن) +pdfjs-toggle-sidebar-button-label = سائیڈ بار ٹوگل کرو +pdfjs-document-outline-button = + .title = دستاویز دا خاکہ ݙکھاؤ (تمام آئٹمز کوں پھیلاوݨ/سنگوڑݨ کیتے ڈبل کلک کرو) +pdfjs-document-outline-button-label = دستاویز آؤٹ لائن +pdfjs-attachments-button = + .title = نتھیاں ݙکھاؤ +pdfjs-attachments-button-label = منسلکات +pdfjs-layers-button = + .title = پرتاں ݙکھاؤ (تمام پرتاں کوں ڈیفالٹ حالت وِچ دوبارہ ترتیب ݙیوݨ کیتے ڈبل کلک کرو) +pdfjs-layers-button-label = پرتاں +pdfjs-thumbs-button = + .title = تھمبنیل ݙکھاؤ +pdfjs-thumbs-button-label = تھمبنیلز +pdfjs-current-outline-item-button = + .title = موجودہ آؤٹ لائن آئٹم لبھو +pdfjs-current-outline-item-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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = ورقے دا تھمبنیل { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = لبھو + .placeholder = دستاویز وِچ لبھو … +pdfjs-find-previous-button = + .title = فقرے دا پچھلا واقعہ لبھو +pdfjs-find-previous-button-label = پچھلا +pdfjs-find-next-button = + .title = فقرے دا اڳلا واقعہ لبھو +pdfjs-find-next-button-label = اڳلا +pdfjs-find-highlight-checkbox = تمام نشابر کرو +pdfjs-find-match-case-checkbox-label = حروف مشابہ کرو +pdfjs-find-match-diacritics-checkbox-label = ڈائیکرٹکس مشابہ کرو +pdfjs-find-entire-word-checkbox-label = تمام الفاظ +pdfjs-find-reached-top = ورقے دے شروع تے پُج ڳیا، تلوں جاری کیتا ڳیا +pdfjs-find-reached-bottom = ورقے دے پاند تے پُڄ ڳیا، اُتوں شروع کیتا ڳیا +# 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] { $total } وِچوں { $current } مشابہ + *[other] { $total } وِچوں { $current } مشابے + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] { $limit } توں ودھ مماثلت۔ + *[other] { $limit } توں ودھ مماثلتاں۔ + } +pdfjs-find-not-found = فقرہ نئیں ملیا + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = PDF لوڈ کریندے ویلھے نقص آ ڳیا۔ +pdfjs-invalid-file-error = غلط یا خراب شدہ PDF فائل۔ +pdfjs-missing-file-error = PDF فائل غائب ہے۔ +pdfjs-unexpected-response-error = سرور دا غیر متوقع جواب۔ +pdfjs-rendering-error = ورقہ رینڈر کریندے ویلھے ہک خرابی پیش آڳئی۔ + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } تشریح] + +## Password + +pdfjs-password-label = ایہ PDF فائل کھولݨ کیتے پاس ورڈ درج کرو۔ +pdfjs-password-invalid = غلط پاس ورڈ: براہ مہربانی ولدا کوشش کرو۔ +pdfjs-password-ok-button = ٹھیک ہے +pdfjs-password-cancel-button = منسوخ کرو +pdfjs-web-fonts-disabled = ویب فونٹس غیر فعال ہن: ایمبیڈڈ PDF فونٹس استعمال کرݨ کنوں قاصر ہن + +## Editing + +pdfjs-editor-free-text-button = + .title = متن +pdfjs-editor-free-text-button-label = متن +pdfjs-editor-ink-button = + .title = چھکو +pdfjs-editor-ink-button-label = چھکو +pdfjs-editor-stamp-button = + .title = تصویراں کوں شامل کرو یا ترمیم کرو +pdfjs-editor-stamp-button-label = تصویراں کوں شامل کرو یا ترمیم کرو +pdfjs-editor-highlight-button = + .title = نمایاں کرو +pdfjs-editor-highlight-button-label = نمایاں کرو +pdfjs-highlight-floating-button = + .title = نمایاں کرو +pdfjs-highlight-floating-button1 = + .title = نمایاں کرو + .aria-label = نمایاں کرو +pdfjs-highlight-floating-button-label = نمایاں کرو + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = ڈرائینگ ہٹاؤ +pdfjs-editor-remove-freetext-button = + .title = متن ہٹاؤ +pdfjs-editor-remove-stamp-button = + .title = تصویر ہٹاؤ +pdfjs-editor-remove-highlight-button = + .title = نمایاں ہٹاؤ + +## + +# 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 = دھندلاپن +pdfjs-editor-stamp-add-image-button = + .title = تصویر شامل کرو +pdfjs-editor-stamp-add-image-button-label = تصویر شامل کرو +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = مُٹاݨ +pdfjs-editor-free-highlight-thickness-title = + .title = متن توں ان٘ج ٻئے شئیں کوں نمایاں کرݨ ویلے مُٹاݨ کوں بدلو +pdfjs-free-text = + .aria-label = ٹیکسٹ ایڈیٹر +pdfjs-free-text-default-content = ٹائپنگ شروع کرو … +pdfjs-ink = + .aria-label = ڈرا ایڈیٹر +pdfjs-ink-canvas = + .aria-label = صارف دی بݨائی ہوئی تصویر + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alt متن +pdfjs-editor-alt-text-edit-button-label = alt متن وِچ ترمیم کرو +pdfjs-editor-alt-text-dialog-label = ہِک اختیار چُݨو +pdfjs-editor-alt-text-dialog-description = Alt متن (متبادل متن) اِیں ویلے مَدَت کرین٘دا ہِے جہڑیلے لوک تصویر کوں نِھیں ݙیکھ سڳدے یا جہڑیلے اِیہ لوڈ کائنی تِھین٘دا۔ +pdfjs-editor-alt-text-add-description-label = تفصیل شامل کرو +pdfjs-editor-alt-text-add-description-description = 1-2 جملیاں دا مقصد جہڑے موضوع، ترتیب، یا اعمال کوں بیان کرین٘دے ہِن۔ +pdfjs-editor-alt-text-mark-decorative-label = آرائشی طور تے نشان زد کرو +pdfjs-editor-alt-text-mark-decorative-description = اِیہ آرائشی تصویراں کِیتے استعمال تِھین٘دا ہِے، جیویں بارڈر یا واٹر مارکس۔ +pdfjs-editor-alt-text-cancel-button = منسوخ +pdfjs-editor-alt-text-save-button = محفوظ +pdfjs-editor-alt-text-decorative-tooltip = آرائشی دے طور تے نشان زد تِھی ڳِیا +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = مثال دے طور تے، "ہِک جؤان کھاݨاں کھاوݨ کِیتے میز اُتّے ٻیٹھا ہِے" + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = اُتلی کَھٻّی نُکّڑ — سائز بدلو +pdfjs-editor-resizer-label-top-middle = اُتلا وِچلا — سائز بدلو +pdfjs-editor-resizer-label-top-right = اُتلی سَڄّی نُکَّڑ — سائز بدلو +pdfjs-editor-resizer-label-middle-right = وِچلا سڄّا — سائز بدلو +pdfjs-editor-resizer-label-bottom-right = تلوِیں سَڄّی نُکَّڑ — سائز بدلو +pdfjs-editor-resizer-label-bottom-middle = تلواں وِچلا — سائز بدلو +pdfjs-editor-resizer-label-bottom-left = تلوِیں کَھٻّی نُکّڑ — سائز بدلو +pdfjs-editor-resizer-label-middle-left = وِچلا کَھٻّا — سائز بدلو + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = نشابر رنگ +pdfjs-editor-colorpicker-button = + .title = رنگ بدلو +pdfjs-editor-colorpicker-dropdown = + .aria-label = رنگ اختیارات +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 = سارے ݙکھاؤ diff --git a/static/pdf.js/locale/skr/viewer.properties b/static/pdf.js/locale/skr/viewer.properties deleted file mode 100644 index a66a271c..00000000 --- a/static/pdf.js/locale/skr/viewer.properties +++ /dev/null @@ -1,264 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=پچھلا ورقہ -previous_label=پچھلا -next.title=اڳلا ورقہ -next_label=اڳلا - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=ورقہ -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages={{pagesCount}} دا -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} دا {{pagesCount}}) - -zoom_out.title=زوم آؤٹ -zoom_out_label=زوم آؤٹ -zoom_in.title=زوم اِن -zoom_in_label=زوم اِن -zoom.title=زوم -presentation_mode.title=پریزنٹیشن موڈ تے سوئچ کرو -presentation_mode_label=پریزنٹیشن موڈ -open_file.title=فائل کھولو -open_file_label=کھولو -print.title=چھاپو -print_label=چھاپو -save.title=ہتھیکڑا کرو -save_label=ہتھیکڑا کرو -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=ڈاؤن لوڈ -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=ڈاؤن لوڈ -bookmark1.title=موجودہ ورقہ (موجودہ ورقے کنوں یوآرایل ݙیکھو) -bookmark1_label=موجودہ ورقہ -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=ایپ وچ کھولو -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=ایپ وچ کھولو - -# Secondary toolbar and context menu -tools.title=اوزار -tools_label=اوزار -first_page.title=پہلے ورقے تے ونڄو -first_page_label=پہلے ورقے تے ونڄو -last_page.title=چھیکڑی ورقے تے ونڄو -last_page_label=چھیکڑی ورقے تے ونڄو -page_rotate_cw.title=گھڑی وانگوں گھماؤ -page_rotate_cw_label=گھڑی وانگوں گھماؤ -page_rotate_ccw.title=گھڑی تے اُپٹھ گھماؤ -page_rotate_ccw_label=گھڑی تے اُپٹھ گھماؤ - -cursor_text_select_tool.title=متن منتخب کݨ والا آلہ فعال بݨاؤ -cursor_text_select_tool_label=متن منتخب کرݨ والا آلہ -cursor_hand_tool.title=ہینڈ ٹول فعال بݨاؤ -cursor_hand_tool_label=ہینڈ ٹول - -scroll_page.title=پیج سکرولنگ استعمال کرو -scroll_page_label=پیج سکرولنگ -scroll_vertical.title=عمودی سکرولنگ استعمال کرو -scroll_vertical_label=عمودی سکرولنگ -scroll_horizontal.title=افقی سکرولنگ استعمال کرو -scroll_horizontal_label=افقی سکرولنگ -scroll_wrapped.title=ویڑھی ہوئی سکرولنگ استعمال کرو -scroll_wrapped_label=وہڑھی ہوئی سکرولنگ - -spread_none.title=پیج سپریڈز وِچ شامل نہ تھیوو۔ -spread_none_label=کوئی پولھ کائنی -spread_odd.title=طاق نمبر والے ورقیاں دے نال شروع تھیوݨ والے پیج سپریڈز وِچ شامل تھیوو۔ -spread_odd_label=تاک پھیلاؤ -spread_even.title=جفت نمر والے ورقیاں نال شروع تھیوݨ والے پیج سپریڈز وِ شامل تھیوو۔ -spread_even_label=جفت پھیلاؤ - -# Document properties dialog box -document_properties.title=دستاویز خواص… -document_properties_label=دستاویز خواص … -document_properties_file_name=فائل دا ناں: -document_properties_file_size=فائل دا سائز: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} کے بی ({{size_b}} بائٹس) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} ایم بی ({{size_b}} بائٹس) -document_properties_title=عنوان: -document_properties_author=تخلیق کار: -document_properties_subject=موضوع: -document_properties_keywords=کلیدی الفاظ: -document_properties_creation_date=تخلیق دی تاریخ: -document_properties_modification_date=ترمیم دی تاریخ: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=تخلیق کار: -document_properties_producer=PDF پیدا کار: -document_properties_version=PDF ورژن: -document_properties_page_count=ورقہ شماری: -document_properties_page_size=ورقہ دی سائز: -document_properties_page_size_unit_inches=وِچ -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=عمودی انداز -document_properties_page_size_orientation_landscape=افقى انداز -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=لیٹر -document_properties_page_size_name_legal=قنونی -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=تکھا ویب نظارہ: -document_properties_linearized_yes=جیا -document_properties_linearized_no=کو -document_properties_close=بند کرو - -print_progress_message=چھاپݨ کیتے دستاویز تیار تھیندے پئے ہن … -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=منسوخ کرو - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=سائیڈ بار ٹوگل کرو -toggle_sidebar_notification2.title=سائیڈ بار ٹوگل کرو (دستاویز وِچ آؤٹ لائن/ منسلکات/ پرتاں شامل ہن) -toggle_sidebar_label=سائیڈ بار ٹوگل کرو -document_outline.title=دستاویز دا خاکہ ݙکھاؤ (تمام آئٹمز کوں پھیلاوݨ/سنگوڑݨ کیتے ڈبل کلک کرو) -document_outline_label=دستاویز آؤٹ لائن -attachments.title=نتھیاں ݙکھاؤ -attachments_label=منسلکات -layers.title=پرتاں ݙکھاؤ (تمام پرتاں کوں ڈیفالٹ حالت وِچ دوبارہ ترتیب ݙیوݨ کیتے ڈبل کلک کرو) -layers_label=پرتاں -thumbs.title=تھمبنیل ݙکھاؤ -thumbs_label=تھمبنیلز -current_outline_item.title=موجودہ آؤٹ لائن آئٹم لبھو -current_outline_item_label=موجودہ آؤٹ لائن آئٹم -findbar.title=دستاویز وِچ لبھو -findbar_label=لبھو - -additional_layers=اضافی پرتاں -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=ورقہ {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=ورقہ {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=ورقے دا تھمبنیل {{page}} - -# Find panel button title and messages -find_input.title=لبھو -find_input.placeholder=دستاویز وِچ لبھو … -find_previous.title=فقرے دا پچھلا واقعہ لبھو -find_previous_label=پچھلا -find_next.title=فقرے دا اڳلا واقعہ لبھو -find_next_label=اڳلا -find_highlight=تمام نشابر کرو -find_match_case_label=حروف مشابہ کرو -find_match_diacritics_label=ڈائیکرٹکس مشابہ کرو -find_entire_word_label=تمام الفاظ -find_reached_top=ورقے دے شروع تے پُج ڳیا، تلوں جاری کیتا ڳیا -find_reached_bottom=ورقے دے پاند تے پُڄ ڳیا، اُتوں شروع کیتا ڳیا -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ جمع (کل) ]} -find_match_count[one]={{current}} دا {{total}} موازنہ کرو -find_match_count[two]={{current}} دا {{total}} موازنہ -find_match_count[few]={{current}} دا {{total}} موازنہ -find_match_count[many]={{current}} دا {{total}} موازنہ -find_match_count[other]={{current}} دا {{total}} موازنہ -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ جمع (حد) ]} -find_match_count_limit[zero]={{limit}} کنوں زیادہ مماثلتاں۔ -find_match_count_limit[one]={{limit}} مماثل کنوں ودھ -find_match_count_limit[two]={{limit}} کنوں زیادہ مماثلتاں۔ -find_match_count_limit[few]={{limit}} مماثلاں کنوں ودھ -find_match_count_limit[many]={{limit}} مماثلاں کنوں ودھ -find_match_count_limit[other]={{limit}} مماثلاں کنوں ودھ -find_not_found=فقرہ نئیں ملیا - -# Predefined zoom values -page_scale_width=ورقے دی چوڑائی -page_scale_fit=ورقہ فٹنگ -page_scale_auto=آپوں آپ زوم -page_scale_actual=اصل میچا -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=PDF لوڈ کریندے ویلھے نقص آ ڳیا۔ -invalid_file_error=غلط یا خراب شدہ PDF فائل۔ -missing_file_error=PDF فائل غائب ہے۔ -unexpected_response_error=سرور دا غیر متوقع جواب۔ -rendering_error=ورقہ رینڈر کریندے ویلھے ہک خرابی پیش آڳئی۔ - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} تشریح] -password_label=ایہ PDF فائل کھولݨ کیتے پاس ورڈ درج کرو۔ -password_invalid=غلط پاس ورڈ: براہ مہربانی ولدا کوشش کرو۔ -password_ok=ٹھیک ہے -password_cancel=منسوخ کرو - -printing_not_supported=چتاوݨی: چھپائی ایں براؤزر تے پوری طراں معاونت شدہ کائنی۔ -printing_not_ready=چتاوݨی: PDF چھپائی کیتے پوری طراں لوڈ نئیں تھئی۔ -web_fonts_disabled=ویب فونٹس غیر فعال ہن: ایمبیڈڈ PDF فونٹس استعمال کرݨ کنوں قاصر ہن - -# Editor -editor_free_text2.title=متن -editor_free_text2_label=متن -editor_ink2.title=چھکو -editor_ink2_label=چھکو - -editor_stamp.title=ہک تصویر شامل کرو -editor_stamp_label=ہک تصویر شامل کرو - -free_text2_default_content=ٹائپنگ شروع کرو … - -# Editor Parameters -editor_free_text_color=رنگ -editor_free_text_size=سائز -editor_ink_color=رنگ -editor_ink_thickness=ٹھولھ -editor_ink_opacity=دھندلاپن - -# Editor aria -editor_free_text2_aria_label=ٹیکسٹ ایڈیٹر -editor_ink2_aria_label=ڈرا ایڈیٹر -editor_ink_canvas_aria_label=صارف دی بݨائی ہوئی تصویر diff --git a/static/pdf.js/locale/sl/viewer.ftl b/static/pdf.js/locale/sl/viewer.ftl new file mode 100644 index 00000000..7cda4ec2 --- /dev/null +++ b/static/pdf.js/locale/sl/viewer.ftl @@ -0,0 +1,394 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Prejšnja stran +pdfjs-previous-button-label = Nazaj +pdfjs-next-button = + .title = Naslednja stran +pdfjs-next-button-label = Naprej +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Stran +# 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 = od { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } od { $pagesCount }) +pdfjs-zoom-out-button = + .title = Pomanjšaj +pdfjs-zoom-out-button-label = Pomanjšaj +pdfjs-zoom-in-button = + .title = Povečaj +pdfjs-zoom-in-button-label = Povečaj +pdfjs-zoom-select = + .title = Povečava +pdfjs-presentation-mode-button = + .title = Preklopi v način predstavitve +pdfjs-presentation-mode-button-label = Način predstavitve +pdfjs-open-file-button = + .title = Odpri datoteko +pdfjs-open-file-button-label = Odpri +pdfjs-print-button = + .title = Natisni +pdfjs-print-button-label = Natisni +pdfjs-save-button = + .title = Shrani +pdfjs-save-button-label = Shrani +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Prenesi +# 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 = Prenesi +pdfjs-bookmark-button = + .title = Trenutna stran (prikaži URL, ki vodi do trenutne strani) +pdfjs-bookmark-button-label = Na trenutno stran + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Orodja +pdfjs-tools-button-label = Orodja +pdfjs-first-page-button = + .title = Pojdi na prvo stran +pdfjs-first-page-button-label = Pojdi na prvo stran +pdfjs-last-page-button = + .title = Pojdi na zadnjo stran +pdfjs-last-page-button-label = Pojdi na zadnjo stran +pdfjs-page-rotate-cw-button = + .title = Zavrti v smeri urnega kazalca +pdfjs-page-rotate-cw-button-label = Zavrti v smeri urnega kazalca +pdfjs-page-rotate-ccw-button = + .title = Zavrti v nasprotni smeri urnega kazalca +pdfjs-page-rotate-ccw-button-label = Zavrti v nasprotni smeri urnega kazalca +pdfjs-cursor-text-select-tool-button = + .title = Omogoči orodje za izbor besedila +pdfjs-cursor-text-select-tool-button-label = Orodje za izbor besedila +pdfjs-cursor-hand-tool-button = + .title = Omogoči roko +pdfjs-cursor-hand-tool-button-label = Roka +pdfjs-scroll-page-button = + .title = Uporabi drsenje po strani +pdfjs-scroll-page-button-label = Drsenje po strani +pdfjs-scroll-vertical-button = + .title = Uporabi navpično drsenje +pdfjs-scroll-vertical-button-label = Navpično drsenje +pdfjs-scroll-horizontal-button = + .title = Uporabi vodoravno drsenje +pdfjs-scroll-horizontal-button-label = Vodoravno drsenje +pdfjs-scroll-wrapped-button = + .title = Uporabi ovito drsenje +pdfjs-scroll-wrapped-button-label = Ovito drsenje +pdfjs-spread-none-button = + .title = Ne združuj razponov strani +pdfjs-spread-none-button-label = Brez razponov +pdfjs-spread-odd-button = + .title = Združuj razpone strani z začetkom pri lihih straneh +pdfjs-spread-odd-button-label = Lihi razponi +pdfjs-spread-even-button = + .title = Združuj razpone strani z začetkom pri sodih straneh +pdfjs-spread-even-button-label = Sodi razponi + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Lastnosti dokumenta … +pdfjs-document-properties-button-label = Lastnosti dokumenta … +pdfjs-document-properties-file-name = Ime datoteke: +pdfjs-document-properties-file-size = Velikost datoteke: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajtov) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bajtov) +pdfjs-document-properties-title = Ime: +pdfjs-document-properties-author = Avtor: +pdfjs-document-properties-subject = Tema: +pdfjs-document-properties-keywords = Ključne besede: +pdfjs-document-properties-creation-date = Datum nastanka: +pdfjs-document-properties-modification-date = Datum spremembe: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Ustvaril: +pdfjs-document-properties-producer = Izdelovalec PDF: +pdfjs-document-properties-version = Različica PDF: +pdfjs-document-properties-page-count = Število strani: +pdfjs-document-properties-page-size = Velikost strani: +pdfjs-document-properties-page-size-unit-inches = palcev +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = pokončno +pdfjs-document-properties-page-size-orientation-landscape = ležeče +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Pismo +pdfjs-document-properties-page-size-name-legal = Pravno + +## 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 = Hitri spletni ogled: +pdfjs-document-properties-linearized-yes = Da +pdfjs-document-properties-linearized-no = Ne +pdfjs-document-properties-close-button = Zapri + +## Print + +pdfjs-print-progress-message = Priprava dokumenta na tiskanje … +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress } % +pdfjs-print-progress-close-button = Prekliči +pdfjs-printing-not-supported = Opozorilo: ta brskalnik ne podpira vseh možnosti tiskanja. +pdfjs-printing-not-ready = Opozorilo: PDF ni v celoti naložen za tiskanje. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Preklopi stransko vrstico +pdfjs-toggle-sidebar-notification-button = + .title = Preklopi stransko vrstico (dokument vsebuje oris/priponke/plasti) +pdfjs-toggle-sidebar-button-label = Preklopi stransko vrstico +pdfjs-document-outline-button = + .title = Prikaži oris dokumenta (dvokliknite za razširitev/strnitev vseh predmetov) +pdfjs-document-outline-button-label = Oris dokumenta +pdfjs-attachments-button = + .title = Prikaži priponke +pdfjs-attachments-button-label = Priponke +pdfjs-layers-button = + .title = Prikaži plasti (dvokliknite za ponastavitev vseh plasti na privzeto stanje) +pdfjs-layers-button-label = Plasti +pdfjs-thumbs-button = + .title = Prikaži sličice +pdfjs-thumbs-button-label = Sličice +pdfjs-current-outline-item-button = + .title = Najdi trenutni predmet orisa +pdfjs-current-outline-item-button-label = Trenutni predmet orisa +pdfjs-findbar-button = + .title = Iskanje po dokumentu +pdfjs-findbar-button-label = Najdi +pdfjs-additional-layers = Dodatne plasti + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Stran { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Sličica strani { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Najdi + .placeholder = Najdi v dokumentu … +pdfjs-find-previous-button = + .title = Najdi prejšnjo ponovitev iskanega +pdfjs-find-previous-button-label = Najdi nazaj +pdfjs-find-next-button = + .title = Najdi naslednjo ponovitev iskanega +pdfjs-find-next-button-label = Najdi naprej +pdfjs-find-highlight-checkbox = Označi vse +pdfjs-find-match-case-checkbox-label = Razlikuj velike/male črke +pdfjs-find-match-diacritics-checkbox-label = Razlikuj diakritične znake +pdfjs-find-entire-word-checkbox-label = Cele besede +pdfjs-find-reached-top = Dosežen začetek dokumenta iz smeri konca +pdfjs-find-reached-bottom = Doseženo konec dokumenta iz smeri začetka +# 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] Zadetek { $current } od { $total } + [two] Zadetek { $current } od { $total } + [few] Zadetek { $current } od { $total } + *[other] Zadetek { $current } od { $total } + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Več kot { $limit } zadetek + [two] Več kot { $limit } zadetka + [few] Več kot { $limit } zadetki + *[other] Več kot { $limit } zadetkov + } +pdfjs-find-not-found = Iskanega ni mogoče najti + +## Predefined zoom values + +pdfjs-page-scale-width = Širina strani +pdfjs-page-scale-fit = Prilagodi stran +pdfjs-page-scale-auto = Samodejno +pdfjs-page-scale-actual = Dejanska velikost +# 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 = Stran { $page } + +## Loading indicator messages + +pdfjs-loading-error = Med nalaganjem datoteke PDF je prišlo do napake. +pdfjs-invalid-file-error = Neveljavna ali pokvarjena datoteka PDF. +pdfjs-missing-file-error = Ni datoteke PDF. +pdfjs-unexpected-response-error = Nepričakovan odgovor strežnika. +pdfjs-rendering-error = Med pripravljanjem strani je prišlo do napake! + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Opomba vrste { $type }] + +## Password + +pdfjs-password-label = Vnesite geslo za odpiranje te datoteke PDF. +pdfjs-password-invalid = Neveljavno geslo. Poskusite znova. +pdfjs-password-ok-button = V redu +pdfjs-password-cancel-button = Prekliči +pdfjs-web-fonts-disabled = Spletne pisave so onemogočene: vgradnih pisav za PDF ni mogoče uporabiti. + +## Editing + +pdfjs-editor-free-text-button = + .title = Besedilo +pdfjs-editor-free-text-button-label = Besedilo +pdfjs-editor-ink-button = + .title = Riši +pdfjs-editor-ink-button-label = Riši +pdfjs-editor-stamp-button = + .title = Dodajanje ali urejanje slik +pdfjs-editor-stamp-button-label = Dodajanje ali urejanje slik +pdfjs-editor-highlight-button = + .title = Označevalnik +pdfjs-editor-highlight-button-label = Označevalnik + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Odstrani risbo +pdfjs-editor-remove-freetext-button = + .title = Odstrani besedilo +pdfjs-editor-remove-stamp-button = + .title = Odstrani sliko +pdfjs-editor-remove-highlight-button = + .title = Odstrani označbo + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Barva +pdfjs-editor-free-text-size-input = Velikost +pdfjs-editor-ink-color-input = Barva +pdfjs-editor-ink-thickness-input = Debelina +pdfjs-editor-ink-opacity-input = Neprosojnost +pdfjs-editor-stamp-add-image-button = + .title = Dodaj sliko +pdfjs-editor-stamp-add-image-button-label = Dodaj sliko +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Debelina +pdfjs-editor-free-highlight-thickness-title = + .title = Spremeni debelino pri označevanju nebesedilnih elementov +pdfjs-free-text = + .aria-label = Urejevalnik besedila +pdfjs-free-text-default-content = Začnite tipkati … +pdfjs-ink = + .aria-label = Urejevalnik risanja +pdfjs-ink-canvas = + .aria-label = Uporabnikova slika + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Nadomestno besedilo +pdfjs-editor-alt-text-edit-button-label = Uredi nadomestno besedilo +pdfjs-editor-alt-text-dialog-label = Izberite možnost +pdfjs-editor-alt-text-dialog-description = Nadomestno besedilo se prikaže tistim, ki ne vidijo slike, ali če se ta ne naloži. +pdfjs-editor-alt-text-add-description-label = Dodaj opis +pdfjs-editor-alt-text-add-description-description = Poskušajte v enem ali dveh stavkih opisati motiv, okolje ali dejanja. +pdfjs-editor-alt-text-mark-decorative-label = Označi kot okrasno +pdfjs-editor-alt-text-mark-decorative-description = Uporablja se za slike, ki služijo samo okrasu, na primer obrobe ali vodne žige. +pdfjs-editor-alt-text-cancel-button = Prekliči +pdfjs-editor-alt-text-save-button = Shrani +pdfjs-editor-alt-text-decorative-tooltip = Označeno kot okrasno +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Na primer: "Mladenič sedi za mizo pri jedi" + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Zgornji levi kot – spremeni velikost +pdfjs-editor-resizer-label-top-middle = Zgoraj na sredini – spremeni velikost +pdfjs-editor-resizer-label-top-right = Zgornji desni kot – spremeni velikost +pdfjs-editor-resizer-label-middle-right = Desno na sredini – spremeni velikost +pdfjs-editor-resizer-label-bottom-right = Spodnji desni kot – spremeni velikost +pdfjs-editor-resizer-label-bottom-middle = Spodaj na sredini – spremeni velikost +pdfjs-editor-resizer-label-bottom-left = Spodnji levi kot – spremeni velikost +pdfjs-editor-resizer-label-middle-left = Levo na sredini – spremeni velikost + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Barva označbe +pdfjs-editor-colorpicker-button = + .title = Spremeni barvo +pdfjs-editor-colorpicker-dropdown = + .aria-label = Izbira barve +pdfjs-editor-colorpicker-yellow = + .title = Rumena +pdfjs-editor-colorpicker-green = + .title = Zelena +pdfjs-editor-colorpicker-blue = + .title = Modra +pdfjs-editor-colorpicker-pink = + .title = Roza +pdfjs-editor-colorpicker-red = + .title = Rdeča + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Prikaži vse +pdfjs-editor-highlight-show-all-button = + .title = Prikaži vse diff --git a/static/pdf.js/locale/sl/viewer.properties b/static/pdf.js/locale/sl/viewer.properties deleted file mode 100644 index 29254c12..00000000 --- a/static/pdf.js/locale/sl/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Prejšnja stran -previous_label=Nazaj -next.title=Naslednja stran -next_label=Naprej - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Stran -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=od {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} od {{pagesCount}}) - -zoom_out.title=Pomanjšaj -zoom_out_label=Pomanjšaj -zoom_in.title=Povečaj -zoom_in_label=Povečaj -zoom.title=Povečava -presentation_mode.title=Preklopi v način predstavitve -presentation_mode_label=Način predstavitve -open_file.title=Odpri datoteko -open_file_label=Odpri -print.title=Natisni -print_label=Natisni -save.title=Shrani -save_label=Shrani -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Prenesi -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Prenesi -bookmark1.title=Trenutna stran (prikaži URL, ki vodi do trenutne strani) -bookmark1_label=Na trenutno stran -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Odpri v programu -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Odpri v programu - -# Secondary toolbar and context menu -tools.title=Orodja -tools_label=Orodja -first_page.title=Pojdi na prvo stran -first_page_label=Pojdi na prvo stran -last_page.title=Pojdi na zadnjo stran -last_page_label=Pojdi na zadnjo stran -page_rotate_cw.title=Zavrti v smeri urnega kazalca -page_rotate_cw_label=Zavrti v smeri urnega kazalca -page_rotate_ccw.title=Zavrti v nasprotni smeri urnega kazalca -page_rotate_ccw_label=Zavrti v nasprotni smeri urnega kazalca - -cursor_text_select_tool.title=Omogoči orodje za izbor besedila -cursor_text_select_tool_label=Orodje za izbor besedila -cursor_hand_tool.title=Omogoči roko -cursor_hand_tool_label=Roka - -scroll_page.title=Uporabi drsenje po strani -scroll_page_label=Drsenje po strani -scroll_vertical.title=Uporabi navpično drsenje -scroll_vertical_label=Navpično drsenje -scroll_horizontal.title=Uporabi vodoravno drsenje -scroll_horizontal_label=Vodoravno drsenje -scroll_wrapped.title=Uporabi ovito drsenje -scroll_wrapped_label=Ovito drsenje - -spread_none.title=Ne združuj razponov strani -spread_none_label=Brez razponov -spread_odd.title=Združuj razpone strani z začetkom pri lihih straneh -spread_odd_label=Lihi razponi -spread_even.title=Združuj razpone strani z začetkom pri sodih straneh -spread_even_label=Sodi razponi - -# Document properties dialog box -document_properties.title=Lastnosti dokumenta … -document_properties_label=Lastnosti dokumenta … -document_properties_file_name=Ime datoteke: -document_properties_file_size=Velikost datoteke: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bajtov) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bajtov) -document_properties_title=Ime: -document_properties_author=Avtor: -document_properties_subject=Tema: -document_properties_keywords=Ključne besede: -document_properties_creation_date=Datum nastanka: -document_properties_modification_date=Datum spremembe: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Ustvaril: -document_properties_producer=Izdelovalec PDF: -document_properties_version=Različica PDF: -document_properties_page_count=Število strani: -document_properties_page_size=Velikost strani: -document_properties_page_size_unit_inches=palcev -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=pokončno -document_properties_page_size_orientation_landscape=ležeče -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Pismo -document_properties_page_size_name_legal=Pravno -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Hitri spletni ogled: -document_properties_linearized_yes=Da -document_properties_linearized_no=Ne -document_properties_close=Zapri - -print_progress_message=Priprava dokumenta na tiskanje … -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}} % -print_progress_close=Prekliči - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Preklopi stransko vrstico -toggle_sidebar_notification2.title=Preklopi stransko vrstico (dokument vsebuje oris/priponke/plasti) -toggle_sidebar_label=Preklopi stransko vrstico -document_outline.title=Prikaži oris dokumenta (dvokliknite za razširitev/strnitev vseh predmetov) -document_outline_label=Oris dokumenta -attachments.title=Prikaži priponke -attachments_label=Priponke -layers.title=Prikaži plasti (dvokliknite za ponastavitev vseh plasti na privzeto stanje) -layers_label=Plasti -thumbs.title=Prikaži sličice -thumbs_label=Sličice -current_outline_item.title=Najdi trenutni predmet orisa -current_outline_item_label=Trenutni predmet orisa -findbar.title=Iskanje po dokumentu -findbar_label=Najdi - -additional_layers=Dodatne plasti -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Stran {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Stran {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Sličica strani {{page}} - -# Find panel button title and messages -find_input.title=Najdi -find_input.placeholder=Najdi v dokumentu … -find_previous.title=Najdi prejšnjo ponovitev iskanega -find_previous_label=Najdi nazaj -find_next.title=Najdi naslednjo ponovitev iskanega -find_next_label=Najdi naprej -find_highlight=Označi vse -find_match_case_label=Razlikuj velike/male črke -find_match_diacritics_label=Razlikuj diakritične znake -find_entire_word_label=Cele besede -find_reached_top=Dosežen začetek dokumenta iz smeri konca -find_reached_bottom=Doseženo konec dokumenta iz smeri začetka -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]=Zadetek {{current}} od {{total}} -find_match_count[two]=Zadetek {{current}} od {{total}} -find_match_count[few]=Zadetek {{current}} od {{total}} -find_match_count[many]=Zadetek {{current}} od {{total}} -find_match_count[other]=Zadetek {{current}} od {{total}} -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Več kot {{limit}} zadetkov -find_match_count_limit[one]=Več kot {{limit}} zadetek -find_match_count_limit[two]=Več kot {{limit}} zadetka -find_match_count_limit[few]=Več kot {{limit}} zadetki -find_match_count_limit[many]=Več kot {{limit}} zadetkov -find_match_count_limit[other]=Več kot {{limit}} zadetkov -find_not_found=Iskanega ni mogoče najti - -# Predefined zoom values -page_scale_width=Širina strani -page_scale_fit=Prilagodi stran -page_scale_auto=Samodejno -page_scale_actual=Dejanska velikost -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}} % - -# Loading indicator messages -loading_error=Med nalaganjem datoteke PDF je prišlo do napake. -invalid_file_error=Neveljavna ali pokvarjena datoteka PDF. -missing_file_error=Ni datoteke PDF. -unexpected_response_error=Nepričakovan odgovor strežnika. -rendering_error=Med pripravljanjem strani je prišlo do napake! - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Opomba vrste {{type}}] -password_label=Vnesite geslo za odpiranje te datoteke PDF. -password_invalid=Neveljavno geslo. Poskusite znova. -password_ok=V redu -password_cancel=Prekliči - -printing_not_supported=Opozorilo: ta brskalnik ne podpira vseh možnosti tiskanja. -printing_not_ready=Opozorilo: PDF ni v celoti naložen za tiskanje. -web_fonts_disabled=Spletne pisave so onemogočene: vgradnih pisav za PDF ni mogoče uporabiti. - -# Editor -editor_free_text2.title=Besedilo -editor_free_text2_label=Besedilo -editor_ink2.title=Riši -editor_ink2_label=Riši - -editor_stamp1.title=Dodajanje ali urejanje slik -editor_stamp1_label=Dodajanje ali urejanje slik - -free_text2_default_content=Začnite tipkati … - -# Editor Parameters -editor_free_text_color=Barva -editor_free_text_size=Velikost -editor_ink_color=Barva -editor_ink_thickness=Debelina -editor_ink_opacity=Neprosojnost - -editor_stamp_add_image_label=Dodaj sliko -editor_stamp_add_image.title=Dodaj sliko - -# Editor aria -editor_free_text2_aria_label=Urejevalnik besedila -editor_ink2_aria_label=Urejevalnik risanja -editor_ink_canvas_aria_label=Uporabnikova slika - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Nadomestno besedilo -editor_alt_text_edit_button_label=Uredi nadomestno besedilo -editor_alt_text_dialog_label=Izberite možnost -editor_alt_text_dialog_description=Nadomestno besedilo se prikaže tistim, ki ne vidijo slike, ali če se ta ne naloži. -editor_alt_text_add_description_label=Dodaj opis -editor_alt_text_add_description_description=Poskušajte v enem ali dveh stavkih opisati motiv, okolje ali dejanja. -editor_alt_text_mark_decorative_label=Označi kot okrasno -editor_alt_text_mark_decorative_description=Uporablja se za slike, ki služijo samo okrasu, na primer obrobe ali vodne žige. -editor_alt_text_cancel_button=Prekliči -editor_alt_text_save_button=Shrani -editor_alt_text_decorative_tooltip=Označeno kot okrasno -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=Na primer: "Mladenič sedi za mizo pri jedi" diff --git a/static/pdf.js/locale/son/viewer.ftl b/static/pdf.js/locale/son/viewer.ftl new file mode 100644 index 00000000..fa4f6b1f --- /dev/null +++ b/static/pdf.js/locale/son/viewer.ftl @@ -0,0 +1,206 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Moo bisante +pdfjs-previous-button-label = Bisante +pdfjs-next-button = + .title = Jinehere moo +pdfjs-next-button-label = Jine +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Moo +# 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 } ra +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } ka hun { $pagesCount }) ra +pdfjs-zoom-out-button = + .title = Nakasandi +pdfjs-zoom-out-button-label = Nakasandi +pdfjs-zoom-in-button = + .title = Bebbeerandi +pdfjs-zoom-in-button-label = Bebbeerandi +pdfjs-zoom-select = + .title = Bebbeerandi +pdfjs-presentation-mode-button = + .title = Bere cebeyan alhaali +pdfjs-presentation-mode-button-label = Cebeyan alhaali +pdfjs-open-file-button = + .title = Tuku feeri +pdfjs-open-file-button-label = Feeri +pdfjs-print-button = + .title = Kar +pdfjs-print-button-label = Kar + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Goyjinawey +pdfjs-tools-button-label = Goyjinawey +pdfjs-first-page-button = + .title = Koy moo jinaa ga +pdfjs-first-page-button-label = Koy moo jinaa ga +pdfjs-last-page-button = + .title = Koy moo koraa ga +pdfjs-last-page-button-label = Koy moo koraa ga +pdfjs-page-rotate-cw-button = + .title = Kuubi kanbe guma here +pdfjs-page-rotate-cw-button-label = Kuubi kanbe guma here +pdfjs-page-rotate-ccw-button = + .title = Kuubi kanbe wowa here +pdfjs-page-rotate-ccw-button-label = Kuubi kanbe wowa here + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Takadda mayrawey… +pdfjs-document-properties-button-label = Takadda mayrawey… +pdfjs-document-properties-file-name = Tuku maa: +pdfjs-document-properties-file-size = Tuku adadu: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = KB { $size_kb } (cebsu-ize { $size_b }) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = MB { $size_mb } (cebsu-ize { $size_b }) +pdfjs-document-properties-title = Tiiramaa: +pdfjs-document-properties-author = Hantumkaw: +pdfjs-document-properties-subject = Dalil: +pdfjs-document-properties-keywords = Kufalkalimawey: +pdfjs-document-properties-creation-date = Teeyan han: +pdfjs-document-properties-modification-date = Barmayan han: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Teekaw: +pdfjs-document-properties-producer = PDF berandikaw: +pdfjs-document-properties-version = PDF dumi: +pdfjs-document-properties-page-count = Moo hinna: + +## 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-close-button = Daabu + +## Print + +pdfjs-print-progress-message = Goo ma takaddaa soolu k'a kar se… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Naŋ +pdfjs-printing-not-supported = Yaamar: Karyan ši tee ka timme nda ceecikaa woo. +pdfjs-printing-not-ready = Yaamar: PDF ši zunbu ka timme karyan še. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Kanjari ceraw zuu +pdfjs-toggle-sidebar-button-label = Kanjari ceraw zuu +pdfjs-document-outline-button = + .title = Takaddaa korfur alhaaloo cebe (naagu cee hinka ka haya-izey kul hayandi/kankamandi) +pdfjs-document-outline-button-label = Takadda filla-boŋ +pdfjs-attachments-button = + .title = Hangarey cebe +pdfjs-attachments-button-label = Hangarey +pdfjs-thumbs-button = + .title = Kabeboy biyey cebe +pdfjs-thumbs-button-label = Kabeboy biyey +pdfjs-findbar-button = + .title = Ceeci takaddaa ra +pdfjs-findbar-button-label = Ceeci + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = { $page } moo +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Kabeboy bii { $page } moo še + +## Find panel button title and messages + +pdfjs-find-input = + .title = Ceeci + .placeholder = Ceeci takaddaa ra… +pdfjs-find-previous-button = + .title = Kalimaɲaŋoo bangayri bisantaa ceeci +pdfjs-find-previous-button-label = Bisante +pdfjs-find-next-button = + .title = Kalimaɲaŋoo hiino bangayroo ceeci +pdfjs-find-next-button-label = Jine +pdfjs-find-highlight-checkbox = Ikul šilbay +pdfjs-find-match-case-checkbox-label = Harfu-beeriyan hawgay +pdfjs-find-reached-top = A too moŋoo boŋoo, koy jine ka šinitin nda cewoo +pdfjs-find-reached-bottom = A too moɲoo cewoo, koy jine šintioo ga +pdfjs-find-not-found = Kalimaɲaa mana duwandi + +## Predefined zoom values + +pdfjs-page-scale-width = Mooo hayyan +pdfjs-page-scale-fit = Moo sawayan +pdfjs-page-scale-auto = Boŋše azzaati barmayyan +pdfjs-page-scale-actual = Adadu cimi +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = Firka bangay kaŋ PDF goo ma zumandi. +pdfjs-invalid-file-error = PDF tuku laala wala laybante. +pdfjs-missing-file-error = PDF tuku kumante. +pdfjs-unexpected-response-error = Manti feršikaw tuuruyan maatante. +pdfjs-rendering-error = Firka bangay kaŋ moɲoo goo ma willandi. + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = { $type } maasa-caw] + +## Password + +pdfjs-password-label = Šennikufal dam ka PDF tukoo woo feeri. +pdfjs-password-invalid = Šennikufal laalo. Ceeci koyne taare. +pdfjs-password-ok-button = Ayyo +pdfjs-password-cancel-button = Naŋ +pdfjs-web-fonts-disabled = Interneti šigirawey kay: ši hin ka goy nda PDF šigira hurantey. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/son/viewer.properties b/static/pdf.js/locale/son/viewer.properties deleted file mode 100644 index cd9f5294..00000000 --- a/static/pdf.js/locale/son/viewer.properties +++ /dev/null @@ -1,152 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Moo bisante -previous_label=Bisante -next.title=Jinehere moo -next_label=Jine - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Moo -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages={{pagesCount}} ra -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} ka hun {{pagesCount}}) ra - -zoom_out.title=Nakasandi -zoom_out_label=Nakasandi -zoom_in.title=Bebbeerandi -zoom_in_label=Bebbeerandi -zoom.title=Bebbeerandi -presentation_mode.title=Bere cebeyan alhaali -presentation_mode_label=Cebeyan alhaali -open_file.title=Tuku feeri -open_file_label=Feeri -print.title=Kar -print_label=Kar - -# Secondary toolbar and context menu -tools.title=Goyjinawey -tools_label=Goyjinawey -first_page.title=Koy moo jinaa ga -first_page_label=Koy moo jinaa ga -last_page.title=Koy moo koraa ga -last_page_label=Koy moo koraa ga -page_rotate_cw.title=Kuubi kanbe guma here -page_rotate_cw_label=Kuubi kanbe guma here -page_rotate_ccw.title=Kuubi kanbe wowa here -page_rotate_ccw_label=Kuubi kanbe wowa here - - -# Document properties dialog box -document_properties.title=Takadda mayrawey… -document_properties_label=Takadda mayrawey… -document_properties_file_name=Tuku maa: -document_properties_file_size=Tuku adadu: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb=KB {{size_kb}} (cebsu-ize {{size_b}}) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb=MB {{size_mb}} (cebsu-ize {{size_b}}) -document_properties_title=Tiiramaa: -document_properties_author=Hantumkaw: -document_properties_subject=Dalil: -document_properties_keywords=Kufalkalimawey: -document_properties_creation_date=Teeyan han: -document_properties_modification_date=Barmayan han: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Teekaw: -document_properties_producer=PDF berandikaw: -document_properties_version=PDF dumi: -document_properties_page_count=Moo hinna: -document_properties_close=Daabu - -print_progress_message=Goo ma takaddaa soolu k'a kar se… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Naŋ - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Kanjari ceraw zuu -toggle_sidebar_label=Kanjari ceraw zuu -document_outline.title=Takaddaa korfur alhaaloo cebe (naagu cee hinka ka haya-izey kul hayandi/kankamandi) -document_outline_label=Takadda filla-boŋ -attachments.title=Hangarey cebe -attachments_label=Hangarey -thumbs.title=Kabeboy biyey cebe -thumbs_label=Kabeboy biyey -findbar.title=Ceeci takaddaa ra -findbar_label=Ceeci - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title={{page}} moo -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Kabeboy bii {{page}} moo še - -# Find panel button title and messages -find_input.title=Ceeci -find_input.placeholder=Ceeci takaddaa ra… -find_previous.title=Kalimaɲaŋoo bangayri bisantaa ceeci -find_previous_label=Bisante -find_next.title=Kalimaɲaŋoo hiino bangayroo ceeci -find_next_label=Jine -find_highlight=Ikul šilbay -find_match_case_label=Harfu-beeriyan hawgay -find_reached_top=A too moŋoo boŋoo, koy jine ka šinitin nda cewoo -find_reached_bottom=A too moɲoo cewoo, koy jine šintioo ga -find_not_found=Kalimaɲaa mana duwandi - -# Predefined zoom values -page_scale_width=Mooo hayyan -page_scale_fit=Moo sawayan -page_scale_auto=Boŋše azzaati barmayyan -page_scale_actual=Adadu cimi -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=Firka bangay kaŋ PDF goo ma zumandi. -invalid_file_error=PDF tuku laala wala laybante. -missing_file_error=PDF tuku kumante. -unexpected_response_error=Manti feršikaw tuuruyan maatante. - -rendering_error=Firka bangay kaŋ moɲoo goo ma willandi. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt={{type}} maasa-caw] -password_label=Šennikufal dam ka PDF tukoo woo feeri. -password_invalid=Šennikufal laalo. Ceeci koyne taare. -password_ok=Ayyo -password_cancel=Naŋ - -printing_not_supported=Yaamar: Karyan ši tee ka timme nda ceecikaa woo. -printing_not_ready=Yaamar: PDF ši zunbu ka timme karyan še. -web_fonts_disabled=Interneti šigirawey kay: ši hin ka goy nda PDF šigira hurantey. - diff --git a/static/pdf.js/locale/sq/viewer.ftl b/static/pdf.js/locale/sq/viewer.ftl new file mode 100644 index 00000000..be5b273d --- /dev/null +++ b/static/pdf.js/locale/sq/viewer.ftl @@ -0,0 +1,387 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Faqja e Mëparshme +pdfjs-previous-button-label = E mëparshmja +pdfjs-next-button = + .title = Faqja Pasuese +pdfjs-next-button-label = Pasuesja +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Faqe +# 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 = nga { $pagesCount } gjithsej +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } nga { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zvogëlojeni +pdfjs-zoom-out-button-label = Zvogëlojeni +pdfjs-zoom-in-button = + .title = Zmadhojeni +pdfjs-zoom-in-button-label = Zmadhojini +pdfjs-zoom-select = + .title = Zmadhim/Zvogëlim +pdfjs-presentation-mode-button = + .title = Kalo te Mënyra Paraqitje +pdfjs-presentation-mode-button-label = Mënyra Paraqitje +pdfjs-open-file-button = + .title = Hapni Kartelë +pdfjs-open-file-button-label = Hape +pdfjs-print-button = + .title = Shtypje +pdfjs-print-button-label = Shtype +pdfjs-save-button = + .title = Ruaje +pdfjs-save-button-label = Ruaje +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Shkarkojeni +# 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 = Shkarkoje +pdfjs-bookmark-button = + .title = Faqja e Tanishme (Shihni URL nga Faqja e Tanishme) +pdfjs-bookmark-button-label = Faqja e Tanishme + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Mjete +pdfjs-tools-button-label = Mjete +pdfjs-first-page-button = + .title = Kaloni te Faqja e Parë +pdfjs-first-page-button-label = Kaloni te Faqja e Parë +pdfjs-last-page-button = + .title = Kaloni te Faqja e Fundit +pdfjs-last-page-button-label = Kaloni te Faqja e Fundit +pdfjs-page-rotate-cw-button = + .title = Rrotullojeni Në Kahun Orar +pdfjs-page-rotate-cw-button-label = Rrotulloje Në Kahun Orar +pdfjs-page-rotate-ccw-button = + .title = Rrotullojeni Në Kahun Kundërorar +pdfjs-page-rotate-ccw-button-label = Rrotulloje Në Kahun Kundërorar +pdfjs-cursor-text-select-tool-button = + .title = Aktivizo Mjet Përzgjedhjeje Teksti +pdfjs-cursor-text-select-tool-button-label = Mjet Përzgjedhjeje Teksti +pdfjs-cursor-hand-tool-button = + .title = Aktivizo Mjetin Dorë +pdfjs-cursor-hand-tool-button-label = Mjeti Dorë +pdfjs-scroll-page-button = + .title = Përdor Rrëshqitje Në Faqe +pdfjs-scroll-page-button-label = Rrëshqitje Në Faqe +pdfjs-scroll-vertical-button = + .title = Përdor Rrëshqitje Vertikale +pdfjs-scroll-vertical-button-label = Rrëshqitje Vertikale +pdfjs-scroll-horizontal-button = + .title = Përdor Rrëshqitje Horizontale +pdfjs-scroll-horizontal-button-label = Rrëshqitje Horizontale +pdfjs-scroll-wrapped-button = + .title = Përdor Rrëshqitje Me Mbështjellje +pdfjs-scroll-wrapped-button-label = Rrëshqitje Me Mbështjellje + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Veti Dokumenti… +pdfjs-document-properties-button-label = Veti Dokumenti… +pdfjs-document-properties-file-name = Emër kartele: +pdfjs-document-properties-file-size = Madhësi kartele: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajte) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bajte) +pdfjs-document-properties-title = Titull: +pdfjs-document-properties-author = Autor: +pdfjs-document-properties-subject = Subjekt: +pdfjs-document-properties-keywords = Fjalëkyçe: +pdfjs-document-properties-creation-date = Datë Krijimi: +pdfjs-document-properties-modification-date = Datë Ndryshimi: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Krijues: +pdfjs-document-properties-producer = Prodhues PDF-je: +pdfjs-document-properties-version = Version PDF-je: +pdfjs-document-properties-page-count = Numër Faqesh: +pdfjs-document-properties-page-size = Madhësi Faqeje: +pdfjs-document-properties-page-size-unit-inches = inç +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = portret +pdfjs-document-properties-page-size-orientation-landscape = së gjeri +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Parje e Shpjetë në Web: +pdfjs-document-properties-linearized-yes = Po +pdfjs-document-properties-linearized-no = Jo +pdfjs-document-properties-close-button = Mbylleni + +## Print + +pdfjs-print-progress-message = Po përgatitet dokumenti për shtypje… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Anuloje +pdfjs-printing-not-supported = Kujdes: Shtypja s’mbulohet plotësisht nga ky shfletues. +pdfjs-printing-not-ready = Kujdes: PDF-ja s’është ngarkuar plotësisht që ta shtypni. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Shfaqni/Fshihni Anështyllën +pdfjs-toggle-sidebar-notification-button = + .title = Hap/Mbyll Anështylë (dokumenti përmban përvijim/nashkëngjitje/shtresa) +pdfjs-toggle-sidebar-button-label = Shfaq/Fshih Anështyllën +pdfjs-document-outline-button = + .title = Shfaqni Përvijim Dokumenti (dyklikoni që të shfaqen/fshihen krejt elementët) +pdfjs-document-outline-button-label = Përvijim Dokumenti +pdfjs-attachments-button = + .title = Shfaqni Bashkëngjitje +pdfjs-attachments-button-label = Bashkëngjitje +pdfjs-layers-button = + .title = Shfaq Shtresa (dyklikoni që të rikthehen krejt shtresat në gjendjen e tyre parazgjedhje) +pdfjs-layers-button-label = Shtresa +pdfjs-thumbs-button = + .title = Shfaqni Miniatura +pdfjs-thumbs-button-label = Miniatura +pdfjs-current-outline-item-button = + .title = Gjej Objektin e Tanishëm të Përvijuar +pdfjs-current-outline-item-button-label = Objekt i Tanishëm i Përvijuar +pdfjs-findbar-button = + .title = Gjeni në Dokument +pdfjs-findbar-button-label = Gjej +pdfjs-additional-layers = Shtresa Shtesë + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Faqja { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniaturë e Faqes { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Gjej + .placeholder = Gjeni në dokument… +pdfjs-find-previous-button = + .title = Gjeni hasjen e mëparshme të togfjalëshit +pdfjs-find-previous-button-label = E mëparshmja +pdfjs-find-next-button = + .title = Gjeni hasjen pasuese të togfjalëshit +pdfjs-find-next-button-label = Pasuesja +pdfjs-find-highlight-checkbox = Theksoji të tëra +pdfjs-find-match-case-checkbox-label = Siç Është Shkruar +pdfjs-find-match-diacritics-checkbox-label = Me Përputhje Me Shenjat Diakritike +pdfjs-find-entire-word-checkbox-label = Fjalë të Plota +pdfjs-find-reached-top = U mbërrit në krye të dokumentit, vazhduar prej fundit +pdfjs-find-reached-bottom = U mbërrit në fund të dokumentit, vazhduar prej kreut +# 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 } nga { $total } përputhje + *[other] { $current } nga { $total } përputhje + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Më tepër se { $limit } përputhje + *[other] Më tepër se { $limit } përputhje + } +pdfjs-find-not-found = Togfjalësh që s’gjendet + +## Predefined zoom values + +pdfjs-page-scale-width = Gjerësi Faqeje +pdfjs-page-scale-fit = Sa Nxë Faqja +pdfjs-page-scale-auto = Zoom i Vetvetishëm +pdfjs-page-scale-actual = Madhësia Faktike +# 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 = Faqja { $page } + +## Loading indicator messages + +pdfjs-loading-error = Ndodhi një gabim gjatë ngarkimit të PDF-së. +pdfjs-invalid-file-error = Kartelë PDF e pavlefshme ose e dëmtuar. +pdfjs-missing-file-error = Kartelë PDF që mungon. +pdfjs-unexpected-response-error = Përgjigje shërbyesi e papritur. +pdfjs-rendering-error = Ndodhi një gabim gjatë riprodhimit të faqes. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Nënvizim { $type }] + +## Password + +pdfjs-password-label = Jepni fjalëkalimin që të hapet kjo kartelë PDF. +pdfjs-password-invalid = Fjalëkalim i pavlefshëm. Ju lutemi, riprovoni. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Anuloje +pdfjs-web-fonts-disabled = Shkronjat Web janë të çaktivizuara: s’arrihet të përdoren shkronja të trupëzuara në PDF. + +## Editing + +pdfjs-editor-free-text-button = + .title = Tekst +pdfjs-editor-free-text-button-label = Tekst +pdfjs-editor-ink-button = + .title = Vizatoni +pdfjs-editor-ink-button-label = Vizatoni +pdfjs-editor-stamp-button = + .title = Shtoni ose përpunoni figura +pdfjs-editor-stamp-button-label = Shtoni ose përpunoni figura +pdfjs-editor-highlight-button = + .title = Theksim +pdfjs-editor-highlight-button-label = Theksoje +pdfjs-highlight-floating-button = + .title = Theksim +pdfjs-highlight-floating-button1 = + .title = Theksim + .aria-label = Theksim +pdfjs-highlight-floating-button-label = Theksim + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Hiq vizatim +pdfjs-editor-remove-freetext-button = + .title = Hiq tekst +pdfjs-editor-remove-stamp-button = + .title = Hiq figurë +pdfjs-editor-remove-highlight-button = + .title = Hiqe theksimin + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Ngjyrë +pdfjs-editor-free-text-size-input = Madhësi +pdfjs-editor-ink-color-input = Ngjyrë +pdfjs-editor-ink-thickness-input = Trashësi +pdfjs-editor-ink-opacity-input = Patejdukshmëri +pdfjs-editor-stamp-add-image-button = + .title = Shtoni figurë +pdfjs-editor-stamp-add-image-button-label = Shtoni figurë +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Trashësi +pdfjs-editor-free-highlight-thickness-title = + .title = Ndryshoni trashësinë kur theksoni objekte tjetër nga tekst +pdfjs-free-text = + .aria-label = Përpunues Tekstesh +pdfjs-free-text-default-content = Filloni të shtypni… +pdfjs-ink = + .aria-label = Përpunues Vizatimesh +pdfjs-ink-canvas = + .aria-label = Figurë e krijuar nga përdoruesi + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Tekst alternativ +pdfjs-editor-alt-text-edit-button-label = Përpunoni tekst alternativ +pdfjs-editor-alt-text-dialog-label = Zgjidhni një mundësi +pdfjs-editor-alt-text-dialog-description = Teksti alt (tekst alternativ) vjen në ndihmë kur njerëzit s’mund të shohin figurën, ose kur ajo nuk ngarkohet. +pdfjs-editor-alt-text-add-description-label = Shtoni një përshkrim +pdfjs-editor-alt-text-add-description-description = Synoni për 1-2 togfjalësha që përshkruajnë subjektin, rrethanat apo veprimet. +pdfjs-editor-alt-text-mark-decorative-label = Vëri shenjë si dekorative +pdfjs-editor-alt-text-mark-decorative-description = Kjo përdoret për figura zbukuruese, fjala vjen, anë, ose watermark-e. +pdfjs-editor-alt-text-cancel-button = Anuloje +pdfjs-editor-alt-text-save-button = Ruaje +pdfjs-editor-alt-text-decorative-tooltip = Iu vu shenjë si dekorative +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Për shembull, “Një djalosh ulet në një tryezë të hajë” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Cepi i sipërm majtas — ripërmasojeni +pdfjs-editor-resizer-label-top-middle = Mesi i pjesës sipër — ripërmasojeni +pdfjs-editor-resizer-label-top-right = Cepi i sipërm djathtas — ripërmasojeni +pdfjs-editor-resizer-label-middle-right = Djathtas në mes — ripërmasojeni +pdfjs-editor-resizer-label-bottom-right = Cepi i poshtëm djathtas — ripërmasojeni +pdfjs-editor-resizer-label-bottom-middle = Mesi i pjesës poshtë — ripërmasojeni +pdfjs-editor-resizer-label-bottom-left = Cepi i poshtëm — ripërmasojeni +pdfjs-editor-resizer-label-middle-left = Majtas në mes — ripërmasojeni + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Ngjyrë theksimi +pdfjs-editor-colorpicker-button = + .title = Ndryshoni ngjyrë +pdfjs-editor-colorpicker-dropdown = + .aria-label = Zgjedhje ngjyre +pdfjs-editor-colorpicker-yellow = + .title = E verdhë +pdfjs-editor-colorpicker-green = + .title = E gjelbër +pdfjs-editor-colorpicker-blue = + .title = Blu +pdfjs-editor-colorpicker-pink = + .title = Rozë +pdfjs-editor-colorpicker-red = + .title = E kuqe + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Shfaqi krejt +pdfjs-editor-highlight-show-all-button = + .title = Shfaqi krejt diff --git a/static/pdf.js/locale/sq/viewer.properties b/static/pdf.js/locale/sq/viewer.properties deleted file mode 100644 index 51aa9150..00000000 --- a/static/pdf.js/locale/sq/viewer.properties +++ /dev/null @@ -1,247 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Faqja e Mëparshme -previous_label=E mëparshmja -next.title=Faqja Pasuese -next_label=Pasuesja - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Faqe -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=nga {{pagesCount}} gjithsej -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} nga {{pagesCount}}) - -zoom_out.title=Zvogëlojeni -zoom_out_label=Zvogëlojeni -zoom_in.title=Zmadhojeni -zoom_in_label=Zmadhojini -zoom.title=Zmadhim/Zvogëlim -presentation_mode.title=Kalo te Mënyra Paraqitje -presentation_mode_label=Mënyra Paraqitje -open_file.title=Hapni Kartelë -open_file_label=Hape -print.title=Shtypje -print_label=Shtype -save.title=Ruaje -save_label=Ruaje - -bookmark1.title=Faqja e Tanishme (Shihni URL nga Faqja e Tanishme) -bookmark1_label=Faqja e Tanishme - -# Secondary toolbar and context menu -tools.title=Mjete -tools_label=Mjete -first_page.title=Kaloni te Faqja e Parë -first_page_label=Kaloni te Faqja e Parë -last_page.title=Kaloni te Faqja e Fundit -last_page_label=Kaloni te Faqja e Fundit -page_rotate_cw.title=Rrotullojeni Në Kahun Orar -page_rotate_cw_label=Rrotulloje Në Kahun Orar -page_rotate_ccw.title=Rrotullojeni Në Kahun Kundërorar -page_rotate_ccw_label=Rrotulloje Në Kahun Kundërorar - -cursor_text_select_tool.title=Aktivizo Mjet Përzgjedhjeje Teksti -cursor_text_select_tool_label=Mjet Përzgjedhjeje Teksti -cursor_hand_tool.title=Aktivizo Mjetin Dorë -cursor_hand_tool_label=Mjeti Dorë - -scroll_page.title=Përdor Rrëshqitje Në Faqe -scroll_page_label=Rrëshqitje Në Faqe -scroll_vertical.title=Përdor Rrëshqitje Vertikale -scroll_vertical_label=Rrëshqitje Vertikale -scroll_horizontal.title=Përdor Rrëshqitje Horizontale -scroll_horizontal_label=Rrëshqitje Horizontale -scroll_wrapped.title=Përdor Rrëshqitje Me Mbështjellje -scroll_wrapped_label=Rrëshqitje Me Mbështjellje - - -# Document properties dialog box -document_properties.title=Veti Dokumenti… -document_properties_label=Veti Dokumenti… -document_properties_file_name=Emër kartele: -document_properties_file_size=Madhësi kartele: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bajte) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bajte) -document_properties_title=Titull: -document_properties_author=Autor: -document_properties_subject=Subjekt: -document_properties_keywords=Fjalëkyçe: -document_properties_creation_date=Datë Krijimi: -document_properties_modification_date=Datë Ndryshimi: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Krijues: -document_properties_producer=Prodhues PDF-je: -document_properties_version=Version PDF-je: -document_properties_page_count=Numër Faqesh: -document_properties_page_size=Madhësi Faqeje: -document_properties_page_size_unit_inches=inç -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=portret -document_properties_page_size_orientation_landscape=së gjeri -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Parje e Shpjetë në Web: -document_properties_linearized_yes=Po -document_properties_linearized_no=Jo -document_properties_close=Mbylleni - -print_progress_message=Po përgatitet dokumenti për shtypje… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Anuloje - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Shfaqni/Fshihni Anështyllën -toggle_sidebar_notification2.title=Hap/Mbyll Anështylë (dokumenti përmban përvijim/nashkëngjitje/shtresa) -toggle_sidebar_label=Shfaq/Fshih Anështyllën -document_outline.title=Shfaqni Përvijim Dokumenti (dyklikoni që të shfaqen/fshihen krejt elementët) -document_outline_label=Përvijim Dokumenti -attachments.title=Shfaqni Bashkëngjitje -attachments_label=Bashkëngjitje -layers.title=Shfaq Shtresa (dyklikoni që të rikthehen krejt shtresat në gjendjen e tyre parazgjedhje) -layers_label=Shtresa -thumbs.title=Shfaqni Miniatura -thumbs_label=Miniatura -current_outline_item.title=Gjej Objektin e Tanishëm të Përvijuar -current_outline_item_label=Objekt i Tanishëm i Përvijuar -findbar.title=Gjeni në Dokument -findbar_label=Gjej - -additional_layers=Shtresa Shtesë -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Faqja {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Faqja {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniaturë e Faqes {{page}} - -# Find panel button title and messages -find_input.title=Gjej -find_input.placeholder=Gjeni në dokument… -find_previous.title=Gjeni hasjen e mëparshme të togfjalëshit -find_previous_label=E mëparshmja -find_next.title=Gjeni hasjen pasuese të togfjalëshit -find_next_label=Pasuesja -find_highlight=Theksoji të tëra -find_match_case_label=Siç Është Shkruar -find_match_diacritics_label=Me Përputhje Me Shenjat Diakritike -find_entire_word_label=Fjalë të Plota -find_reached_top=U mbërrit në krye të dokumentit, vazhduar prej fundit -find_reached_bottom=U mbërrit në fund të dokumentit, vazhduar prej kreut -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} nga {{total}} përputhje gjithsej -find_match_count[two]={{current}} nga {{total}} përputhje gjithsej -find_match_count[few]={{current}} nga {{total}} përputhje gjithsej -find_match_count[many]={{current}} nga {{total}} përputhje gjithsej -find_match_count[other]={{current}} nga {{total}} përputhje gjithsej -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Më shumë se {{limit}} përputhje -find_match_count_limit[one]=Më shumë se {{limit}} përputhje -find_match_count_limit[two]=Më shumë se {{limit}} përputhje -find_match_count_limit[few]=Më shumë se {{limit}} përputhje -find_match_count_limit[many]=Më shumë se {{limit}} përputhje -find_match_count_limit[other]=Më shumë se {{limit}} përputhje -find_not_found=Togfjalësh që s’gjendet - -# Predefined zoom values -page_scale_width=Gjerësi Faqeje -page_scale_fit=Sa Nxë Faqja -page_scale_auto=Zoom i Vetvetishëm -page_scale_actual=Madhësia Faktike -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=Ndodhi një gabim gjatë ngarkimit të PDF-së. -invalid_file_error=Kartelë PDF e pavlefshme ose e dëmtuar. -missing_file_error=Kartelë PDF që mungon. -unexpected_response_error=Përgjigje shërbyesi e papritur. - -rendering_error=Ndodhi një gabim gjatë riprodhimit të faqes. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Nënvizim {{type}}] -password_label=Jepni fjalëkalimin që të hapet kjo kartelë PDF. -password_invalid=Fjalëkalim i pavlefshëm. Ju lutemi, riprovoni. -password_ok=OK -password_cancel=Anuloje - -printing_not_supported=Kujdes: Shtypja s’mbulohet plotësisht nga ky shfletues. -printing_not_ready=Kujdes: PDF-ja s’është ngarkuar plotësisht që ta shtypni. -web_fonts_disabled=Shkronjat Web janë të çaktivizuara: s’arrihet të përdoren shkronja të trupëzuara në PDF. - -# Editor -editor_free_text2.title=Tekst -editor_free_text2_label=Tekst -editor_ink2.title=Vizatoni -editor_ink2_label=Vizatoni - -free_text2_default_content=Filloni të shtypni… - -# Editor Parameters -editor_free_text_color=Ngjyrë -editor_free_text_size=Madhësi -editor_ink_color=Ngjyrë -editor_ink_thickness=Trashësi -editor_ink_opacity=Patejdukshmëri - -# Editor aria -editor_free_text2_aria_label=Përpunues Tekstesh -editor_ink2_aria_label=Përpunues Vizatimesh -editor_ink_canvas_aria_label=Figurë e krijuar nga përdoruesi diff --git a/static/pdf.js/locale/sr/viewer.ftl b/static/pdf.js/locale/sr/viewer.ftl new file mode 100644 index 00000000..c678d491 --- /dev/null +++ b/static/pdf.js/locale/sr/viewer.ftl @@ -0,0 +1,299 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = Промени на приказ у режиму презентације +pdfjs-presentation-mode-button-label = Режим презентације +pdfjs-open-file-button = + .title = Отвори датотеку +pdfjs-open-file-button-label = Отвори +pdfjs-print-button = + .title = Штампај +pdfjs-print-button-label = Штампај +pdfjs-save-button = + .title = Сачувај +pdfjs-save-button-label = Сачувај +pdfjs-bookmark-button = + .title = Тренутна страница (погледајте URL са тренутне странице) +pdfjs-bookmark-button-label = Тренутна страница +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Отвори у апликацији +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-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 = Скроловање по омоту +pdfjs-spread-none-button = + .title = Немој спајати ширења страница +pdfjs-spread-none-button-label = Без распростирања +pdfjs-spread-odd-button = + .title = Споји ширења страница које почињу непарним бројем +pdfjs-spread-odd-button-label = Непарна распростирања +pdfjs-spread-even-button = + .title = Споји ширења страница које почињу парним бројем +pdfjs-spread-even-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 = Величина датотеке: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } B) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } B) +pdfjs-document-properties-title = Наслов: +pdfjs-document-properties-author = Аутор: +pdfjs-document-properties-subject = Тема: +pdfjs-document-properties-keywords = Кључне речи: +pdfjs-document-properties-creation-date = Датум креирања: +pdfjs-document-properties-modification-date = Датум модификације: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = усправно +pdfjs-document-properties-page-size-orientation-landscape = водоравно +pdfjs-document-properties-page-size-name-a-three = А3 +pdfjs-document-properties-page-size-name-a-four = А4 +pdfjs-document-properties-page-size-name-letter = Слово +pdfjs-document-properties-page-size-name-legal = Права + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = Брз веб приказ: +pdfjs-document-properties-linearized-yes = Да +pdfjs-document-properties-linearized-no = Не +pdfjs-document-properties-close-button = Затвори + +## Print + +pdfjs-print-progress-message = Припремам документ за штампање… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Откажи +pdfjs-printing-not-supported = Упозорење: Штампање није у потпуности подржано у овом прегледачу. +pdfjs-printing-not-ready = Упозорење: PDF није у потпуности учитан за штампу. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Прикажи додатну палету +pdfjs-toggle-sidebar-notification-button = + .title = Прикажи/сакриј бочну траку (документ садржи контуру/прилоге/слојеве) +pdfjs-toggle-sidebar-button-label = Прикажи додатну палету +pdfjs-document-outline-button = + .title = Прикажи структуру документа (двоструким кликом проширујете/скупљате све ставке) +pdfjs-document-outline-button-label = Контура документа +pdfjs-attachments-button = + .title = Прикажи прилоге +pdfjs-attachments-button-label = Прилози +pdfjs-layers-button = + .title = Прикажи слојеве (дупли клик за враћање свих слојева у подразумевано стање) +pdfjs-layers-button-label = Слојеви +pdfjs-thumbs-button = + .title = Прикажи сличице +pdfjs-thumbs-button-label = Сличице +pdfjs-current-outline-item-button = + .title = Пронађите тренутни елемент структуре +pdfjs-current-outline-item-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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Сличица од странице { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Пронађи + .placeholder = Пронађи у документу… +pdfjs-find-previous-button = + .title = Пронађи претходно појављивање фразе +pdfjs-find-previous-button-label = Претходна +pdfjs-find-next-button = + .title = Пронађи следеће појављивање фразе +pdfjs-find-next-button-label = Следећа +pdfjs-find-highlight-checkbox = Истакнути све +pdfjs-find-match-case-checkbox-label = Подударања +pdfjs-find-match-diacritics-checkbox-label = Дијакритика +pdfjs-find-entire-word-checkbox-label = Целе речи +pdfjs-find-reached-top = Достигнут врх документа, наставио са дна +pdfjs-find-reached-bottom = Достигнуто дно документа, наставио са врха +pdfjs-find-not-found = Фраза није пронађена + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = Дошло је до грешке приликом учитавања PDF-а. +pdfjs-invalid-file-error = PDF датотека је неважећа или је оштећена. +pdfjs-missing-file-error = Недостаје PDF датотека. +pdfjs-unexpected-response-error = Неочекиван одговор од сервера. +pdfjs-rendering-error = Дошло је до грешке приликом рендеровања ове странице. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } коментар] + +## Password + +pdfjs-password-label = Унесите лозинку да бисте отворили овај PDF докуменат. +pdfjs-password-invalid = Неисправна лозинка. Покушајте поново. +pdfjs-password-ok-button = У реду +pdfjs-password-cancel-button = Откажи +pdfjs-web-fonts-disabled = Веб фонтови су онемогућени: не могу користити уграђене PDF фонтове. + +## Editing + +pdfjs-editor-free-text-button = + .title = Текст +pdfjs-editor-free-text-button-label = Текст +pdfjs-editor-ink-button = + .title = Цртај +pdfjs-editor-ink-button-label = Цртај +# 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 = Опацитет +pdfjs-free-text = + .aria-label = Уређивач текста +pdfjs-free-text-default-content = Почни куцање… +pdfjs-ink = + .aria-label = Уређивач цртежа +pdfjs-ink-canvas = + .aria-label = Кориснички направљена слика + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/sr/viewer.properties b/static/pdf.js/locale/sr/viewer.properties deleted file mode 100644 index 6fcfcbf4..00000000 --- a/static/pdf.js/locale/sr/viewer.properties +++ /dev/null @@ -1,259 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Претходна страница -previous_label=Претходна -next.title=Следећа страница -next_label=Следећа - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Страница -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=од {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} од {{pagesCount}}) - -zoom_out.title=Умањи -zoom_out_label=Умањи -zoom_in.title=Увеличај -zoom_in_label=Увеличај -zoom.title=Увеличавање -presentation_mode.title=Промени на приказ у режиму презентације -presentation_mode_label=Режим презентације -open_file.title=Отвори датотеку -open_file_label=Отвори -print.title=Штампај -print_label=Штампај - -save.title=Сачувај -save_label=Сачувај -bookmark1.title=Тренутна страница (погледајте URL са тренутне странице) -bookmark1_label=Тренутна страница - -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Отвори у апликацији -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Отвори у апликацији - -# Secondary toolbar and context menu -tools.title=Алатке -tools_label=Алатке -first_page.title=Иди на прву страницу -first_page_label=Иди на прву страницу -last_page.title=Иди на последњу страницу -last_page_label=Иди на последњу страницу -page_rotate_cw.title=Ротирај у смеру казаљке на сату -page_rotate_cw_label=Ротирај у смеру казаљке на сату -page_rotate_ccw.title=Ротирај у смеру супротном од казаљке на сату -page_rotate_ccw_label=Ротирај у смеру супротном од казаљке на сату - -cursor_text_select_tool.title=Омогући алат за селектовање текста -cursor_text_select_tool_label=Алат за селектовање текста -cursor_hand_tool.title=Омогући алат за померање -cursor_hand_tool_label=Алат за померање - -scroll_page.title=Користи скроловање по омоту -scroll_page_label=Скроловање странице -scroll_vertical.title=Користи вертикално скроловање -scroll_vertical_label=Вертикално скроловање -scroll_horizontal.title=Користи хоризонтално скроловање -scroll_horizontal_label=Хоризонтално скроловање -scroll_wrapped.title=Користи скроловање по омоту -scroll_wrapped_label=Скроловање по омоту - -spread_none.title=Немој спајати ширења страница -spread_none_label=Без распростирања -spread_odd.title=Споји ширења страница које почињу непарним бројем -spread_odd_label=Непарна распростирања -spread_even.title=Споји ширења страница које почињу парним бројем -spread_even_label=Парна распростирања - -# Document properties dialog box -document_properties.title=Параметри документа… -document_properties_label=Параметри документа… -document_properties_file_name=Име датотеке: -document_properties_file_size=Величина датотеке: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} B) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} B) -document_properties_title=Наслов: -document_properties_author=Аутор: -document_properties_subject=Тема: -document_properties_keywords=Кључне речи: -document_properties_creation_date=Датум креирања: -document_properties_modification_date=Датум модификације: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Стваралац: -document_properties_producer=PDF произвођач: -document_properties_version=PDF верзија: -document_properties_page_count=Број страница: -document_properties_page_size=Величина странице: -document_properties_page_size_unit_inches=ин -document_properties_page_size_unit_millimeters=мм -document_properties_page_size_orientation_portrait=усправно -document_properties_page_size_orientation_landscape=водоравно -document_properties_page_size_name_a3=А3 -document_properties_page_size_name_a4=А4 -document_properties_page_size_name_letter=Слово -document_properties_page_size_name_legal=Права -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Брз веб приказ: -document_properties_linearized_yes=Да -document_properties_linearized_no=Не -document_properties_close=Затвори - -print_progress_message=Припремам документ за штампање… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Откажи - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Прикажи додатну палету -toggle_sidebar_notification2.title=Прикажи/сакриј бочну траку (документ садржи контуру/прилоге/слојеве) -toggle_sidebar_label=Прикажи додатну палету -document_outline.title=Прикажи структуру документа (двоструким кликом проширујете/скупљате све ставке) -document_outline_label=Контура документа -attachments.title=Прикажи прилоге -attachments_label=Прилози -layers.title=Прикажи слојеве (дупли клик за враћање свих слојева у подразумевано стање) -layers_label=Слојеви -thumbs.title=Прикажи сличице -thumbs_label=Сличице -current_outline_item.title=Пронађите тренутни елемент структуре -current_outline_item_label=Тренутна контура -findbar.title=Пронађи у документу -findbar_label=Пронађи - -additional_layers=Додатни слојеви -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Страница {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Страница {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Сличица од странице {{page}} - -# Find panel button title and messages -find_input.title=Пронађи -find_input.placeholder=Пронађи у документу… -find_previous.title=Пронађи претходно појављивање фразе -find_previous_label=Претходна -find_next.title=Пронађи следеће појављивање фразе -find_next_label=Следећа -find_highlight=Истакнути све -find_match_case_label=Подударања -find_match_diacritics_label=Дијакритика -find_entire_word_label=Целе речи -find_reached_top=Достигнут врх документа, наставио са дна -find_reached_bottom=Достигнуто дно документа, наставио са врха -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} од {{total}} одговара -find_match_count[two]={{current}} од {{total}} одговара -find_match_count[few]={{current}} од {{total}} одговара -find_match_count[many]={{current}} од {{total}} одговара -find_match_count[other]={{current}} од {{total}} одговара -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Више од {{limit}} одговара -find_match_count_limit[one]=Више од {{limit}} одговара -find_match_count_limit[two]=Више од {{limit}} одговара -find_match_count_limit[few]=Више од {{limit}} одговара -find_match_count_limit[many]=Више од {{limit}} одговара -find_match_count_limit[other]=Више од {{limit}} одговара -find_not_found=Фраза није пронађена - -# Predefined zoom values -page_scale_width=Ширина странице -page_scale_fit=Прилагоди страницу -page_scale_auto=Аутоматско увеличавање -page_scale_actual=Стварна величина -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Дошло је до грешке приликом учитавања PDF-а. -invalid_file_error=PDF датотека је неважећа или је оштећена. -missing_file_error=Недостаје PDF датотека. -unexpected_response_error=Неочекиван одговор од сервера. - -rendering_error=Дошло је до грешке приликом рендеровања ове странице. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} коментар] -password_label=Унесите лозинку да бисте отворили овај PDF докуменат. -password_invalid=Неисправна лозинка. Покушајте поново. -password_ok=У реду -password_cancel=Откажи - -printing_not_supported=Упозорење: Штампање није у потпуности подржано у овом прегледачу. -printing_not_ready=Упозорење: PDF није у потпуности учитан за штампу. -web_fonts_disabled=Веб фонтови су онемогућени: не могу користити уграђене PDF фонтове. - -# Editor -editor_free_text2.title=Текст -editor_free_text2_label=Текст -editor_ink2.title=Цртај -editor_ink2_label=Цртај - -free_text2_default_content=Почни куцање… - -# Editor Parameters -editor_free_text_color=Боја -editor_free_text_size=Величина -editor_ink_color=Боја -editor_ink_thickness=Дебљина -editor_ink_opacity=Опацитет - -# Editor aria -editor_free_text2_aria_label=Уређивач текста -editor_ink2_aria_label=Уређивач цртежа -editor_ink_canvas_aria_label=Кориснички направљена слика diff --git a/static/pdf.js/locale/sv-SE/viewer.ftl b/static/pdf.js/locale/sv-SE/viewer.ftl new file mode 100644 index 00000000..61d69867 --- /dev/null +++ b/static/pdf.js/locale/sv-SE/viewer.ftl @@ -0,0 +1,402 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Föregående sida +pdfjs-previous-button-label = Föregående +pdfjs-next-button = + .title = Nästa sida +pdfjs-next-button-label = Nästa +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Sida +# 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 = av { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } av { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zooma ut +pdfjs-zoom-out-button-label = Zooma ut +pdfjs-zoom-in-button = + .title = Zooma in +pdfjs-zoom-in-button-label = Zooma in +pdfjs-zoom-select = + .title = Zoom +pdfjs-presentation-mode-button = + .title = Byt till presentationsläge +pdfjs-presentation-mode-button-label = Presentationsläge +pdfjs-open-file-button = + .title = Öppna fil +pdfjs-open-file-button-label = Öppna +pdfjs-print-button = + .title = Skriv ut +pdfjs-print-button-label = Skriv ut +pdfjs-save-button = + .title = Spara +pdfjs-save-button-label = Spara +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Hämta +# 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 = Hämta +pdfjs-bookmark-button = + .title = Aktuell sida (Visa URL från aktuell sida) +pdfjs-bookmark-button-label = Aktuell sida +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Öppna i app +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Öppna i app + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Verktyg +pdfjs-tools-button-label = Verktyg +pdfjs-first-page-button = + .title = Gå till första sidan +pdfjs-first-page-button-label = Gå till första sidan +pdfjs-last-page-button = + .title = Gå till sista sidan +pdfjs-last-page-button-label = Gå till sista sidan +pdfjs-page-rotate-cw-button = + .title = Rotera medurs +pdfjs-page-rotate-cw-button-label = Rotera medurs +pdfjs-page-rotate-ccw-button = + .title = Rotera moturs +pdfjs-page-rotate-ccw-button-label = Rotera moturs +pdfjs-cursor-text-select-tool-button = + .title = Aktivera textmarkeringsverktyg +pdfjs-cursor-text-select-tool-button-label = Textmarkeringsverktyg +pdfjs-cursor-hand-tool-button = + .title = Aktivera handverktyg +pdfjs-cursor-hand-tool-button-label = Handverktyg +pdfjs-scroll-page-button = + .title = Använd sidrullning +pdfjs-scroll-page-button-label = Sidrullning +pdfjs-scroll-vertical-button = + .title = Använd vertikal rullning +pdfjs-scroll-vertical-button-label = Vertikal rullning +pdfjs-scroll-horizontal-button = + .title = Använd horisontell rullning +pdfjs-scroll-horizontal-button-label = Horisontell rullning +pdfjs-scroll-wrapped-button = + .title = Använd överlappande rullning +pdfjs-scroll-wrapped-button-label = Överlappande rullning +pdfjs-spread-none-button = + .title = Visa enkelsidor +pdfjs-spread-none-button-label = Enkelsidor +pdfjs-spread-odd-button = + .title = Visa uppslag med olika sidnummer till vänster +pdfjs-spread-odd-button-label = Uppslag med framsida +pdfjs-spread-even-button = + .title = Visa uppslag med lika sidnummer till vänster +pdfjs-spread-even-button-label = Uppslag utan framsida + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Dokumentegenskaper… +pdfjs-document-properties-button-label = Dokumentegenskaper… +pdfjs-document-properties-file-name = Filnamn: +pdfjs-document-properties-file-size = Filstorlek: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } kB ({ $size_b } byte) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } byte) +pdfjs-document-properties-title = Titel: +pdfjs-document-properties-author = Författare: +pdfjs-document-properties-subject = Ämne: +pdfjs-document-properties-keywords = Nyckelord: +pdfjs-document-properties-creation-date = Skapades: +pdfjs-document-properties-modification-date = Ändrades: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Skapare: +pdfjs-document-properties-producer = PDF-producent: +pdfjs-document-properties-version = PDF-version: +pdfjs-document-properties-page-count = Sidantal: +pdfjs-document-properties-page-size = Pappersstorlek: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = porträtt +pdfjs-document-properties-page-size-orientation-landscape = landskap +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Snabb webbvisning: +pdfjs-document-properties-linearized-yes = Ja +pdfjs-document-properties-linearized-no = Nej +pdfjs-document-properties-close-button = Stäng + +## Print + +pdfjs-print-progress-message = Förbereder sidor för utskrift… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Avbryt +pdfjs-printing-not-supported = Varning: Utskrifter stöds inte helt av den här webbläsaren. +pdfjs-printing-not-ready = Varning: PDF:en är inte klar för utskrift. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Visa/dölj sidofält +pdfjs-toggle-sidebar-notification-button = + .title = Växla sidofält (dokumentet innehåller dokumentstruktur/bilagor/lager) +pdfjs-toggle-sidebar-button-label = Visa/dölj sidofält +pdfjs-document-outline-button = + .title = Visa dokumentdisposition (dubbelklicka för att expandera/komprimera alla objekt) +pdfjs-document-outline-button-label = Dokumentöversikt +pdfjs-attachments-button = + .title = Visa Bilagor +pdfjs-attachments-button-label = Bilagor +pdfjs-layers-button = + .title = Visa lager (dubbelklicka för att återställa alla lager till standardläge) +pdfjs-layers-button-label = Lager +pdfjs-thumbs-button = + .title = Visa miniatyrer +pdfjs-thumbs-button-label = Miniatyrer +pdfjs-current-outline-item-button = + .title = Hitta aktuellt dispositionsobjekt +pdfjs-current-outline-item-button-label = Aktuellt dispositionsobjekt +pdfjs-findbar-button = + .title = Sök i dokument +pdfjs-findbar-button-label = Sök +pdfjs-additional-layers = Ytterligare lager + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Sida { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatyr av sida { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Sök + .placeholder = Sök i dokument… +pdfjs-find-previous-button = + .title = Hitta föregående förekomst av frasen +pdfjs-find-previous-button-label = Föregående +pdfjs-find-next-button = + .title = Hitta nästa förekomst av frasen +pdfjs-find-next-button-label = Nästa +pdfjs-find-highlight-checkbox = Markera alla +pdfjs-find-match-case-checkbox-label = Matcha versal/gemen +pdfjs-find-match-diacritics-checkbox-label = Matcha diakritiska tecken +pdfjs-find-entire-word-checkbox-label = Hela ord +pdfjs-find-reached-top = Nådde början av dokumentet, började från slutet +pdfjs-find-reached-bottom = Nådde slutet på dokumentet, började från början +# 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 } av { $total } match + *[other] { $current } av { $total } matchningar + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Mer än { $limit } matchning + *[other] Fler än { $limit } matchningar + } +pdfjs-find-not-found = Frasen hittades inte + +## Predefined zoom values + +pdfjs-page-scale-width = Sidbredd +pdfjs-page-scale-fit = Anpassa sida +pdfjs-page-scale-auto = Automatisk zoom +pdfjs-page-scale-actual = Verklig storlek +# 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 = Sida { $page } + +## Loading indicator messages + +pdfjs-loading-error = Ett fel uppstod vid laddning av PDF-filen. +pdfjs-invalid-file-error = Ogiltig eller korrupt PDF-fil. +pdfjs-missing-file-error = Saknad PDF-fil. +pdfjs-unexpected-response-error = Oväntat svar från servern. +pdfjs-rendering-error = Ett fel uppstod vid visning av sidan. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date } { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type }-annotering] + +## Password + +pdfjs-password-label = Skriv in lösenordet för att öppna PDF-filen. +pdfjs-password-invalid = Ogiltigt lösenord. Försök igen. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Avbryt +pdfjs-web-fonts-disabled = Webbtypsnitt är inaktiverade: kan inte använda inbäddade PDF-typsnitt. + +## Editing + +pdfjs-editor-free-text-button = + .title = Text +pdfjs-editor-free-text-button-label = Text +pdfjs-editor-ink-button = + .title = Rita +pdfjs-editor-ink-button-label = Rita +pdfjs-editor-stamp-button = + .title = Lägg till eller redigera bilder +pdfjs-editor-stamp-button-label = Lägg till eller redigera bilder +pdfjs-editor-highlight-button = + .title = Markera +pdfjs-editor-highlight-button-label = Markera +pdfjs-highlight-floating-button = + .title = Markera +pdfjs-highlight-floating-button1 = + .title = Markera + .aria-label = Markera +pdfjs-highlight-floating-button-label = Markera + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Ta bort ritning +pdfjs-editor-remove-freetext-button = + .title = Ta bort text +pdfjs-editor-remove-stamp-button = + .title = Ta bort bild +pdfjs-editor-remove-highlight-button = + .title = Ta bort markering + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Färg +pdfjs-editor-free-text-size-input = Storlek +pdfjs-editor-ink-color-input = Färg +pdfjs-editor-ink-thickness-input = Tjocklek +pdfjs-editor-ink-opacity-input = Opacitet +pdfjs-editor-stamp-add-image-button = + .title = Lägg till bild +pdfjs-editor-stamp-add-image-button-label = Lägg till bild +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Tjocklek +pdfjs-editor-free-highlight-thickness-title = + .title = Ändra tjocklek när du markerar andra objekt än text +pdfjs-free-text = + .aria-label = Textredigerare +pdfjs-free-text-default-content = Börja skriva… +pdfjs-ink = + .aria-label = Ritredigerare +pdfjs-ink-canvas = + .aria-label = Användarskapad bild + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alternativ text +pdfjs-editor-alt-text-edit-button-label = Redigera alternativ text +pdfjs-editor-alt-text-dialog-label = Välj ett alternativ +pdfjs-editor-alt-text-dialog-description = Alt text (alternativ text) hjälper till när människor inte kan se bilden eller när den inte laddas. +pdfjs-editor-alt-text-add-description-label = Lägg till en beskrivning +pdfjs-editor-alt-text-add-description-description = Sikta på 1-2 meningar som beskriver ämnet, miljön eller handlingen. +pdfjs-editor-alt-text-mark-decorative-label = Markera som dekorativ +pdfjs-editor-alt-text-mark-decorative-description = Detta används för dekorativa bilder, som kanter eller vattenstämplar. +pdfjs-editor-alt-text-cancel-button = Avbryt +pdfjs-editor-alt-text-save-button = Spara +pdfjs-editor-alt-text-decorative-tooltip = Märkt som dekorativ +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Till exempel, "En ung man sätter sig vid ett bord för att äta en måltid" + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Det övre vänstra hörnet — ändra storlek +pdfjs-editor-resizer-label-top-middle = Överst i mitten — ändra storlek +pdfjs-editor-resizer-label-top-right = Det övre högra hörnet — ändra storlek +pdfjs-editor-resizer-label-middle-right = Mitten höger — ändra storlek +pdfjs-editor-resizer-label-bottom-right = Nedre högra hörnet — ändra storlek +pdfjs-editor-resizer-label-bottom-middle = Nedre mitten — ändra storlek +pdfjs-editor-resizer-label-bottom-left = Nedre vänstra hörnet — ändra storlek +pdfjs-editor-resizer-label-middle-left = Mitten till vänster — ändra storlek + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Markeringsfärg +pdfjs-editor-colorpicker-button = + .title = Ändra färg +pdfjs-editor-colorpicker-dropdown = + .aria-label = Färgval +pdfjs-editor-colorpicker-yellow = + .title = Gul +pdfjs-editor-colorpicker-green = + .title = Grön +pdfjs-editor-colorpicker-blue = + .title = Blå +pdfjs-editor-colorpicker-pink = + .title = Rosa +pdfjs-editor-colorpicker-red = + .title = Röd + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Visa alla +pdfjs-editor-highlight-show-all-button = + .title = Visa alla diff --git a/static/pdf.js/locale/sv-SE/viewer.properties b/static/pdf.js/locale/sv-SE/viewer.properties deleted file mode 100644 index a15d2b68..00000000 --- a/static/pdf.js/locale/sv-SE/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Föregående sida -previous_label=Föregående -next.title=Nästa sida -next_label=Nästa - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Sida -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=av {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} av {{pagesCount}}) - -zoom_out.title=Zooma ut -zoom_out_label=Zooma ut -zoom_in.title=Zooma in -zoom_in_label=Zooma in -zoom.title=Zoom -presentation_mode.title=Byt till presentationsläge -presentation_mode_label=Presentationsläge -open_file.title=Öppna fil -open_file_label=Öppna -print.title=Skriv ut -print_label=Skriv ut -save.title=Spara -save_label=Spara -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Hämta -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Hämta -bookmark1.title=Aktuell sida (Visa URL från aktuell sida) -bookmark1_label=Aktuell sida -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Öppna i app -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Öppna i app - -# Secondary toolbar and context menu -tools.title=Verktyg -tools_label=Verktyg -first_page.title=Gå till första sidan -first_page_label=Gå till första sidan -last_page.title=Gå till sista sidan -last_page_label=Gå till sista sidan -page_rotate_cw.title=Rotera medurs -page_rotate_cw_label=Rotera medurs -page_rotate_ccw.title=Rotera moturs -page_rotate_ccw_label=Rotera moturs - -cursor_text_select_tool.title=Aktivera textmarkeringsverktyg -cursor_text_select_tool_label=Textmarkeringsverktyg -cursor_hand_tool.title=Aktivera handverktyg -cursor_hand_tool_label=Handverktyg - -scroll_page.title=Använd sidrullning -scroll_page_label=Sidrullning -scroll_vertical.title=Använd vertikal rullning -scroll_vertical_label=Vertikal rullning -scroll_horizontal.title=Använd horisontell rullning -scroll_horizontal_label=Horisontell rullning -scroll_wrapped.title=Använd överlappande rullning -scroll_wrapped_label=Överlappande rullning - -spread_none.title=Visa enkelsidor -spread_none_label=Enkelsidor -spread_odd.title=Visa uppslag med olika sidnummer till vänster -spread_odd_label=Uppslag med framsida -spread_even.title=Visa uppslag med lika sidnummer till vänster -spread_even_label=Uppslag utan framsida - -# Document properties dialog box -document_properties.title=Dokumentegenskaper… -document_properties_label=Dokumentegenskaper… -document_properties_file_name=Filnamn: -document_properties_file_size=Filstorlek: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} kB ({{size_b}} byte) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} byte) -document_properties_title=Titel: -document_properties_author=Författare: -document_properties_subject=Ämne: -document_properties_keywords=Nyckelord: -document_properties_creation_date=Skapades: -document_properties_modification_date=Ändrades: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Skapare: -document_properties_producer=PDF-producent: -document_properties_version=PDF-version: -document_properties_page_count=Sidantal: -document_properties_page_size=Pappersstorlek: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=porträtt -document_properties_page_size_orientation_landscape=landskap -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Snabb webbvisning: -document_properties_linearized_yes=Ja -document_properties_linearized_no=Nej -document_properties_close=Stäng - -print_progress_message=Förbereder sidor för utskrift… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Avbryt - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Visa/dölj sidofält -toggle_sidebar_notification2.title=Växla sidofält (dokumentet innehåller dokumentstruktur/bilagor/lager) -toggle_sidebar_label=Visa/dölj sidofält -document_outline.title=Visa dokumentdisposition (dubbelklicka för att expandera/komprimera alla objekt) -document_outline_label=Dokumentöversikt -attachments.title=Visa Bilagor -attachments_label=Bilagor -layers.title=Visa lager (dubbelklicka för att återställa alla lager till standardläge) -layers_label=Lager -thumbs.title=Visa miniatyrer -thumbs_label=Miniatyrer -current_outline_item.title=Hitta aktuellt dispositionsobjekt -current_outline_item_label=Aktuellt dispositionsobjekt -findbar.title=Sök i dokument -findbar_label=Sök - -additional_layers=Ytterligare lager -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Sida {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Sida {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatyr av sida {{page}} - -# Find panel button title and messages -find_input.title=Sök -find_input.placeholder=Sök i dokument… -find_previous.title=Hitta föregående förekomst av frasen -find_previous_label=Föregående -find_next.title=Hitta nästa förekomst av frasen -find_next_label=Nästa -find_highlight=Markera alla -find_match_case_label=Matcha versal/gemen -find_match_diacritics_label=Matcha diakritiska tecken -find_entire_word_label=Hela ord -find_reached_top=Nådde början av dokumentet, började från slutet -find_reached_bottom=Nådde slutet på dokumentet, började från början -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} av {{total}} träff -find_match_count[two]={{current}} av {{total}} träffar -find_match_count[few]={{current}} av {{total}} träffar -find_match_count[many]={{current}} av {{total}} träffar -find_match_count[other]={{current}} av {{total}} träffar -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Mer än {{limit}} träffar -find_match_count_limit[one]=Mer än {{limit}} träff -find_match_count_limit[two]=Mer än {{limit}} träffar -find_match_count_limit[few]=Mer än {{limit}} träffar -find_match_count_limit[many]=Mer än {{limit}} träffar -find_match_count_limit[other]=Mer än {{limit}} träffar -find_not_found=Frasen hittades inte - -# Predefined zoom values -page_scale_width=Sidbredd -page_scale_fit=Anpassa sida -page_scale_auto=Automatisk zoom -page_scale_actual=Verklig storlek -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Ett fel uppstod vid laddning av PDF-filen. -invalid_file_error=Ogiltig eller korrupt PDF-fil. -missing_file_error=Saknad PDF-fil. -unexpected_response_error=Oväntat svar från servern. -rendering_error=Ett fel uppstod vid visning av sidan. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}} {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}}-annotering] -password_label=Skriv in lösenordet för att öppna PDF-filen. -password_invalid=Ogiltigt lösenord. Försök igen. -password_ok=OK -password_cancel=Avbryt - -printing_not_supported=Varning: Utskrifter stöds inte helt av den här webbläsaren. -printing_not_ready=Varning: PDF:en är inte klar för utskrift. -web_fonts_disabled=Webbtypsnitt är inaktiverade: kan inte använda inbäddade PDF-typsnitt. - -# Editor -editor_free_text2.title=Text -editor_free_text2_label=Text -editor_ink2.title=Rita -editor_ink2_label=Rita - -editor_stamp1.title=Lägg till eller redigera bilder -editor_stamp1_label=Lägg till eller redigera bilder - -free_text2_default_content=Börja skriva… - -# Editor Parameters -editor_free_text_color=Färg -editor_free_text_size=Storlek -editor_ink_color=Färg -editor_ink_thickness=Tjocklek -editor_ink_opacity=Opacitet - -editor_stamp_add_image_label=Lägg till bild -editor_stamp_add_image.title=Lägg till bild - -# Editor aria -editor_free_text2_aria_label=Textredigerare -editor_ink2_aria_label=Ritredigerare -editor_ink_canvas_aria_label=Användarskapad bild - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Alternativ text -editor_alt_text_edit_button_label=Redigera alternativ text -editor_alt_text_dialog_label=Välj ett alternativ -editor_alt_text_dialog_description=Alt text (alternativ text) hjälper till när människor inte kan se bilden eller när den inte laddas. -editor_alt_text_add_description_label=Lägg till en beskrivning -editor_alt_text_add_description_description=Sikta på 1-2 meningar som beskriver ämnet, miljön eller handlingen. -editor_alt_text_mark_decorative_label=Markera som dekorativ -editor_alt_text_mark_decorative_description=Detta används för dekorativa bilder, som kanter eller vattenstämplar. -editor_alt_text_cancel_button=Avbryt -editor_alt_text_save_button=Spara -editor_alt_text_decorative_tooltip=Märkt som dekorativ -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=Till exempel, "En ung man sätter sig vid ett bord för att äta en måltid" diff --git a/static/pdf.js/locale/szl/viewer.ftl b/static/pdf.js/locale/szl/viewer.ftl new file mode 100644 index 00000000..cbf166e4 --- /dev/null +++ b/static/pdf.js/locale/szl/viewer.ftl @@ -0,0 +1,257 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Piyrwyjszo strōna +pdfjs-previous-button-label = Piyrwyjszo +pdfjs-next-button = + .title = Nastympno strōna +pdfjs-next-button-label = Dalij +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Strōna +# 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 = ze { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } ze { $pagesCount }) +pdfjs-zoom-out-button = + .title = Zmyńsz +pdfjs-zoom-out-button-label = Zmyńsz +pdfjs-zoom-in-button = + .title = Zwiynksz +pdfjs-zoom-in-button-label = Zwiynksz +pdfjs-zoom-select = + .title = Srogość +pdfjs-presentation-mode-button = + .title = Przełōncz na tryb prezyntacyje +pdfjs-presentation-mode-button-label = Tryb prezyntacyje +pdfjs-open-file-button = + .title = Ôdewrzij zbiōr +pdfjs-open-file-button-label = Ôdewrzij +pdfjs-print-button = + .title = Durkuj +pdfjs-print-button-label = Durkuj + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Noczynia +pdfjs-tools-button-label = Noczynia +pdfjs-first-page-button = + .title = Idź ku piyrszyj strōnie +pdfjs-first-page-button-label = Idź ku piyrszyj strōnie +pdfjs-last-page-button = + .title = Idź ku ôstatnij strōnie +pdfjs-last-page-button-label = Idź ku ôstatnij strōnie +pdfjs-page-rotate-cw-button = + .title = Zwyrtnij w prawo +pdfjs-page-rotate-cw-button-label = Zwyrtnij w prawo +pdfjs-page-rotate-ccw-button = + .title = Zwyrtnij w lewo +pdfjs-page-rotate-ccw-button-label = Zwyrtnij w lewo +pdfjs-cursor-text-select-tool-button = + .title = Załōncz noczynie ôbiyranio tekstu +pdfjs-cursor-text-select-tool-button-label = Noczynie ôbiyranio tekstu +pdfjs-cursor-hand-tool-button = + .title = Załōncz noczynie rōnczka +pdfjs-cursor-hand-tool-button-label = Noczynie rōnczka +pdfjs-scroll-vertical-button = + .title = Używej piōnowego przewijanio +pdfjs-scroll-vertical-button-label = Piōnowe przewijanie +pdfjs-scroll-horizontal-button = + .title = Używej poziōmego przewijanio +pdfjs-scroll-horizontal-button-label = Poziōme przewijanie +pdfjs-scroll-wrapped-button = + .title = Używej szichtowego przewijanio +pdfjs-scroll-wrapped-button-label = Szichtowe przewijanie +pdfjs-spread-none-button = + .title = Niy dowej strōn w widoku po dwie +pdfjs-spread-none-button-label = Po jednyj strōnie +pdfjs-spread-odd-button = + .title = Pokoż strōny po dwie; niyporziste po lewyj +pdfjs-spread-odd-button-label = Niyporziste po lewyj +pdfjs-spread-even-button = + .title = Pokoż strōny po dwie; porziste po lewyj +pdfjs-spread-even-button-label = Porziste po lewyj + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Włosności dokumyntu… +pdfjs-document-properties-button-label = Włosności dokumyntu… +pdfjs-document-properties-file-name = Miano zbioru: +pdfjs-document-properties-file-size = Srogość zbioru: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } B) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } B) +pdfjs-document-properties-title = Tytuł: +pdfjs-document-properties-author = Autōr: +pdfjs-document-properties-subject = Tymat: +pdfjs-document-properties-keywords = Kluczowe słowa: +pdfjs-document-properties-creation-date = Data zrychtowanio: +pdfjs-document-properties-modification-date = Data zmiany: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Zrychtowane ôd: +pdfjs-document-properties-producer = PDF ôd: +pdfjs-document-properties-version = Wersyjo PDF: +pdfjs-document-properties-page-count = Wielość strōn: +pdfjs-document-properties-page-size = Srogość strōny: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = piōnowo +pdfjs-document-properties-page-size-orientation-landscape = poziōmo +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Gibki necowy podglōnd: +pdfjs-document-properties-linearized-yes = Ja +pdfjs-document-properties-linearized-no = Niy +pdfjs-document-properties-close-button = Zawrzij + +## Print + +pdfjs-print-progress-message = Rychtowanie dokumyntu do durku… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Pociep +pdfjs-printing-not-supported = Pozōr: Ta przeglōndarka niy cołkiym ôbsuguje durk. +pdfjs-printing-not-ready = Pozōr: Tyn PDF niy ma za tela zaladowany do durku. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Przełōncz posek na rancie +pdfjs-toggle-sidebar-notification-button = + .title = Przełōncz posek na rancie (dokumynt mo struktura/przidowki/warstwy) +pdfjs-toggle-sidebar-button-label = Przełōncz posek na rancie +pdfjs-document-outline-button = + .title = Pokoż struktura dokumyntu (tuplowane klikniyncie rozszyrzo/swijo wszyskie elymynta) +pdfjs-document-outline-button-label = Struktura dokumyntu +pdfjs-attachments-button = + .title = Pokoż przidowki +pdfjs-attachments-button-label = Przidowki +pdfjs-layers-button = + .title = Pokoż warstwy (tuplowane klikniyncie resetuje wszyskie warstwy do bazowego stanu) +pdfjs-layers-button-label = Warstwy +pdfjs-thumbs-button = + .title = Pokoż miniatury +pdfjs-thumbs-button-label = Miniatury +pdfjs-findbar-button = + .title = Znojdź w dokumyncie +pdfjs-findbar-button-label = Znojdź +pdfjs-additional-layers = Nadbytnie warstwy + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Strōna { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Miniatura strōny { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Znojdź + .placeholder = Znojdź w dokumyncie… +pdfjs-find-previous-button = + .title = Znojdź piyrwyjsze pokozanie sie tyj frazy +pdfjs-find-previous-button-label = Piyrwyjszo +pdfjs-find-next-button = + .title = Znojdź nastympne pokozanie sie tyj frazy +pdfjs-find-next-button-label = Dalij +pdfjs-find-highlight-checkbox = Zaznacz wszysko +pdfjs-find-match-case-checkbox-label = Poznowej srogość liter +pdfjs-find-entire-word-checkbox-label = Cołke słowa +pdfjs-find-reached-top = Doszło do samego wiyrchu strōny, dalij ôd spodku +pdfjs-find-reached-bottom = Doszło do samego spodku strōny, dalij ôd wiyrchu +pdfjs-find-not-found = Fraza niy znaleziōno + +## Predefined zoom values + +pdfjs-page-scale-width = Szyrzka strōny +pdfjs-page-scale-fit = Napasowanie strōny +pdfjs-page-scale-auto = Autōmatyczno srogość +pdfjs-page-scale-actual = Aktualno srogość +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = Przi ladowaniu PDFa pokozoł sie feler. +pdfjs-invalid-file-error = Zły abo felerny zbiōr PDF. +pdfjs-missing-file-error = Chybio zbioru PDF. +pdfjs-unexpected-response-error = Niyôczekowano ôdpowiydź serwera. +pdfjs-rendering-error = Przi renderowaniu strōny pokozoł sie feler. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Anotacyjo typu { $type }] + +## Password + +pdfjs-password-label = Wkludź hasło, coby ôdewrzić tyn zbiōr PDF. +pdfjs-password-invalid = Hasło je złe. Sprōbuj jeszcze roz. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Pociep +pdfjs-web-fonts-disabled = Necowe fōnty sōm zastawiōne: niy idzie użyć wkludzōnych fōntōw PDF. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/szl/viewer.properties b/static/pdf.js/locale/szl/viewer.properties deleted file mode 100644 index ba0a898b..00000000 --- a/static/pdf.js/locale/szl/viewer.properties +++ /dev/null @@ -1,224 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Piyrwyjszo strōna -previous_label=Piyrwyjszo -next.title=Nastympno strōna -next_label=Dalij - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Strōna -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=ze {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} ze {{pagesCount}}) - -zoom_out.title=Zmyńsz -zoom_out_label=Zmyńsz -zoom_in.title=Zwiynksz -zoom_in_label=Zwiynksz -zoom.title=Srogość -presentation_mode.title=Przełōncz na tryb prezyntacyje -presentation_mode_label=Tryb prezyntacyje -open_file.title=Ôdewrzij zbiōr -open_file_label=Ôdewrzij -print.title=Durkuj -print_label=Durkuj - -# Secondary toolbar and context menu -tools.title=Noczynia -tools_label=Noczynia -first_page.title=Idź ku piyrszyj strōnie -first_page_label=Idź ku piyrszyj strōnie -last_page.title=Idź ku ôstatnij strōnie -last_page_label=Idź ku ôstatnij strōnie -page_rotate_cw.title=Zwyrtnij w prawo -page_rotate_cw_label=Zwyrtnij w prawo -page_rotate_ccw.title=Zwyrtnij w lewo -page_rotate_ccw_label=Zwyrtnij w lewo - -cursor_text_select_tool.title=Załōncz noczynie ôbiyranio tekstu -cursor_text_select_tool_label=Noczynie ôbiyranio tekstu -cursor_hand_tool.title=Załōncz noczynie rōnczka -cursor_hand_tool_label=Noczynie rōnczka - -scroll_vertical.title=Używej piōnowego przewijanio -scroll_vertical_label=Piōnowe przewijanie -scroll_horizontal.title=Używej poziōmego przewijanio -scroll_horizontal_label=Poziōme przewijanie -scroll_wrapped.title=Używej szichtowego przewijanio -scroll_wrapped_label=Szichtowe przewijanie - -spread_none.title=Niy dowej strōn w widoku po dwie -spread_none_label=Po jednyj strōnie -spread_odd.title=Pokoż strōny po dwie; niyporziste po lewyj -spread_odd_label=Niyporziste po lewyj -spread_even.title=Pokoż strōny po dwie; porziste po lewyj -spread_even_label=Porziste po lewyj - -# Document properties dialog box -document_properties.title=Włosności dokumyntu… -document_properties_label=Włosności dokumyntu… -document_properties_file_name=Miano zbioru: -document_properties_file_size=Srogość zbioru: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} B) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} B) -document_properties_title=Tytuł: -document_properties_author=Autōr: -document_properties_subject=Tymat: -document_properties_keywords=Kluczowe słowa: -document_properties_creation_date=Data zrychtowanio: -document_properties_modification_date=Data zmiany: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Zrychtowane ôd: -document_properties_producer=PDF ôd: -document_properties_version=Wersyjo PDF: -document_properties_page_count=Wielość strōn: -document_properties_page_size=Srogość strōny: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=piōnowo -document_properties_page_size_orientation_landscape=poziōmo -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Gibki necowy podglōnd: -document_properties_linearized_yes=Ja -document_properties_linearized_no=Niy -document_properties_close=Zawrzij - -print_progress_message=Rychtowanie dokumyntu do durku… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Pociep - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Przełōncz posek na rancie -toggle_sidebar_notification2.title=Przełōncz posek na rancie (dokumynt mo struktura/przidowki/warstwy) -toggle_sidebar_label=Przełōncz posek na rancie -document_outline.title=Pokoż struktura dokumyntu (tuplowane klikniyncie rozszyrzo/swijo wszyskie elymynta) -document_outline_label=Struktura dokumyntu -attachments.title=Pokoż przidowki -attachments_label=Przidowki -layers.title=Pokoż warstwy (tuplowane klikniyncie resetuje wszyskie warstwy do bazowego stanu) -layers_label=Warstwy -thumbs.title=Pokoż miniatury -thumbs_label=Miniatury -findbar.title=Znojdź w dokumyncie -findbar_label=Znojdź - -additional_layers=Nadbytnie warstwy -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Strōna {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Miniatura strōny {{page}} - -# Find panel button title and messages -find_input.title=Znojdź -find_input.placeholder=Znojdź w dokumyncie… -find_previous.title=Znojdź piyrwyjsze pokozanie sie tyj frazy -find_previous_label=Piyrwyjszo -find_next.title=Znojdź nastympne pokozanie sie tyj frazy -find_next_label=Dalij -find_highlight=Zaznacz wszysko -find_match_case_label=Poznowej srogość liter -find_entire_word_label=Cołke słowa -find_reached_top=Doszło do samego wiyrchu strōny, dalij ôd spodku -find_reached_bottom=Doszło do samego spodku strōny, dalij ôd wiyrchu -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} ze {{total}}, co pasujōm -find_match_count[two]={{current}} ze {{total}}, co pasujōm -find_match_count[few]={{current}} ze {{total}}, co pasujōm -find_match_count[many]={{current}} ze {{total}}, co pasujōm -find_match_count[other]={{current}} ze {{total}}, co pasujōm -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(total) ]} -find_match_count_limit[zero]=Wiyncyj jak {{limit}}, co pasujōm -find_match_count_limit[one]=Wiyncyj jak {{limit}}, co pasuje -find_match_count_limit[two]=Wiyncyj jak {{limit}}, co pasujōm -find_match_count_limit[few]=Wiyncyj jak {{limit}}, co pasujōm -find_match_count_limit[many]=Wiyncyj jak {{limit}}, co pasujōm -find_match_count_limit[other]=Wiyncyj jak {{limit}}, co pasujōm -find_not_found=Fraza niy znaleziōno - -# Predefined zoom values -page_scale_width=Szyrzka strōny -page_scale_fit=Napasowanie strōny -page_scale_auto=Autōmatyczno srogość -page_scale_actual=Aktualno srogość -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Przi ladowaniu PDFa pokozoł sie feler. -invalid_file_error=Zły abo felerny zbiōr PDF. -missing_file_error=Chybio zbioru PDF. -unexpected_response_error=Niyôczekowano ôdpowiydź serwera. - -rendering_error=Przi renderowaniu strōny pokozoł sie feler. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Anotacyjo typu {{type}}] -password_label=Wkludź hasło, coby ôdewrzić tyn zbiōr PDF. -password_invalid=Hasło je złe. Sprōbuj jeszcze roz. -password_ok=OK -password_cancel=Pociep - -printing_not_supported=Pozōr: Ta przeglōndarka niy cołkiym ôbsuguje durk. -printing_not_ready=Pozōr: Tyn PDF niy ma za tela zaladowany do durku. -web_fonts_disabled=Necowe fōnty sōm zastawiōne: niy idzie użyć wkludzōnych fōntōw PDF. - diff --git a/static/pdf.js/locale/ta/viewer.ftl b/static/pdf.js/locale/ta/viewer.ftl new file mode 100644 index 00000000..82cf1970 --- /dev/null +++ b/static/pdf.js/locale/ta/viewer.ftl @@ -0,0 +1,223 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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 = { $pagesCount }) இல் ({ $pageNumber } +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-presentation-mode-button = + .title = விளக்ககாட்சி பயன்முறைக்கு மாறு +pdfjs-presentation-mode-button-label = விளக்ககாட்சி பயன்முறை +pdfjs-open-file-button = + .title = கோப்பினை திற +pdfjs-open-file-button-label = திற +pdfjs-print-button = + .title = அச்சிடு +pdfjs-print-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 = கைக்குருவி + +## Document properties dialog + +pdfjs-document-properties-button = + .title = ஆவண பண்புகள்... +pdfjs-document-properties-button-label = ஆவண பண்புகள்... +pdfjs-document-properties-file-name = கோப்பு பெயர்: +pdfjs-document-properties-file-size = கோப்பின் அளவு: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } கிபை ({ $size_b } பைட்டுகள்) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } மெபை ({ $size_b } பைட்டுகள்) +pdfjs-document-properties-title = தலைப்பு: +pdfjs-document-properties-author = எழுதியவர் +pdfjs-document-properties-subject = பொருள்: +pdfjs-document-properties-keywords = முக்கிய வார்த்தைகள்: +pdfjs-document-properties-creation-date = படைத்த தேதி : +pdfjs-document-properties-modification-date = திருத்திய தேதி: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = உருவாக்குபவர்: +pdfjs-document-properties-producer = பிடிஎஃப் தயாரிப்பாளர்: +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 = mm +pdfjs-document-properties-page-size-orientation-portrait = நிலைபதிப்பு +pdfjs-document-properties-page-size-orientation-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 }) + +## + +pdfjs-document-properties-close-button = மூடுக + +## Print + +pdfjs-print-progress-message = அச்சிடுவதற்கான ஆவணம் தயாராகிறது... +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = ரத்து +pdfjs-printing-not-supported = எச்சரிக்கை: இந்த உலாவி அச்சிடுதலை முழுமையாக ஆதரிக்கவில்லை. +pdfjs-printing-not-ready = எச்சரிக்கை: PDF அச்சிட முழுவதுமாக ஏற்றப்படவில்லை. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = பக்கப் பட்டியை நிலைமாற்று +pdfjs-toggle-sidebar-button-label = பக்கப் பட்டியை நிலைமாற்று +pdfjs-document-outline-button = + .title = ஆவண அடக்கத்தைக் காட்டு (இருமுறைச் சொடுக்கி அனைத்து உறுப்பிடிகளையும் விரி/சேர்) +pdfjs-document-outline-button-label = ஆவண வெளிவரை +pdfjs-attachments-button = + .title = இணைப்புகளை காண்பி +pdfjs-attachments-button-label = இணைப்புகள் +pdfjs-thumbs-button = + .title = சிறுபடங்களைக் காண்பி +pdfjs-thumbs-button-label = சிறுபடங்கள் +pdfjs-findbar-button = + .title = ஆவணத்தில் கண்டறி +pdfjs-findbar-button-label = தேடு + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = பக்கம் { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = பக்கத்தின் சிறுபடம் { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = கண்டுபிடி + .placeholder = ஆவணத்தில் கண்டறி… +pdfjs-find-previous-button = + .title = இந்த சொற்றொடரின் முந்தைய நிகழ்வை தேடு +pdfjs-find-previous-button-label = முந்தையது +pdfjs-find-next-button = + .title = இந்த சொற்றொடரின் அடுத்த நிகழ்வை தேடு +pdfjs-find-next-button-label = அடுத்து +pdfjs-find-highlight-checkbox = அனைத்தையும் தனிப்படுத்து +pdfjs-find-match-case-checkbox-label = பேரெழுத்தாக்கத்தை உணர் +pdfjs-find-reached-top = ஆவணத்தின் மேல் பகுதியை அடைந்தது, அடிப்பக்கத்திலிருந்து தொடர்ந்தது +pdfjs-find-reached-bottom = ஆவணத்தின் முடிவை அடைந்தது, மேலிருந்து தொடர்ந்தது +pdfjs-find-not-found = சொற்றொடர் காணவில்லை + +## 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 + + +## Loading indicator messages + +pdfjs-loading-error = PDF ஐ ஏற்றும் போது ஒரு பிழை ஏற்பட்டது. +pdfjs-invalid-file-error = செல்லுபடியாகாத அல்லது சிதைந்த PDF கோப்பு. +pdfjs-missing-file-error = PDF கோப்பு காணவில்லை. +pdfjs-unexpected-response-error = சேவகன் பதில் எதிர்பாரதது. +pdfjs-rendering-error = இந்தப் பக்கத்தை காட்சிப்படுத்தும் போது ஒரு பிழை ஏற்பட்டது. + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } விளக்கம்] + +## Password + +pdfjs-password-label = இந்த PDF கோப்பை திறக்க கடவுச்சொல்லை உள்ளிடவும். +pdfjs-password-invalid = செல்லுபடியாகாத கடவுச்சொல், தயை செய்து மீண்டும் முயற்சி செய்க. +pdfjs-password-ok-button = சரி +pdfjs-password-cancel-button = ரத்து +pdfjs-web-fonts-disabled = வலை எழுத்துருக்கள் முடக்கப்பட்டுள்ளன: உட்பொதிக்கப்பட்ட PDF எழுத்துருக்களைப் பயன்படுத்த முடியவில்லை. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/ta/viewer.properties b/static/pdf.js/locale/ta/viewer.properties deleted file mode 100644 index ef30ea54..00000000 --- a/static/pdf.js/locale/ta/viewer.properties +++ /dev/null @@ -1,173 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=முந்தைய பக்கம் -previous_label=முந்தையது -next.title=அடுத்த பக்கம் -next_label=அடுத்து - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=பக்கம் -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages={{pagesCount}} இல் -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages={{pagesCount}}) இல் ({{pageNumber}} - -zoom_out.title=சிறிதாக்கு -zoom_out_label=சிறிதாக்கு -zoom_in.title=பெரிதாக்கு -zoom_in_label=பெரிதாக்கு -zoom.title=பெரிதாக்கு -presentation_mode.title=விளக்ககாட்சி பயன்முறைக்கு மாறு -presentation_mode_label=விளக்ககாட்சி பயன்முறை -open_file.title=கோப்பினை திற -open_file_label=திற -print.title=அச்சிடு -print_label=அச்சிடு - -# Secondary toolbar and context menu -tools.title=கருவிகள் -tools_label=கருவிகள் -first_page.title=முதல் பக்கத்திற்கு செல்லவும் -first_page_label=முதல் பக்கத்திற்கு செல்லவும் -last_page.title=கடைசி பக்கத்திற்கு செல்லவும் -last_page_label=கடைசி பக்கத்திற்கு செல்லவும் -page_rotate_cw.title=வலஞ்சுழியாக சுழற்று -page_rotate_cw_label=வலஞ்சுழியாக சுழற்று -page_rotate_ccw.title=இடஞ்சுழியாக சுழற்று -page_rotate_ccw_label=இடஞ்சுழியாக சுழற்று - -cursor_text_select_tool.title=உரைத் தெரிவு கருவியைச் செயல்படுத்து -cursor_text_select_tool_label=உரைத் தெரிவு கருவி -cursor_hand_tool.title=கைக் கருவிக்ச் செயற்படுத்து -cursor_hand_tool_label=கைக்குருவி - -# Document properties dialog box -document_properties.title=ஆவண பண்புகள்... -document_properties_label=ஆவண பண்புகள்... -document_properties_file_name=கோப்பு பெயர்: -document_properties_file_size=கோப்பின் அளவு: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} கிபை ({{size_b}} பைட்டுகள்) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} மெபை ({{size_b}} பைட்டுகள்) -document_properties_title=தலைப்பு: -document_properties_author=எழுதியவர் -document_properties_subject=பொருள்: -document_properties_keywords=முக்கிய வார்த்தைகள்: -document_properties_creation_date=படைத்த தேதி : -document_properties_modification_date=திருத்திய தேதி: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=உருவாக்குபவர்: -document_properties_producer=பிடிஎஃப் தயாரிப்பாளர்: -document_properties_version=PDF பதிப்பு: -document_properties_page_count=பக்க எண்ணிக்கை: -document_properties_page_size=பக்க அளவு: -document_properties_page_size_unit_inches=இதில் -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=நிலைபதிப்பு -document_properties_page_size_orientation_landscape=நிலைபரப்பு -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=கடிதம் -document_properties_page_size_name_legal=சட்டபூர்வ -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -document_properties_close=மூடுக - -print_progress_message=அச்சிடுவதற்கான ஆவணம் தயாராகிறது... -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=ரத்து - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=பக்கப் பட்டியை நிலைமாற்று -toggle_sidebar_label=பக்கப் பட்டியை நிலைமாற்று -document_outline.title=ஆவண அடக்கத்தைக் காட்டு (இருமுறைச் சொடுக்கி அனைத்து உறுப்பிடிகளையும் விரி/சேர்) -document_outline_label=ஆவண வெளிவரை -attachments.title=இணைப்புகளை காண்பி -attachments_label=இணைப்புகள் -thumbs.title=சிறுபடங்களைக் காண்பி -thumbs_label=சிறுபடங்கள் -findbar.title=ஆவணத்தில் கண்டறி -findbar_label=தேடு - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=பக்கம் {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=பக்கத்தின் சிறுபடம் {{page}} - -# Find panel button title and messages -find_input.title=கண்டுபிடி -find_input.placeholder=ஆவணத்தில் கண்டறி… -find_previous.title=இந்த சொற்றொடரின் முந்தைய நிகழ்வை தேடு -find_previous_label=முந்தையது -find_next.title=இந்த சொற்றொடரின் அடுத்த நிகழ்வை தேடு -find_next_label=அடுத்து -find_highlight=அனைத்தையும் தனிப்படுத்து -find_match_case_label=பேரெழுத்தாக்கத்தை உணர் -find_reached_top=ஆவணத்தின் மேல் பகுதியை அடைந்தது, அடிப்பக்கத்திலிருந்து தொடர்ந்தது -find_reached_bottom=ஆவணத்தின் முடிவை அடைந்தது, மேலிருந்து தொடர்ந்தது -find_not_found=சொற்றொடர் காணவில்லை - -# Predefined zoom values -page_scale_width=பக்க அகலம் -page_scale_fit=பக்கப் பொருத்தம் -page_scale_auto=தானியக்க பெரிதாக்கல் -page_scale_actual=உண்மையான அளவு -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=PDF ஐ ஏற்றும் போது ஒரு பிழை ஏற்பட்டது. -invalid_file_error=செல்லுபடியாகாத அல்லது சிதைந்த PDF கோப்பு. -missing_file_error=PDF கோப்பு காணவில்லை. -unexpected_response_error=சேவகன் பதில் எதிர்பாரதது. - -rendering_error=இந்தப் பக்கத்தை காட்சிப்படுத்தும் போது ஒரு பிழை ஏற்பட்டது. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} விளக்கம்] -password_label=இந்த PDF கோப்பை திறக்க கடவுச்சொல்லை உள்ளிடவும். -password_invalid=செல்லுபடியாகாத கடவுச்சொல், தயை செய்து மீண்டும் முயற்சி செய்க. -password_ok=சரி -password_cancel=ரத்து - -printing_not_supported=எச்சரிக்கை: இந்த உலாவி அச்சிடுதலை முழுமையாக ஆதரிக்கவில்லை. -printing_not_ready=எச்சரிக்கை: PDF அச்சிட முழுவதுமாக ஏற்றப்படவில்லை. -web_fonts_disabled=வலை எழுத்துருக்கள் முடக்கப்பட்டுள்ளன: உட்பொதிக்கப்பட்ட PDF எழுத்துருக்களைப் பயன்படுத்த முடியவில்லை. - diff --git a/static/pdf.js/locale/te/viewer.ftl b/static/pdf.js/locale/te/viewer.ftl new file mode 100644 index 00000000..94dc2b8e --- /dev/null +++ b/static/pdf.js/locale/te/viewer.ftl @@ -0,0 +1,239 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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 = (మొత్తం { $pagesCount } లో { $pageNumber }వది) +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-presentation-mode-button = + .title = ప్రదర్శనా రీతికి మారు +pdfjs-presentation-mode-button-label = ప్రదర్శనా రీతి +pdfjs-open-file-button = + .title = ఫైల్ తెరువు +pdfjs-open-file-button-label = తెరువు +pdfjs-print-button = + .title = ముద్రించు +pdfjs-print-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-vertical-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 = దస్త్రం పరిమాణం: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = శీర్షిక: +pdfjs-document-properties-author = మూలకర్త: +pdfjs-document-properties-subject = విషయం: +pdfjs-document-properties-keywords = కీ పదాలు: +pdfjs-document-properties-creation-date = సృష్టించిన తేదీ: +pdfjs-document-properties-modification-date = సవరించిన తేదీ: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = mm +pdfjs-document-properties-page-size-orientation-portrait = నిలువుచిత్రం +pdfjs-document-properties-page-size-orientation-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 }) + +## + +pdfjs-document-properties-linearized-yes = అవును +pdfjs-document-properties-linearized-no = కాదు +pdfjs-document-properties-close-button = మూసివేయి + +## Print + +pdfjs-print-progress-message = ముద్రించడానికి పత్రము సిద్ధమవుతున్నది… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = రద్దుచేయి +pdfjs-printing-not-supported = హెచ్చరిక: ఈ విహారిణి చేత ముద్రణ పూర్తిగా తోడ్పాటు లేదు. +pdfjs-printing-not-ready = హెచ్చరిక: ముద్రణ కొరకు ఈ PDF పూర్తిగా లోడవలేదు. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = పక్కపట్టీ మార్చు +pdfjs-toggle-sidebar-button-label = పక్కపట్టీ మార్చు +pdfjs-document-outline-button = + .title = పత్రము రూపము చూపించు (డబుల్ క్లిక్ చేసి అన్ని అంశాలను విస్తరించు/కూల్చు) +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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = { $page } పేజీ నఖచిత్రం + +## Find panel button title and messages + +pdfjs-find-input = + .title = కనుగొను + .placeholder = పత్రములో కనుగొను… +pdfjs-find-previous-button = + .title = పదం యొక్క ముందు సంభవాన్ని కనుగొను +pdfjs-find-previous-button-label = మునుపటి +pdfjs-find-next-button = + .title = పదం యొక్క తర్వాతి సంభవాన్ని కనుగొను +pdfjs-find-next-button-label = తరువాత +pdfjs-find-highlight-checkbox = అన్నిటిని ఉద్దీపనం చేయుము +pdfjs-find-match-case-checkbox-label = అక్షరముల తేడాతో పోల్చు +pdfjs-find-entire-word-checkbox-label = పూర్తి పదాలు +pdfjs-find-reached-top = పేజీ పైకి చేరుకున్నది, క్రింది నుండి కొనసాగించండి +pdfjs-find-reached-bottom = పేజీ చివరకు చేరుకున్నది, పైనుండి కొనసాగించండి +pdfjs-find-not-found = పదబంధం కనబడలేదు + +## 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 + + +## Loading indicator messages + +pdfjs-loading-error = PDF లోడవుచున్నప్పుడు ఒక దోషం ఎదురైంది. +pdfjs-invalid-file-error = చెల్లని లేదా పాడైన PDF ఫైలు. +pdfjs-missing-file-error = దొరకని PDF ఫైలు. +pdfjs-unexpected-response-error = అనుకోని సర్వర్ స్పందన. +pdfjs-rendering-error = పేజీను రెండర్ చేయుటలో ఒక దోషం ఎదురైంది. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } టీకా] + +## Password + +pdfjs-password-label = ఈ PDF ఫైల్ తెరుచుటకు సంకేతపదం ప్రవేశపెట్టుము. +pdfjs-password-invalid = సంకేతపదం చెల్లదు. దయచేసి మళ్ళీ ప్రయత్నించండి. +pdfjs-password-ok-button = సరే +pdfjs-password-cancel-button = రద్దుచేయి +pdfjs-web-fonts-disabled = వెబ్ ఫాంట్లు అచేతనించబడెను: ఎంబెడెడ్ PDF ఫాంట్లు ఉపయోగించలేక పోయింది. + +## Editing + +# 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 = అకిరణ్యత + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/te/viewer.properties b/static/pdf.js/locale/te/viewer.properties deleted file mode 100644 index 0e37eab8..00000000 --- a/static/pdf.js/locale/te/viewer.properties +++ /dev/null @@ -1,216 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=మునుపటి పేజీ -previous_label=క్రితం -next.title=తరువాత పేజీ -next_label=తరువాత - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=పేజీ -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=మొత్తం {{pagesCount}} లో -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=(మొత్తం {{pagesCount}} లో {{pageNumber}}వది) - -zoom_out.title=జూమ్ తగ్గించు -zoom_out_label=జూమ్ తగ్గించు -zoom_in.title=జూమ్ చేయి -zoom_in_label=జూమ్ చేయి -zoom.title=జూమ్ -presentation_mode.title=ప్రదర్శనా రీతికి మారు -presentation_mode_label=ప్రదర్శనా రీతి -open_file.title=ఫైల్ తెరువు -open_file_label=తెరువు -print.title=ముద్రించు -print_label=ముద్రించు - -# Secondary toolbar and context menu -tools.title=పనిముట్లు -tools_label=పనిముట్లు -first_page.title=మొదటి పేజీకి వెళ్ళు -first_page_label=మొదటి పేజీకి వెళ్ళు -last_page.title=చివరి పేజీకి వెళ్ళు -last_page_label=చివరి పేజీకి వెళ్ళు -page_rotate_cw.title=సవ్యదిశలో తిప్పు -page_rotate_cw_label=సవ్యదిశలో తిప్పు -page_rotate_ccw.title=అపసవ్యదిశలో తిప్పు -page_rotate_ccw_label=అపసవ్యదిశలో తిప్పు - -cursor_text_select_tool.title=టెక్స్ట్ ఎంపిక సాధనాన్ని ప్రారంభించండి -cursor_text_select_tool_label=టెక్స్ట్ ఎంపిక సాధనం -cursor_hand_tool.title=చేతి సాధనం చేతనించు -cursor_hand_tool_label=చేతి సాధనం - -scroll_vertical_label=నిలువు స్క్రోలింగు - - -# Document properties dialog box -document_properties.title=పత్రము లక్షణాలు... -document_properties_label=పత్రము లక్షణాలు... -document_properties_file_name=దస్త్రం పేరు: -document_properties_file_size=దస్త్రం పరిమాణం: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=శీర్షిక: -document_properties_author=మూలకర్త: -document_properties_subject=విషయం: -document_properties_keywords=కీ పదాలు: -document_properties_creation_date=సృష్టించిన తేదీ: -document_properties_modification_date=సవరించిన తేదీ: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=సృష్టికర్త: -document_properties_producer=PDF ఉత్పాదకి: -document_properties_version=PDF వర్షన్: -document_properties_page_count=పేజీల సంఖ్య: -document_properties_page_size=కాగితం పరిమాణం: -document_properties_page_size_unit_inches=లో -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=నిలువుచిత్రం -document_properties_page_size_orientation_landscape=అడ్డచిత్రం -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=లేఖ -document_properties_page_size_name_legal=చట్టపరమైన -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized_yes=అవును -document_properties_linearized_no=కాదు -document_properties_close=మూసివేయి - -print_progress_message=ముద్రించడానికి పత్రము సిద్ధమవుతున్నది… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=రద్దుచేయి - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=పక్కపట్టీ మార్చు -toggle_sidebar_label=పక్కపట్టీ మార్చు -document_outline.title=పత్రము రూపము చూపించు (డబుల్ క్లిక్ చేసి అన్ని అంశాలను విస్తరించు/కూల్చు) -document_outline_label=పత్రము అవుట్‌లైన్ -attachments.title=అనుబంధాలు చూపు -attachments_label=అనుబంధాలు -layers_label=పొరలు -thumbs.title=థంబ్‌నైల్స్ చూపు -thumbs_label=థంబ్‌నైల్స్ -findbar.title=పత్రములో కనుగొనుము -findbar_label=కనుగొను - -additional_layers=అదనపు పొరలు -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=పేజీ {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas={{page}} పేజీ నఖచిత్రం - -# Find panel button title and messages -find_input.title=కనుగొను -find_input.placeholder=పత్రములో కనుగొను… -find_previous.title=పదం యొక్క ముందు సంభవాన్ని కనుగొను -find_previous_label=మునుపటి -find_next.title=పదం యొక్క తర్వాతి సంభవాన్ని కనుగొను -find_next_label=తరువాత -find_highlight=అన్నిటిని ఉద్దీపనం చేయుము -find_match_case_label=అక్షరముల తేడాతో పోల్చు -find_entire_word_label=పూర్తి పదాలు -find_reached_top=పేజీ పైకి చేరుకున్నది, క్రింది నుండి కొనసాగించండి -find_reached_bottom=పేజీ చివరకు చేరుకున్నది, పైనుండి కొనసాగించండి -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_not_found=పదబంధం కనబడలేదు - -# Predefined zoom values -page_scale_width=పేజీ వెడల్పు -page_scale_fit=పేజీ అమర్పు -page_scale_auto=స్వయంచాలక జూమ్ -page_scale_actual=యథార్ధ పరిమాణం -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=PDF లోడవుచున్నప్పుడు ఒక దోషం ఎదురైంది. -invalid_file_error=చెల్లని లేదా పాడైన PDF ఫైలు. -missing_file_error=దొరకని PDF ఫైలు. -unexpected_response_error=అనుకోని సర్వర్ స్పందన. - -rendering_error=పేజీను రెండర్ చేయుటలో ఒక దోషం ఎదురైంది. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} టీకా] -password_label=ఈ PDF ఫైల్ తెరుచుటకు సంకేతపదం ప్రవేశపెట్టుము. -password_invalid=సంకేతపదం చెల్లదు. దయచేసి మళ్ళీ ప్రయత్నించండి. -password_ok=సరే -password_cancel=రద్దుచేయి - -printing_not_supported=హెచ్చరిక: ఈ విహారిణి చేత ముద్రణ పూర్తిగా తోడ్పాటు లేదు. -printing_not_ready=హెచ్చరిక: ముద్రణ కొరకు ఈ PDF పూర్తిగా లోడవలేదు. -web_fonts_disabled=వెబ్ ఫాంట్లు అచేతనించబడెను: ఎంబెడెడ్ PDF ఫాంట్లు ఉపయోగించలేక పోయింది. - -# Editor - - -# Editor - - -# Editor Parameters -editor_free_text_color=రంగు -editor_free_text_size=పరిమాణం -editor_ink_color=రంగు -editor_ink_thickness=మందం -editor_ink_opacity=అకిరణ్యత - -# Editor aria - -# Editor aria - diff --git a/static/pdf.js/locale/tg/viewer.ftl b/static/pdf.js/locale/tg/viewer.ftl new file mode 100644 index 00000000..42964701 --- /dev/null +++ b/static/pdf.js/locale/tg/viewer.ftl @@ -0,0 +1,396 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = Гузариш ба реҷаи тақдим +pdfjs-presentation-mode-button-label = Реҷаи тақдим +pdfjs-open-file-button = + .title = Кушодани файл +pdfjs-open-file-button-label = Кушодан +pdfjs-print-button = + .title = Чоп кардан +pdfjs-print-button-label = Чоп кардан +pdfjs-save-button = + .title = Нигоҳ доштан +pdfjs-save-button-label = Нигоҳ доштан +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Боргирӣ кардан +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = Боргирӣ кардан +pdfjs-bookmark-button = + .title = Саҳифаи ҷорӣ (Дидани нишонии URL аз саҳифаи ҷорӣ) +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 = Варақзании миқёсбандӣ +pdfjs-spread-none-button = + .title = Густариши саҳифаҳо истифода бурда нашавад +pdfjs-spread-none-button-label = Бе густурдани саҳифаҳо +pdfjs-spread-odd-button = + .title = Густариши саҳифаҳо аз саҳифаҳо бо рақамҳои тоқ оғоз карда мешавад +pdfjs-spread-odd-button-label = Саҳифаҳои тоқ аз тарафи чап +pdfjs-spread-even-button = + .title = Густариши саҳифаҳо аз саҳифаҳо бо рақамҳои ҷуфт оғоз карда мешавад +pdfjs-spread-even-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 = Андозаи файл: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } байт) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } МБ ({ $size_b } байт) +pdfjs-document-properties-title = Сарлавҳа: +pdfjs-document-properties-author = Муаллиф: +pdfjs-document-properties-subject = Мавзуъ: +pdfjs-document-properties-keywords = Калимаҳои калидӣ: +pdfjs-document-properties-creation-date = Санаи эҷод: +pdfjs-document-properties-modification-date = Санаи тағйирот: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = амудӣ +pdfjs-document-properties-page-size-orientation-landscape = уфуқӣ +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Мактуб +pdfjs-document-properties-page-size-name-legal = Ҳуқуқӣ + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = Намоиши тез дар Интернет: +pdfjs-document-properties-linearized-yes = Ҳа +pdfjs-document-properties-linearized-no = Не +pdfjs-document-properties-close-button = Пӯшидан + +## Print + +pdfjs-print-progress-message = Омодасозии ҳуҷҷат барои чоп… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Бекор кардан +pdfjs-printing-not-supported = Диққат: Чопкунӣ аз тарафи ин браузер ба таври пурра дастгирӣ намешавад. +pdfjs-printing-not-ready = Диққат: Файли «PDF» барои чопкунӣ пурра бор карда нашуд. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Фаъол кардани навори ҷонибӣ +pdfjs-toggle-sidebar-notification-button = + .title = Фаъол кардани навори ҷонибӣ (ҳуҷҷат дорои сохтор/замимаҳо/қабатҳо мебошад) +pdfjs-toggle-sidebar-button-label = Фаъол кардани навори ҷонибӣ +pdfjs-document-outline-button = + .title = Намоиш додани сохтори ҳуҷҷат (барои баркушодан/пеҷондани ҳамаи унсурҳо дубора зер кунед) +pdfjs-document-outline-button-label = Сохтори ҳуҷҷат +pdfjs-attachments-button = + .title = Намоиш додани замимаҳо +pdfjs-attachments-button-label = Замимаҳо +pdfjs-layers-button = + .title = Намоиш додани қабатҳо (барои барқарор кардани ҳамаи қабатҳо ба вазъияти пешфарз дубора зер кунед) +pdfjs-layers-button-label = Қабатҳо +pdfjs-thumbs-button = + .title = Намоиш додани тасвирчаҳо +pdfjs-thumbs-button-label = Тасвирчаҳо +pdfjs-current-outline-item-button = + .title = Ёфтани унсури сохтори ҷорӣ +pdfjs-current-outline-item-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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Тасвирчаи саҳифаи { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Ёфтан + .placeholder = Ёфтан дар ҳуҷҷат… +pdfjs-find-previous-button = + .title = Ҷустуҷӯи мавриди қаблии ибораи пешниҳодшуда +pdfjs-find-previous-button-label = Қаблӣ +pdfjs-find-next-button = + .title = Ҷустуҷӯи мавриди навбатии ибораи пешниҳодшуда +pdfjs-find-next-button-label = Навбатӣ +pdfjs-find-highlight-checkbox = Ҳамаашро бо ранг ҷудо кардан +pdfjs-find-match-case-checkbox-label = Бо дарназардошти ҳарфҳои хурду калон +pdfjs-find-match-diacritics-checkbox-label = Бо дарназардошти аломатҳои диакритикӣ +pdfjs-find-entire-word-checkbox-label = Калимаҳои пурра +pdfjs-find-reached-top = Ба болои ҳуҷҷат расид, аз поён идома ёфт +pdfjs-find-reached-bottom = Ба поёни ҳуҷҷат расид, аз боло идома ёфт +# 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 } аз { $total } мувофиқат + *[other] { $current } аз { $total } мувофиқат + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Зиёда аз { $limit } мувофиқат + *[other] Зиёда аз { $limit } мувофиқат + } +pdfjs-find-not-found = Ибора ёфт нашуд + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = Ҳангоми боркунии «PDF» хато ба миён омад. +pdfjs-invalid-file-error = Файли «PDF» нодуруст ё вайроншуда мебошад. +pdfjs-missing-file-error = Файли «PDF» ғоиб аст. +pdfjs-unexpected-response-error = Ҷавоби ногаҳон аз сервер. +pdfjs-rendering-error = Ҳангоми шаклсозии саҳифа хато ба миён омад. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Ҳошиянависӣ - { $type }] + +## Password + +pdfjs-password-label = Барои кушодани ин файли «PDF» ниҳонвожаро ворид кунед. +pdfjs-password-invalid = Ниҳонвожаи нодуруст. Лутфан, аз нав кӯшиш кунед. +pdfjs-password-ok-button = ХУБ +pdfjs-password-cancel-button = Бекор кардан +pdfjs-web-fonts-disabled = Шрифтҳои интернетӣ ғайрифаъоланд: истифодаи шрифтҳои дарунсохти «PDF» ғайриимкон аст. + +## Editing + +pdfjs-editor-free-text-button = + .title = Матн +pdfjs-editor-free-text-button-label = Матн +pdfjs-editor-ink-button = + .title = Расмкашӣ +pdfjs-editor-ink-button-label = Расмкашӣ +pdfjs-editor-stamp-button = + .title = Илова ё таҳрир кардани тасвирҳо +pdfjs-editor-stamp-button-label = Илова ё таҳрир кардани тасвирҳо +pdfjs-editor-highlight-button = + .title = Ҷудокунӣ +pdfjs-editor-highlight-button-label = Ҷудокунӣ +pdfjs-highlight-floating-button = + .title = Ҷудокунӣ +pdfjs-highlight-floating-button1 = + .title = Ҷудокунӣ + .aria-label = Ҷудокунӣ +pdfjs-highlight-floating-button-label = Ҷудокунӣ + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Тоза кардани нақша +pdfjs-editor-remove-freetext-button = + .title = Тоза кардани матн +pdfjs-editor-remove-stamp-button = + .title = Тоза кардани тасвир +pdfjs-editor-remove-highlight-button = + .title = Тоза кардани ҷудокунӣ + +## + +# 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 = Шаффофӣ +pdfjs-editor-stamp-add-image-button = + .title = Илова кардани тасвир +pdfjs-editor-stamp-add-image-button-label = Илова кардани тасвир +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Ғафсӣ +pdfjs-editor-free-highlight-thickness-title = + .title = Иваз кардани ғафсӣ ҳангоми ҷудокунии унсурҳо ба ғайр аз матн +pdfjs-free-text = + .aria-label = Муҳаррири матн +pdfjs-free-text-default-content = Нависед… +pdfjs-ink = + .aria-label = Муҳаррири расмкашӣ +pdfjs-ink-canvas = + .aria-label = Тасвири эҷодкардаи корбар + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Матни ивазкунанда +pdfjs-editor-alt-text-edit-button-label = Таҳрир кардани матни ивазкунанда +pdfjs-editor-alt-text-dialog-label = Имконеро интихоб намоед +pdfjs-editor-alt-text-dialog-description = Вақте ки одамон тасвирро дида наметавонанд ё вақте ки тасвир бор карда намешавад, матни иловагӣ (Alt text) кумак мерасонад. +pdfjs-editor-alt-text-add-description-label = Илова кардани тавсиф +pdfjs-editor-alt-text-add-description-description = Кӯшиш кунед, ки 1-2 ҷумлаеро нависед, ки ба мавзӯъ, танзим ё амалҳо тавзеҳ медиҳад. +pdfjs-editor-alt-text-mark-decorative-label = Гузоштан ҳамчун матни ороишӣ +pdfjs-editor-alt-text-mark-decorative-description = Ин барои тасвирҳои ороишӣ, ба монанди марзҳо ё аломатҳои обӣ, истифода мешавад. +pdfjs-editor-alt-text-cancel-button = Бекор кардан +pdfjs-editor-alt-text-save-button = Нигоҳ доштан +pdfjs-editor-alt-text-decorative-tooltip = Ҳамчун матни ороишӣ гузошта шуд +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Барои мисол, «Ман забони тоҷикиро дӯст медорам» + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Кунҷи чапи боло — тағйир додани андоза +pdfjs-editor-resizer-label-top-middle = Канори миёнаи боло — тағйир додани андоза +pdfjs-editor-resizer-label-top-right = Кунҷи рости боло — тағйир додани андоза +pdfjs-editor-resizer-label-middle-right = Канори миёнаи рост — тағйир додани андоза +pdfjs-editor-resizer-label-bottom-right = Кунҷи рости поён — тағйир додани андоза +pdfjs-editor-resizer-label-bottom-middle = Канори миёнаи поён — тағйир додани андоза +pdfjs-editor-resizer-label-bottom-left = Кунҷи чапи поён — тағйир додани андоза +pdfjs-editor-resizer-label-middle-left = Канори миёнаи чап — тағйир додани андоза + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Ранги ҷудокунӣ +pdfjs-editor-colorpicker-button = + .title = Иваз кардани ранг +pdfjs-editor-colorpicker-dropdown = + .aria-label = Интихоби ранг +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 = Ҳамаро намоиш додан diff --git a/static/pdf.js/locale/tg/viewer.properties b/static/pdf.js/locale/tg/viewer.properties deleted file mode 100644 index b00f700e..00000000 --- a/static/pdf.js/locale/tg/viewer.properties +++ /dev/null @@ -1,281 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Саҳифаи қаблӣ -previous_label=Қаблӣ -next.title=Саҳифаи навбатӣ -next_label=Навбатӣ - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Саҳифа -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=аз {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} аз {{pagesCount}}) - -zoom_out.title=Хурд кардан -zoom_out_label=Хурд кардан -zoom_in.title=Калон кардан -zoom_in_label=Калон кардан -zoom.title=Танзими андоза -presentation_mode.title=Гузариш ба реҷаи тақдим -presentation_mode_label=Реҷаи тақдим -open_file.title=Кушодани файл -open_file_label=Кушодан -print.title=Чоп кардан -print_label=Чоп кардан -save.title=Нигоҳ доштан -save_label=Нигоҳ доштан -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Боргирӣ кардан -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Боргирӣ кардан -bookmark1.title=Саҳифаи ҷорӣ (Дидани нишонии URL аз саҳифаи ҷорӣ) -bookmark1_label=Саҳифаи ҷорӣ -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Кушодан дар барнома -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Кушодан дар барнома - -# Secondary toolbar and context menu -tools.title=Абзорҳо -tools_label=Абзорҳо -first_page.title=Ба саҳифаи аввал гузаред -first_page_label=Ба саҳифаи аввал гузаред -last_page.title=Ба саҳифаи охирин гузаред -last_page_label=Ба саҳифаи охирин гузаред -page_rotate_cw.title=Ба самти ҳаракати ақрабаки соат давр задан -page_rotate_cw_label=Ба самти ҳаракати ақрабаки соат давр задан -page_rotate_ccw.title=Ба муқобили самти ҳаракати ақрабаки соат давр задан -page_rotate_ccw_label=Ба муқобили самти ҳаракати ақрабаки соат давр задан - -cursor_text_select_tool.title=Фаъол кардани «Абзори интихоби матн» -cursor_text_select_tool_label=Абзори интихоби матн -cursor_hand_tool.title=Фаъол кардани «Абзори даст» -cursor_hand_tool_label=Абзори даст - -scroll_page.title=Истифодаи варақзанӣ -scroll_page_label=Варақзанӣ -scroll_vertical.title=Истифодаи варақзании амудӣ -scroll_vertical_label=Варақзании амудӣ -scroll_horizontal.title=Истифодаи варақзании уфуқӣ -scroll_horizontal_label=Варақзании уфуқӣ -scroll_wrapped.title=Истифодаи варақзании миқёсбандӣ -scroll_wrapped_label=Варақзании миқёсбандӣ - -spread_none.title=Густариши саҳифаҳо истифода бурда нашавад -spread_none_label=Бе густурдани саҳифаҳо -spread_odd.title=Густариши саҳифаҳо аз саҳифаҳо бо рақамҳои тоқ оғоз карда мешавад -spread_odd_label=Саҳифаҳои тоқ аз тарафи чап -spread_even.title=Густариши саҳифаҳо аз саҳифаҳо бо рақамҳои ҷуфт оғоз карда мешавад -spread_even_label=Саҳифаҳои ҷуфт аз тарафи чап - -# Document properties dialog box -document_properties.title=Хусусиятҳои ҳуҷҷат… -document_properties_label=Хусусиятҳои ҳуҷҷат… -document_properties_file_name=Номи файл: -document_properties_file_size=Андозаи файл: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} КБ ({{size_b}} байт) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} МБ ({{size_b}} байт) -document_properties_title=Сарлавҳа: -document_properties_author=Муаллиф: -document_properties_subject=Мавзуъ: -document_properties_keywords=Калимаҳои калидӣ: -document_properties_creation_date=Санаи эҷод: -document_properties_modification_date=Санаи тағйирот: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Эҷодкунанда: -document_properties_producer=Таҳиякунандаи «PDF»: -document_properties_version=Версияи «PDF»: -document_properties_page_count=Шумораи саҳифаҳо: -document_properties_page_size=Андозаи саҳифа: -document_properties_page_size_unit_inches=дюйм -document_properties_page_size_unit_millimeters=мм -document_properties_page_size_orientation_portrait=амудӣ -document_properties_page_size_orientation_landscape=уфуқӣ -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Мактуб -document_properties_page_size_name_legal=Ҳуқуқӣ -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Намоиши тез дар Интернет: -document_properties_linearized_yes=Ҳа -document_properties_linearized_no=Не -document_properties_close=Пӯшидан - -print_progress_message=Омодасозии ҳуҷҷат барои чоп… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Бекор кардан - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Фаъол кардани навори ҷонибӣ -toggle_sidebar_notification2.title=Фаъол кардани навори ҷонибӣ (ҳуҷҷат дорои сохтор/замимаҳо/қабатҳо мебошад) -toggle_sidebar_label=Фаъол кардани навори ҷонибӣ -document_outline.title=Намоиш додани сохтори ҳуҷҷат (барои баркушодан/пеҷондани ҳамаи унсурҳо дубора зер кунед) -document_outline_label=Сохтори ҳуҷҷат -attachments.title=Намоиш додани замимаҳо -attachments_label=Замимаҳо -layers.title=Намоиш додани қабатҳо (барои барқарор кардани ҳамаи қабатҳо ба вазъияти пешфарз дубора зер кунед) -layers_label=Қабатҳо -thumbs.title=Намоиш додани тасвирчаҳо -thumbs_label=Тасвирчаҳо -current_outline_item.title=Ёфтани унсури сохтори ҷорӣ -current_outline_item_label=Унсури сохтори ҷорӣ -findbar.title=Ёфтан дар ҳуҷҷат -findbar_label=Ёфтан - -additional_layers=Қабатҳои иловагӣ -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Саҳифаи {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Саҳифаи {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Тасвирчаи саҳифаи {{page}} - -# Find panel button title and messages -find_input.title=Ёфтан -find_input.placeholder=Ёфтан дар ҳуҷҷат… -find_previous.title=Ҷустуҷӯи мавриди қаблии ибораи пешниҳодшуда -find_previous_label=Қаблӣ -find_next.title=Ҷустуҷӯи мавриди навбатии ибораи пешниҳодшуда -find_next_label=Навбатӣ -find_highlight=Ҳамаашро бо ранг ҷудо кардан -find_match_case_label=Бо дарназардошти ҳарфҳои хурду калон -find_match_diacritics_label=Бо дарназардошти аломатҳои диакритикӣ -find_entire_word_label=Калимаҳои пурра -find_reached_top=Ба болои ҳуҷҷат расид, аз поён идома ёфт -find_reached_bottom=Ба поёни ҳуҷҷат расид, аз боло идома ёфт -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} аз {{total}} мувофиқат -find_match_count[two]={{current}} аз {{total}} мувофиқат -find_match_count[few]={{current}} аз {{total}} мувофиқат -find_match_count[many]={{current}} аз {{total}} мувофиқат -find_match_count[other]={{current}} аз {{total}} мувофиқат -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Зиёда аз {{limit}} мувофиқат -find_match_count_limit[one]=Зиёда аз {{limit}} мувофиқат -find_match_count_limit[two]=Зиёда аз {{limit}} мувофиқат -find_match_count_limit[few]=Зиёда аз {{limit}} мувофиқат -find_match_count_limit[many]=Зиёда аз {{limit}} мувофиқат -find_match_count_limit[other]=Зиёда аз {{limit}} мувофиқат -find_not_found=Ибора ёфт нашуд - -# Predefined zoom values -page_scale_width=Аз рӯи паҳнои саҳифа -page_scale_fit=Аз рӯи андозаи саҳифа -page_scale_auto=Андозаи худкор -page_scale_actual=Андозаи воқеӣ -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Ҳангоми боркунии «PDF» хато ба миён омад. -invalid_file_error=Файли «PDF» нодуруст ё вайроншуда мебошад. -missing_file_error=Файли «PDF» ғоиб аст. -unexpected_response_error=Ҷавоби ногаҳон аз сервер. -rendering_error=Ҳангоми шаклсозии саҳифа хато ба миён омад. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Ҳошиянависӣ - {{type}}] -password_label=Барои кушодани ин файли «PDF» ниҳонвожаро ворид кунед. -password_invalid=Ниҳонвожаи нодуруст. Лутфан, аз нав кӯшиш кунед. -password_ok=ХУБ -password_cancel=Бекор кардан - -printing_not_supported=Диққат: Чопкунӣ аз тарафи ин браузер ба таври пурра дастгирӣ намешавад. -printing_not_ready=Диққат: Файли «PDF» барои чопкунӣ пурра бор карда нашуд. -web_fonts_disabled=Шрифтҳои интернетӣ ғайрифаъоланд: истифодаи шрифтҳои дарунсохти «PDF» ғайриимкон аст. - -# Editor -editor_free_text2.title=Матн -editor_free_text2_label=Матн -editor_ink2.title=Расмкашӣ -editor_ink2_label=Расмкашӣ - -editor_stamp1.title=Илова ё таҳрир кардани тасвирҳо -editor_stamp1_label=Илова ё таҳрир кардани тасвирҳо - -free_text2_default_content=Нависед… - -# Editor Parameters -editor_free_text_color=Ранг -editor_free_text_size=Андоза -editor_ink_color=Ранг -editor_ink_thickness=Ғафсӣ -editor_ink_opacity=Шаффофӣ - -editor_stamp_add_image_label=Илова кардани тасвир -editor_stamp_add_image.title=Илова кардани тасвир - -# Editor aria -editor_free_text2_aria_label=Муҳаррири матн -editor_ink2_aria_label=Муҳаррири расмкашӣ -editor_ink_canvas_aria_label=Тасвири эҷодкардаи корбар - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Матни ивазкунанда -editor_alt_text_edit_button_label=Таҳрир кардани матни ивазкунанда -editor_alt_text_dialog_label=Имконеро интихоб намоед -editor_alt_text_add_description_label=Илова кардани тавсиф -editor_alt_text_mark_decorative_label=Гузоштан ҳамчун матни ороишӣ -editor_alt_text_cancel_button=Бекор кардан -editor_alt_text_save_button=Нигоҳ доштан -editor_alt_text_decorative_tooltip=Ҳамчун матни ороишӣ гузошта шуд -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=Барои мисол, «Ман забони тоҷикиро дӯст медорам» diff --git a/static/pdf.js/locale/th/viewer.ftl b/static/pdf.js/locale/th/viewer.ftl new file mode 100644 index 00000000..283b440c --- /dev/null +++ b/static/pdf.js/locale/th/viewer.ftl @@ -0,0 +1,394 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = สลับเป็นโหมดการนำเสนอ +pdfjs-presentation-mode-button-label = โหมดการนำเสนอ +pdfjs-open-file-button = + .title = เปิดไฟล์ +pdfjs-open-file-button-label = เปิด +pdfjs-print-button = + .title = พิมพ์ +pdfjs-print-button-label = พิมพ์ +pdfjs-save-button = + .title = บันทึก +pdfjs-save-button-label = บันทึก +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = ดาวน์โหลด +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = ดาวน์โหลด +pdfjs-bookmark-button = + .title = หน้าปัจจุบัน (ดู URL จากหน้าปัจจุบัน) +pdfjs-bookmark-button-label = หน้าปัจจุบัน +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = เปิดในแอป +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-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 = เลื่อนแบบคลุม +pdfjs-spread-none-button = + .title = ไม่ต้องรวมการกระจายหน้า +pdfjs-spread-none-button-label = ไม่กระจาย +pdfjs-spread-odd-button = + .title = รวมการกระจายหน้าเริ่มจากหน้าคี่ +pdfjs-spread-odd-button-label = กระจายอย่างเหลือเศษ +pdfjs-spread-even-button = + .title = รวมการกระจายหน้าเริ่มจากหน้าคู่ +pdfjs-spread-even-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 = ขนาดไฟล์: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } ไบต์) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } ไบต์) +pdfjs-document-properties-title = ชื่อเรื่อง: +pdfjs-document-properties-author = ผู้สร้าง: +pdfjs-document-properties-subject = ชื่อเรื่อง: +pdfjs-document-properties-keywords = คำสำคัญ: +pdfjs-document-properties-creation-date = วันที่สร้าง: +pdfjs-document-properties-modification-date = วันที่แก้ไข: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = แนวตั้ง +pdfjs-document-properties-page-size-orientation-landscape = แนวนอน +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = จดหมาย +pdfjs-document-properties-page-size-name-legal = ข้อกฎหมาย + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = มุมมองเว็บแบบรวดเร็ว: +pdfjs-document-properties-linearized-yes = ใช่ +pdfjs-document-properties-linearized-no = ไม่ +pdfjs-document-properties-close-button = ปิด + +## Print + +pdfjs-print-progress-message = กำลังเตรียมเอกสารสำหรับการพิมพ์… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = ยกเลิก +pdfjs-printing-not-supported = คำเตือน: เบราว์เซอร์นี้ไม่ได้สนับสนุนการพิมพ์อย่างเต็มที่ +pdfjs-printing-not-ready = คำเตือน: PDF ไม่ได้รับการโหลดอย่างเต็มที่สำหรับการพิมพ์ + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = เปิด/ปิดแถบข้าง +pdfjs-toggle-sidebar-notification-button = + .title = เปิด/ปิดแถบข้าง (เอกสารมีเค้าร่าง/ไฟล์แนบ/เลเยอร์) +pdfjs-toggle-sidebar-button-label = เปิด/ปิดแถบข้าง +pdfjs-document-outline-button = + .title = แสดงเค้าร่างเอกสาร (คลิกสองครั้งเพื่อขยาย/ยุบรายการทั้งหมด) +pdfjs-document-outline-button-label = เค้าร่างเอกสาร +pdfjs-attachments-button = + .title = แสดงไฟล์แนบ +pdfjs-attachments-button-label = ไฟล์แนบ +pdfjs-layers-button = + .title = แสดงเลเยอร์ (คลิกสองครั้งเพื่อรีเซ็ตเลเยอร์ทั้งหมดเป็นสถานะเริ่มต้น) +pdfjs-layers-button-label = เลเยอร์ +pdfjs-thumbs-button = + .title = แสดงภาพขนาดย่อ +pdfjs-thumbs-button-label = ภาพขนาดย่อ +pdfjs-current-outline-item-button = + .title = ค้นหารายการเค้าร่างปัจจุบัน +pdfjs-current-outline-item-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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = ภาพขนาดย่อของหน้า { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = ค้นหา + .placeholder = ค้นหาในเอกสาร… +pdfjs-find-previous-button = + .title = หาตำแหน่งก่อนหน้าของวลี +pdfjs-find-previous-button-label = ก่อนหน้า +pdfjs-find-next-button = + .title = หาตำแหน่งถัดไปของวลี +pdfjs-find-next-button-label = ถัดไป +pdfjs-find-highlight-checkbox = เน้นสีทั้งหมด +pdfjs-find-match-case-checkbox-label = ตัวพิมพ์ใหญ่เล็กตรงกัน +pdfjs-find-match-diacritics-checkbox-label = เครื่องหมายกำกับการออกเสียงตรงกัน +pdfjs-find-entire-word-checkbox-label = ทั้งคำ +pdfjs-find-reached-top = ค้นหาถึงจุดเริ่มต้นของหน้า เริ่มค้นต่อจากด้านล่าง +pdfjs-find-reached-bottom = ค้นหาถึงจุดสิ้นสุดหน้า เริ่มค้นต่อจากด้านบน +# 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 = { $current } จาก { $total } รายการที่ตรงกัน +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = มากกว่า { $limit } รายการที่ตรงกัน +pdfjs-find-not-found = ไม่พบวลี + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = เกิดข้อผิดพลาดขณะโหลด PDF +pdfjs-invalid-file-error = ไฟล์ PDF ไม่ถูกต้องหรือเสียหาย +pdfjs-missing-file-error = ไฟล์ PDF หายไป +pdfjs-unexpected-response-error = การตอบสนองของเซิร์ฟเวอร์ที่ไม่คาดคิด +pdfjs-rendering-error = เกิดข้อผิดพลาดขณะเรนเดอร์หน้า + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [คำอธิบายประกอบ { $type }] + +## Password + +pdfjs-password-label = ป้อนรหัสผ่านเพื่อเปิดไฟล์ PDF นี้ +pdfjs-password-invalid = รหัสผ่านไม่ถูกต้อง โปรดลองอีกครั้ง +pdfjs-password-ok-button = ตกลง +pdfjs-password-cancel-button = ยกเลิก +pdfjs-web-fonts-disabled = แบบอักษรเว็บถูกปิดใช้งาน: ไม่สามารถใช้แบบอักษร PDF ฝังตัว + +## Editing + +pdfjs-editor-free-text-button = + .title = ข้อความ +pdfjs-editor-free-text-button-label = ข้อความ +pdfjs-editor-ink-button = + .title = รูปวาด +pdfjs-editor-ink-button-label = รูปวาด +pdfjs-editor-stamp-button = + .title = เพิ่มหรือแก้ไขภาพ +pdfjs-editor-stamp-button-label = เพิ่มหรือแก้ไขภาพ +pdfjs-editor-highlight-button = + .title = เน้น +pdfjs-editor-highlight-button-label = เน้น +pdfjs-highlight-floating-button = + .title = เน้นสี +pdfjs-highlight-floating-button1 = + .title = เน้นสี + .aria-label = เน้นสี +pdfjs-highlight-floating-button-label = เน้นสี + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = เอาภาพวาดออก +pdfjs-editor-remove-freetext-button = + .title = เอาข้อความออก +pdfjs-editor-remove-stamp-button = + .title = เอาภาพออก +pdfjs-editor-remove-highlight-button = + .title = เอาการเน้นสีออก + +## + +# 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 = ความทึบ +pdfjs-editor-stamp-add-image-button = + .title = เพิ่มภาพ +pdfjs-editor-stamp-add-image-button-label = เพิ่มภาพ +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = ความหนา +pdfjs-editor-free-highlight-thickness-title = + .title = เปลี่ยนความหนาเมื่อเน้นรายการอื่นๆ ที่ไม่ใช่ข้อความ +pdfjs-free-text = + .aria-label = ตัวแก้ไขข้อความ +pdfjs-free-text-default-content = เริ่มพิมพ์… +pdfjs-ink = + .aria-label = ตัวแก้ไขรูปวาด +pdfjs-ink-canvas = + .aria-label = ภาพที่ผู้ใช้สร้างขึ้น + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = ข้อความทดแทน +pdfjs-editor-alt-text-edit-button-label = แก้ไขข้อความทดแทน +pdfjs-editor-alt-text-dialog-label = เลือกตัวเลือก +pdfjs-editor-alt-text-dialog-description = ข้อความทดแทนสามารถช่วยเหลือได้เมื่อผู้ใช้มองไม่เห็นภาพ หรือภาพไม่โหลด +pdfjs-editor-alt-text-add-description-label = เพิ่มคำอธิบาย +pdfjs-editor-alt-text-add-description-description = แนะนำให้ใช้ 1-2 ประโยคซึ่งอธิบายหัวเรื่อง ฉาก หรือการกระทำ +pdfjs-editor-alt-text-mark-decorative-label = ทำเครื่องหมายเป็นสิ่งตกแต่ง +pdfjs-editor-alt-text-mark-decorative-description = สิ่งนี้ใช้สำหรับภาพที่เป็นสิ่งประดับ เช่น ขอบ หรือลายน้ำ +pdfjs-editor-alt-text-cancel-button = ยกเลิก +pdfjs-editor-alt-text-save-button = บันทึก +pdfjs-editor-alt-text-decorative-tooltip = ทำเครื่องหมายเป็นสิ่งตกแต่งแล้ว +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = ตัวอย่างเช่น “ชายหนุ่มคนหนึ่งนั่งลงที่โต๊ะเพื่อรับประทานอาหารมื้อหนึ่ง” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = มุมซ้ายบน — ปรับขนาด +pdfjs-editor-resizer-label-top-middle = ตรงกลางด้านบน — ปรับขนาด +pdfjs-editor-resizer-label-top-right = มุมขวาบน — ปรับขนาด +pdfjs-editor-resizer-label-middle-right = ตรงกลางด้านขวา — ปรับขนาด +pdfjs-editor-resizer-label-bottom-right = มุมขวาล่าง — ปรับขนาด +pdfjs-editor-resizer-label-bottom-middle = ตรงกลางด้านล่าง — ปรับขนาด +pdfjs-editor-resizer-label-bottom-left = มุมซ้ายล่าง — ปรับขนาด +pdfjs-editor-resizer-label-middle-left = ตรงกลางด้านซ้าย — ปรับขนาด + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = สีเน้น +pdfjs-editor-colorpicker-button = + .title = เปลี่ยนสี +pdfjs-editor-colorpicker-dropdown = + .aria-label = ทางเลือกสี +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 = แสดงทั้งหมด diff --git a/static/pdf.js/locale/th/viewer.properties b/static/pdf.js/locale/th/viewer.properties deleted file mode 100644 index f194072d..00000000 --- a/static/pdf.js/locale/th/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=หน้าก่อนหน้า -previous_label=ก่อนหน้า -next.title=หน้าถัดไป -next_label=ถัดไป - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=หน้า -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=จาก {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} จาก {{pagesCount}}) - -zoom_out.title=ซูมออก -zoom_out_label=ซูมออก -zoom_in.title=ซูมเข้า -zoom_in_label=ซูมเข้า -zoom.title=ซูม -presentation_mode.title=สลับเป็นโหมดการนำเสนอ -presentation_mode_label=โหมดการนำเสนอ -open_file.title=เปิดไฟล์ -open_file_label=เปิด -print.title=พิมพ์ -print_label=พิมพ์ -save.title=บันทึก -save_label=บันทึก -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=ดาวน์โหลด -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=ดาวน์โหลด -bookmark1.title=หน้าปัจจุบัน (ดู URL จากหน้าปัจจุบัน) -bookmark1_label=หน้าปัจจุบัน -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=เปิดในแอป -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=เปิดในแอป - -# Secondary toolbar and context menu -tools.title=เครื่องมือ -tools_label=เครื่องมือ -first_page.title=ไปยังหน้าแรก -first_page_label=ไปยังหน้าแรก -last_page.title=ไปยังหน้าสุดท้าย -last_page_label=ไปยังหน้าสุดท้าย -page_rotate_cw.title=หมุนตามเข็มนาฬิกา -page_rotate_cw_label=หมุนตามเข็มนาฬิกา -page_rotate_ccw.title=หมุนทวนเข็มนาฬิกา -page_rotate_ccw_label=หมุนทวนเข็มนาฬิกา - -cursor_text_select_tool.title=เปิดใช้งานเครื่องมือการเลือกข้อความ -cursor_text_select_tool_label=เครื่องมือการเลือกข้อความ -cursor_hand_tool.title=เปิดใช้งานเครื่องมือมือ -cursor_hand_tool_label=เครื่องมือมือ - -scroll_page.title=ใช้การเลื่อนหน้า -scroll_page_label=การเลื่อนหน้า -scroll_vertical.title=ใช้การเลื่อนแนวตั้ง -scroll_vertical_label=การเลื่อนแนวตั้ง -scroll_horizontal.title=ใช้การเลื่อนแนวนอน -scroll_horizontal_label=การเลื่อนแนวนอน -scroll_wrapped.title=ใช้การเลื่อนแบบคลุม -scroll_wrapped_label=เลื่อนแบบคลุม - -spread_none.title=ไม่ต้องรวมการกระจายหน้า -spread_none_label=ไม่กระจาย -spread_odd.title=รวมการกระจายหน้าเริ่มจากหน้าคี่ -spread_odd_label=กระจายอย่างเหลือเศษ -spread_even.title=รวมการกระจายหน้าเริ่มจากหน้าคู่ -spread_even_label=กระจายอย่างเท่าเทียม - -# Document properties dialog box -document_properties.title=คุณสมบัติเอกสาร… -document_properties_label=คุณสมบัติเอกสาร… -document_properties_file_name=ชื่อไฟล์: -document_properties_file_size=ขนาดไฟล์: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} ไบต์) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} ไบต์) -document_properties_title=ชื่อเรื่อง: -document_properties_author=ผู้สร้าง: -document_properties_subject=ชื่อเรื่อง: -document_properties_keywords=คำสำคัญ: -document_properties_creation_date=วันที่สร้าง: -document_properties_modification_date=วันที่แก้ไข: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=ผู้สร้าง: -document_properties_producer=ผู้ผลิต PDF: -document_properties_version=รุ่น PDF: -document_properties_page_count=จำนวนหน้า: -document_properties_page_size=ขนาดหน้า: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=แนวตั้ง -document_properties_page_size_orientation_landscape=แนวนอน -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=จดหมาย -document_properties_page_size_name_legal=ข้อกฎหมาย -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=มุมมองเว็บแบบรวดเร็ว: -document_properties_linearized_yes=ใช่ -document_properties_linearized_no=ไม่ -document_properties_close=ปิด - -print_progress_message=กำลังเตรียมเอกสารสำหรับการพิมพ์… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=ยกเลิก - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=เปิด/ปิดแถบข้าง -toggle_sidebar_notification2.title=เปิด/ปิดแถบข้าง (เอกสารมีเค้าร่าง/ไฟล์แนบ/เลเยอร์) -toggle_sidebar_label=เปิด/ปิดแถบข้าง -document_outline.title=แสดงเค้าร่างเอกสาร (คลิกสองครั้งเพื่อขยาย/ยุบรายการทั้งหมด) -document_outline_label=เค้าร่างเอกสาร -attachments.title=แสดงไฟล์แนบ -attachments_label=ไฟล์แนบ -layers.title=แสดงเลเยอร์ (คลิกสองครั้งเพื่อรีเซ็ตเลเยอร์ทั้งหมดเป็นสถานะเริ่มต้น) -layers_label=เลเยอร์ -thumbs.title=แสดงภาพขนาดย่อ -thumbs_label=ภาพขนาดย่อ -current_outline_item.title=ค้นหารายการเค้าร่างปัจจุบัน -current_outline_item_label=รายการเค้าร่างปัจจุบัน -findbar.title=ค้นหาในเอกสาร -findbar_label=ค้นหา - -additional_layers=เลเยอร์เพิ่มเติม -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=หน้า {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=หน้า {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=ภาพขนาดย่อของหน้า {{page}} - -# Find panel button title and messages -find_input.title=ค้นหา -find_input.placeholder=ค้นหาในเอกสาร… -find_previous.title=หาตำแหน่งก่อนหน้าของวลี -find_previous_label=ก่อนหน้า -find_next.title=หาตำแหน่งถัดไปของวลี -find_next_label=ถัดไป -find_highlight=เน้นสีทั้งหมด -find_match_case_label=ตัวพิมพ์ใหญ่เล็กตรงกัน -find_match_diacritics_label=เครื่องหมายกำกับการออกเสียงตรงกัน -find_entire_word_label=ทั้งคำ -find_reached_top=ค้นหาถึงจุดเริ่มต้นของหน้า เริ่มค้นต่อจากด้านล่าง -find_reached_bottom=ค้นหาถึงจุดสิ้นสุดหน้า เริ่มค้นต่อจากด้านบน -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} จาก {{total}} ที่ตรงกัน -find_match_count[two]={{current}} จาก {{total}} ที่ตรงกัน -find_match_count[few]={{current}} จาก {{total}} ที่ตรงกัน -find_match_count[many]={{current}} จาก {{total}} ที่ตรงกัน -find_match_count[other]={{current}} จาก {{total}} ที่ตรงกัน -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=มากกว่า {{limit}} ที่ตรงกัน -find_match_count_limit[one]=มากกว่า {{limit}} ที่ตรงกัน -find_match_count_limit[two]=มากกว่า {{limit}} ที่ตรงกัน -find_match_count_limit[few]=มากกว่า {{limit}} ที่ตรงกัน -find_match_count_limit[many]=มากกว่า {{limit}} ที่ตรงกัน -find_match_count_limit[other]=มากกว่า {{limit}} ที่ตรงกัน -find_not_found=ไม่พบวลี - -# Predefined zoom values -page_scale_width=ความกว้างหน้า -page_scale_fit=พอดีหน้า -page_scale_auto=ซูมอัตโนมัติ -page_scale_actual=ขนาดจริง -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=เกิดข้อผิดพลาดขณะโหลด PDF -invalid_file_error=ไฟล์ PDF ไม่ถูกต้องหรือเสียหาย -missing_file_error=ไฟล์ PDF หายไป -unexpected_response_error=การตอบสนองของเซิร์ฟเวอร์ที่ไม่คาดคิด -rendering_error=เกิดข้อผิดพลาดขณะเรนเดอร์หน้า - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[คำอธิบายประกอบ {{type}}] -password_label=ป้อนรหัสผ่านเพื่อเปิดไฟล์ PDF นี้ -password_invalid=รหัสผ่านไม่ถูกต้อง โปรดลองอีกครั้ง -password_ok=ตกลง -password_cancel=ยกเลิก - -printing_not_supported=คำเตือน: เบราว์เซอร์นี้ไม่ได้สนับสนุนการพิมพ์อย่างเต็มที่ -printing_not_ready=คำเตือน: PDF ไม่ได้รับการโหลดอย่างเต็มที่สำหรับการพิมพ์ -web_fonts_disabled=แบบอักษรเว็บถูกปิดใช้งาน: ไม่สามารถใช้แบบอักษร PDF ฝังตัว - -# Editor -editor_free_text2.title=ข้อความ -editor_free_text2_label=ข้อความ -editor_ink2.title=รูปวาด -editor_ink2_label=รูปวาด - -editor_stamp.title=เพิ่มรูปภาพ -editor_stamp_label=เพิ่มรูปภาพ - -editor_stamp1.title=เพิ่มหรือแก้ไขภาพ -editor_stamp1_label=เพิ่มหรือแก้ไขภาพ - -free_text2_default_content=เริ่มพิมพ์… - -# Editor Parameters -editor_free_text_color=สี -editor_free_text_size=ขนาด -editor_ink_color=สี -editor_ink_thickness=ความหนา -editor_ink_opacity=ความทึบ - -editor_stamp_add_image_label=เพิ่มภาพ -editor_stamp_add_image.title=เพิ่มภาพ - -# Editor aria -editor_free_text2_aria_label=ตัวแก้ไขข้อความ -editor_ink2_aria_label=ตัวแก้ไขรูปวาด -editor_ink_canvas_aria_label=ภาพที่ผู้ใช้สร้างขึ้น diff --git a/static/pdf.js/locale/tl/viewer.ftl b/static/pdf.js/locale/tl/viewer.ftl new file mode 100644 index 00000000..faa0009b --- /dev/null +++ b/static/pdf.js/locale/tl/viewer.ftl @@ -0,0 +1,257 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Naunang Pahina +pdfjs-previous-button-label = Nakaraan +pdfjs-next-button = + .title = Sunod na Pahina +pdfjs-next-button-label = Sunod +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Pahina +# 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 = ng { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } ng { $pagesCount }) +pdfjs-zoom-out-button = + .title = Paliitin +pdfjs-zoom-out-button-label = Paliitin +pdfjs-zoom-in-button = + .title = Palakihin +pdfjs-zoom-in-button-label = Palakihin +pdfjs-zoom-select = + .title = Mag-zoom +pdfjs-presentation-mode-button = + .title = Lumipat sa Presentation Mode +pdfjs-presentation-mode-button-label = Presentation Mode +pdfjs-open-file-button = + .title = Magbukas ng file +pdfjs-open-file-button-label = Buksan +pdfjs-print-button = + .title = i-Print +pdfjs-print-button-label = i-Print + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Mga Kagamitan +pdfjs-tools-button-label = Mga Kagamitan +pdfjs-first-page-button = + .title = Pumunta sa Unang Pahina +pdfjs-first-page-button-label = Pumunta sa Unang Pahina +pdfjs-last-page-button = + .title = Pumunta sa Huling Pahina +pdfjs-last-page-button-label = Pumunta sa Huling Pahina +pdfjs-page-rotate-cw-button = + .title = Paikutin Pakanan +pdfjs-page-rotate-cw-button-label = Paikutin Pakanan +pdfjs-page-rotate-ccw-button = + .title = Paikutin Pakaliwa +pdfjs-page-rotate-ccw-button-label = Paikutin Pakaliwa +pdfjs-cursor-text-select-tool-button = + .title = I-enable ang Text Selection Tool +pdfjs-cursor-text-select-tool-button-label = Text Selection Tool +pdfjs-cursor-hand-tool-button = + .title = I-enable ang Hand Tool +pdfjs-cursor-hand-tool-button-label = Hand Tool +pdfjs-scroll-vertical-button = + .title = Gumamit ng Vertical Scrolling +pdfjs-scroll-vertical-button-label = Vertical Scrolling +pdfjs-scroll-horizontal-button = + .title = Gumamit ng Horizontal Scrolling +pdfjs-scroll-horizontal-button-label = Horizontal Scrolling +pdfjs-scroll-wrapped-button = + .title = Gumamit ng Wrapped Scrolling +pdfjs-scroll-wrapped-button-label = Wrapped Scrolling +pdfjs-spread-none-button = + .title = Huwag pagsamahin ang mga page spread +pdfjs-spread-none-button-label = No Spreads +pdfjs-spread-odd-button = + .title = Join page spreads starting with odd-numbered pages +pdfjs-spread-odd-button-label = Mga Odd Spread +pdfjs-spread-even-button = + .title = Pagsamahin ang mga page spread na nagsisimula sa mga even-numbered na pahina +pdfjs-spread-even-button-label = Mga Even Spread + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Mga Katangian ng Dokumento… +pdfjs-document-properties-button-label = Mga Katangian ng Dokumento… +pdfjs-document-properties-file-name = File name: +pdfjs-document-properties-file-size = File size: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Pamagat: +pdfjs-document-properties-author = May-akda: +pdfjs-document-properties-subject = Paksa: +pdfjs-document-properties-keywords = Mga keyword: +pdfjs-document-properties-creation-date = Petsa ng Pagkakagawa: +pdfjs-document-properties-modification-date = Petsa ng Pagkakabago: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Tagalikha: +pdfjs-document-properties-producer = PDF Producer: +pdfjs-document-properties-version = PDF Version: +pdfjs-document-properties-page-count = Bilang ng Pahina: +pdfjs-document-properties-page-size = Laki ng Pahina: +pdfjs-document-properties-page-size-unit-inches = pulgada +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = patayo +pdfjs-document-properties-page-size-orientation-landscape = pahiga +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Fast Web View: +pdfjs-document-properties-linearized-yes = Oo +pdfjs-document-properties-linearized-no = Hindi +pdfjs-document-properties-close-button = Isara + +## Print + +pdfjs-print-progress-message = Inihahanda ang dokumento para sa pag-print… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Kanselahin +pdfjs-printing-not-supported = Babala: Hindi pa ganap na suportado ang pag-print sa browser na ito. +pdfjs-printing-not-ready = Babala: Hindi ganap na nabuksan ang PDF para sa pag-print. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Ipakita/Itago ang Sidebar +pdfjs-toggle-sidebar-notification-button = + .title = Ipakita/Itago ang Sidebar (nagtataglay ang dokumento ng balangkas/mga attachment/mga layer) +pdfjs-toggle-sidebar-button-label = Ipakita/Itago ang Sidebar +pdfjs-document-outline-button = + .title = Ipakita ang Document Outline (mag-double-click para i-expand/collapse ang laman) +pdfjs-document-outline-button-label = Balangkas ng Dokumento +pdfjs-attachments-button = + .title = Ipakita ang mga Attachment +pdfjs-attachments-button-label = Mga attachment +pdfjs-layers-button = + .title = Ipakita ang mga Layer (mag-double click para mareset ang lahat ng layer sa orihinal na estado) +pdfjs-layers-button-label = Mga layer +pdfjs-thumbs-button = + .title = Ipakita ang mga Thumbnail +pdfjs-thumbs-button-label = Mga thumbnail +pdfjs-findbar-button = + .title = Hanapin sa Dokumento +pdfjs-findbar-button-label = Hanapin +pdfjs-additional-layers = Mga Karagdagang Layer + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Pahina { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Thumbnail ng Pahina { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Hanapin + .placeholder = Hanapin sa dokumento… +pdfjs-find-previous-button = + .title = Hanapin ang nakaraang pangyayari ng parirala +pdfjs-find-previous-button-label = Nakaraan +pdfjs-find-next-button = + .title = Hanapin ang susunod na pangyayari ng parirala +pdfjs-find-next-button-label = Susunod +pdfjs-find-highlight-checkbox = I-highlight lahat +pdfjs-find-match-case-checkbox-label = Itugma ang case +pdfjs-find-entire-word-checkbox-label = Buong salita +pdfjs-find-reached-top = Naabot na ang tuktok ng dokumento, ipinagpatuloy mula sa ilalim +pdfjs-find-reached-bottom = Naabot na ang dulo ng dokumento, ipinagpatuloy mula sa tuktok +pdfjs-find-not-found = Hindi natagpuan ang parirala + +## Predefined zoom values + +pdfjs-page-scale-width = Lapad ng Pahina +pdfjs-page-scale-fit = Pagkasyahin ang Pahina +pdfjs-page-scale-auto = Automatic Zoom +pdfjs-page-scale-actual = Totoong sukat +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = Nagkaproblema habang niloload ang PDF. +pdfjs-invalid-file-error = Di-wasto o sira ang PDF file. +pdfjs-missing-file-error = Nawawalang PDF file. +pdfjs-unexpected-response-error = Hindi inaasahang tugon ng server. +pdfjs-rendering-error = Nagkaproblema habang nirerender ang pahina. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Annotation] + +## Password + +pdfjs-password-label = Ipasok ang password upang buksan ang PDF file na ito. +pdfjs-password-invalid = Maling password. Subukan uli. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Kanselahin +pdfjs-web-fonts-disabled = Naka-disable ang mga Web font: hindi kayang gamitin ang mga naka-embed na PDF font. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/tl/viewer.properties b/static/pdf.js/locale/tl/viewer.properties deleted file mode 100644 index 13b7ba88..00000000 --- a/static/pdf.js/locale/tl/viewer.properties +++ /dev/null @@ -1,222 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Naunang Pahina -previous_label=Nakaraan -next.title=Sunod na Pahina -next_label=Sunod - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Pahina -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=ng {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} ng {{pagesCount}}) - -zoom_out.title=Paliitin -zoom_out_label=Paliitin -zoom_in.title=Palakihin -zoom_in_label=Palakihin -zoom.title=Mag-zoom -presentation_mode.title=Lumipat sa Presentation Mode -presentation_mode_label=Presentation Mode -open_file.title=Magbukas ng file -open_file_label=Buksan -print.title=i-Print -print_label=i-Print - -# Secondary toolbar and context menu -tools.title=Mga Kagamitan -tools_label=Mga Kagamitan -first_page.title=Pumunta sa Unang Pahina -first_page_label=Pumunta sa Unang Pahina -last_page.title=Pumunta sa Huling Pahina -last_page_label=Pumunta sa Huling Pahina -page_rotate_cw.title=Paikutin Pakanan -page_rotate_cw_label=Paikutin Pakanan -page_rotate_ccw.title=Paikutin Pakaliwa -page_rotate_ccw_label=Paikutin Pakaliwa - -cursor_text_select_tool.title=I-enable ang Text Selection Tool -cursor_text_select_tool_label=Text Selection Tool -cursor_hand_tool.title=I-enable ang Hand Tool -cursor_hand_tool_label=Hand Tool - -scroll_vertical.title=Gumamit ng Vertical Scrolling -scroll_vertical_label=Vertical Scrolling -scroll_horizontal.title=Gumamit ng Horizontal Scrolling -scroll_horizontal_label=Horizontal Scrolling -scroll_wrapped.title=Gumamit ng Wrapped Scrolling -scroll_wrapped_label=Wrapped Scrolling - -spread_none.title=Huwag pagsamahin ang mga page spread -spread_none_label=No Spreads -spread_odd.title=Join page spreads starting with odd-numbered pages -spread_odd_label=Mga Odd Spread -spread_even.title=Pagsamahin ang mga page spread na nagsisimula sa mga even-numbered na pahina -spread_even_label=Mga Even Spread - -# Document properties dialog box -document_properties.title=Mga Katangian ng Dokumento… -document_properties_label=Mga Katangian ng Dokumento… -document_properties_file_name=File name: -document_properties_file_size=File size: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Pamagat: -document_properties_author=May-akda: -document_properties_subject=Paksa: -document_properties_keywords=Mga keyword: -document_properties_creation_date=Petsa ng Pagkakagawa: -document_properties_modification_date=Petsa ng Pagkakabago: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Tagalikha: -document_properties_producer=PDF Producer: -document_properties_version=PDF Version: -document_properties_page_count=Bilang ng Pahina: -document_properties_page_size=Laki ng Pahina: -document_properties_page_size_unit_inches=pulgada -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=patayo -document_properties_page_size_orientation_landscape=pahiga -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Fast Web View: -document_properties_linearized_yes=Oo -document_properties_linearized_no=Hindi -document_properties_close=Isara - -print_progress_message=Inihahanda ang dokumento para sa pag-print… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Kanselahin - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Ipakita/Itago ang Sidebar -toggle_sidebar_notification2.title=Ipakita/Itago ang Sidebar (nagtataglay ang dokumento ng balangkas/mga attachment/mga layer) -toggle_sidebar_label=Ipakita/Itago ang Sidebar -document_outline.title=Ipakita ang Document Outline (mag-double-click para i-expand/collapse ang laman) -document_outline_label=Balangkas ng Dokumento -attachments.title=Ipakita ang mga Attachment -attachments_label=Mga attachment -layers.title=Ipakita ang mga Layer (mag-double click para mareset ang lahat ng layer sa orihinal na estado) -layers_label=Mga layer -thumbs.title=Ipakita ang mga Thumbnail -thumbs_label=Mga thumbnail -findbar.title=Hanapin sa Dokumento -findbar_label=Hanapin - -additional_layers=Mga Karagdagang Layer -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Pahina {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Thumbnail ng Pahina {{page}} - -# Find panel button title and messages -find_input.title=Hanapin -find_input.placeholder=Hanapin sa dokumento… -find_previous.title=Hanapin ang nakaraang pangyayari ng parirala -find_previous_label=Nakaraan -find_next.title=Hanapin ang susunod na pangyayari ng parirala -find_next_label=Susunod -find_highlight=I-highlight lahat -find_match_case_label=Itugma ang case -find_entire_word_label=Buong salita -find_reached_top=Naabot na ang tuktok ng dokumento, ipinagpatuloy mula sa ilalim -find_reached_bottom=Naabot na ang dulo ng dokumento, ipinagpatuloy mula sa tuktok -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} ng {{total}} tugma -find_match_count[two]={{current}} ng {{total}} tugma -find_match_count[few]={{current}} ng {{total}} tugma -find_match_count[many]={{current}} ng {{total}} tugma -find_match_count[other]={{current}} ng {{total}} tugma -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Higit sa {{limit}} tugma -find_match_count_limit[one]=Higit sa {{limit}} tugma -find_match_count_limit[two]=Higit sa {{limit}} tugma -find_match_count_limit[few]=Higit sa {{limit}} tugma -find_match_count_limit[many]=Higit sa {{limit}} tugma -find_match_count_limit[other]=Higit sa {{limit}} tugma -find_not_found=Hindi natagpuan ang parirala - -# Predefined zoom values -page_scale_width=Lapad ng Pahina -page_scale_fit=Pagkasyahin ang Pahina -page_scale_auto=Automatic Zoom -page_scale_actual=Totoong sukat -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=Nagkaproblema habang niloload ang PDF. -invalid_file_error=Di-wasto o sira ang PDF file. -missing_file_error=Nawawalang PDF file. -unexpected_response_error=Hindi inaasahang tugon ng server. - -rendering_error=Nagkaproblema habang nirerender ang pahina. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Annotation] -password_label=Ipasok ang password upang buksan ang PDF file na ito. -password_invalid=Maling password. Subukan uli. -password_ok=OK -password_cancel=Kanselahin - -printing_not_supported=Babala: Hindi pa ganap na suportado ang pag-print sa browser na ito. -printing_not_ready=Babala: Hindi ganap na nabuksan ang PDF para sa pag-print. -web_fonts_disabled=Naka-disable ang mga Web font: hindi kayang gamitin ang mga naka-embed na PDF font. - diff --git a/static/pdf.js/locale/tr/viewer.ftl b/static/pdf.js/locale/tr/viewer.ftl new file mode 100644 index 00000000..198022eb --- /dev/null +++ b/static/pdf.js/locale/tr/viewer.ftl @@ -0,0 +1,396 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Önceki sayfa +pdfjs-previous-button-label = Önceki +pdfjs-next-button = + .title = Sonraki sayfa +pdfjs-next-button-label = Sonraki +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Sayfa +# 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 = Uzaklaştır +pdfjs-zoom-out-button-label = Uzaklaştır +pdfjs-zoom-in-button = + .title = Yakınlaştır +pdfjs-zoom-in-button-label = Yakınlaştır +pdfjs-zoom-select = + .title = Yakınlaştırma +pdfjs-presentation-mode-button = + .title = Sunum moduna geç +pdfjs-presentation-mode-button-label = Sunum modu +pdfjs-open-file-button = + .title = Dosya aç +pdfjs-open-file-button-label = Aç +pdfjs-print-button = + .title = Yazdır +pdfjs-print-button-label = Yazdır +pdfjs-save-button = + .title = Kaydet +pdfjs-save-button-label = Kaydet +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = İndir +# 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 = İndir +pdfjs-bookmark-button = + .title = Geçerli sayfa (geçerli sayfanın adresini görüntüle) +pdfjs-bookmark-button-label = Geçerli sayfa + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Araçlar +pdfjs-tools-button-label = Araçlar +pdfjs-first-page-button = + .title = İlk sayfaya git +pdfjs-first-page-button-label = İlk sayfaya git +pdfjs-last-page-button = + .title = Son sayfaya git +pdfjs-last-page-button-label = Son sayfaya git +pdfjs-page-rotate-cw-button = + .title = Saat yönünde döndür +pdfjs-page-rotate-cw-button-label = Saat yönünde döndür +pdfjs-page-rotate-ccw-button = + .title = Saat yönünün tersine döndür +pdfjs-page-rotate-ccw-button-label = Saat yönünün tersine döndür +pdfjs-cursor-text-select-tool-button = + .title = Metin seçme aracını etkinleştir +pdfjs-cursor-text-select-tool-button-label = Metin seçme aracı +pdfjs-cursor-hand-tool-button = + .title = El aracını etkinleştir +pdfjs-cursor-hand-tool-button-label = El aracı +pdfjs-scroll-page-button = + .title = Sayfa kaydırmayı kullan +pdfjs-scroll-page-button-label = Sayfa kaydırma +pdfjs-scroll-vertical-button = + .title = Dikey kaydırmayı kullan +pdfjs-scroll-vertical-button-label = Dikey kaydırma +pdfjs-scroll-horizontal-button = + .title = Yatay kaydırmayı kullan +pdfjs-scroll-horizontal-button-label = Yatay kaydırma +pdfjs-scroll-wrapped-button = + .title = Yan yana kaydırmayı kullan +pdfjs-scroll-wrapped-button-label = Yan yana kaydırma +pdfjs-spread-none-button = + .title = Yan yana sayfaları birleştirme +pdfjs-spread-none-button-label = Birleştirme +pdfjs-spread-odd-button = + .title = Yan yana sayfaları tek numaralı sayfalardan başlayarak birleştir +pdfjs-spread-odd-button-label = Tek numaralı +pdfjs-spread-even-button = + .title = Yan yana sayfaları çift numaralı sayfalardan başlayarak birleştir +pdfjs-spread-even-button-label = Çift numaralı + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Belge özellikleri… +pdfjs-document-properties-button-label = Belge özellikleri… +pdfjs-document-properties-file-name = Dosya adı: +pdfjs-document-properties-file-size = Dosya boyutu: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bayt) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bayt) +pdfjs-document-properties-title = Başlık: +pdfjs-document-properties-author = Yazar: +pdfjs-document-properties-subject = Konu: +pdfjs-document-properties-keywords = Anahtar kelimeler: +pdfjs-document-properties-creation-date = Oluşturma tarihi: +pdfjs-document-properties-modification-date = Değiştirme tarihi: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date } { $time } +pdfjs-document-properties-creator = Oluşturan: +pdfjs-document-properties-producer = PDF üreticisi: +pdfjs-document-properties-version = PDF sürümü: +pdfjs-document-properties-page-count = Sayfa sayısı: +pdfjs-document-properties-page-size = Sayfa boyutu: +pdfjs-document-properties-page-size-unit-inches = inç +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = dikey +pdfjs-document-properties-page-size-orientation-landscape = yatay +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## 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 = Hızlı web görünümü: +pdfjs-document-properties-linearized-yes = Evet +pdfjs-document-properties-linearized-no = Hayır +pdfjs-document-properties-close-button = Kapat + +## Print + +pdfjs-print-progress-message = Belge yazdırılmaya hazırlanıyor… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = %{ $progress } +pdfjs-print-progress-close-button = İptal +pdfjs-printing-not-supported = Uyarı: Yazdırma bu tarayıcı tarafından tam olarak desteklenmemektedir. +pdfjs-printing-not-ready = Uyarı: PDF tamamen yüklenmedi ve yazdırmaya hazır değil. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Kenar çubuğunu aç/kapat +pdfjs-toggle-sidebar-notification-button = + .title = Kenar çubuğunu aç/kapat (Belge ana hat/ekler/katmanlar içeriyor) +pdfjs-toggle-sidebar-button-label = Kenar çubuğunu aç/kapat +pdfjs-document-outline-button = + .title = Belge ana hatlarını göster (Tüm öğeleri genişletmek/daraltmak için çift tıklayın) +pdfjs-document-outline-button-label = Belge ana hatları +pdfjs-attachments-button = + .title = Ekleri göster +pdfjs-attachments-button-label = Ekler +pdfjs-layers-button = + .title = Katmanları göster (tüm katmanları varsayılan duruma sıfırlamak için çift tıklayın) +pdfjs-layers-button-label = Katmanlar +pdfjs-thumbs-button = + .title = Küçük resimleri göster +pdfjs-thumbs-button-label = Küçük resimler +pdfjs-current-outline-item-button = + .title = Mevcut ana hat öğesini bul +pdfjs-current-outline-item-button-label = Mevcut ana hat öğesi +pdfjs-findbar-button = + .title = Belgede bul +pdfjs-findbar-button-label = Bul +pdfjs-additional-layers = Ek katmanlar + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Sayfa { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = { $page }. sayfanın küçük hâli + +## Find panel button title and messages + +pdfjs-find-input = + .title = Bul + .placeholder = Belgede bul… +pdfjs-find-previous-button = + .title = Önceki eşleşmeyi bul +pdfjs-find-previous-button-label = Önceki +pdfjs-find-next-button = + .title = Sonraki eşleşmeyi bul +pdfjs-find-next-button-label = Sonraki +pdfjs-find-highlight-checkbox = Tümünü vurgula +pdfjs-find-match-case-checkbox-label = Büyük-küçük harfe duyarlı +pdfjs-find-match-diacritics-checkbox-label = Fonetik işaretleri bul +pdfjs-find-entire-word-checkbox-label = Tam sözcükler +pdfjs-find-reached-top = Belgenin başına ulaşıldı, sonundan devam edildi +pdfjs-find-reached-bottom = Belgenin sonuna ulaşıldı, başından devam edildi +# 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] { $total } eşleşmeden { $current }. eşleşme + *[other] { $total } eşleşmeden { $current }. eşleşme + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] { $limit } eşleşmeden fazla + *[other] { $limit } eşleşmeden fazla + } +pdfjs-find-not-found = Eşleşme bulunamadı + +## Predefined zoom values + +pdfjs-page-scale-width = Sayfa genişliği +pdfjs-page-scale-fit = Sayfayı sığdır +pdfjs-page-scale-auto = Otomatik yakınlaştır +pdfjs-page-scale-actual = Gerçek boyut +# 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 = Sayfa { $page } + +## Loading indicator messages + +pdfjs-loading-error = PDF yüklenirken bir hata oluştu. +pdfjs-invalid-file-error = Geçersiz veya bozulmuş PDF dosyası. +pdfjs-missing-file-error = PDF dosyası eksik. +pdfjs-unexpected-response-error = Beklenmeyen sunucu yanıtı. +pdfjs-rendering-error = Sayfa yorumlanırken bir hata oluştu. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date } { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } işareti] + +## Password + +pdfjs-password-label = Bu PDF dosyasını açmak için parolasını yazın. +pdfjs-password-invalid = Geçersiz parola. Lütfen yeniden deneyin. +pdfjs-password-ok-button = Tamam +pdfjs-password-cancel-button = İptal +pdfjs-web-fonts-disabled = Web fontları devre dışı: Gömülü PDF fontları kullanılamıyor. + +## Editing + +pdfjs-editor-free-text-button = + .title = Metin +pdfjs-editor-free-text-button-label = Metin +pdfjs-editor-ink-button = + .title = Çiz +pdfjs-editor-ink-button-label = Çiz +pdfjs-editor-stamp-button = + .title = Resim ekle veya düzenle +pdfjs-editor-stamp-button-label = Resim ekle veya düzenle +pdfjs-editor-highlight-button = + .title = Vurgula +pdfjs-editor-highlight-button-label = Vurgula +pdfjs-highlight-floating-button = + .title = Vurgula +pdfjs-highlight-floating-button1 = + .title = Vurgula + .aria-label = Vurgula +pdfjs-highlight-floating-button-label = Vurgula + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Çizimi kaldır +pdfjs-editor-remove-freetext-button = + .title = Metni kaldır +pdfjs-editor-remove-stamp-button = + .title = Resmi kaldır +pdfjs-editor-remove-highlight-button = + .title = Vurgulamayı kaldır + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Renk +pdfjs-editor-free-text-size-input = Boyut +pdfjs-editor-ink-color-input = Renk +pdfjs-editor-ink-thickness-input = Kalınlık +pdfjs-editor-ink-opacity-input = Saydamlık +pdfjs-editor-stamp-add-image-button = + .title = Resim ekle +pdfjs-editor-stamp-add-image-button-label = Resim ekle +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Kalınlık +pdfjs-editor-free-highlight-thickness-title = + .title = Metin dışındaki öğeleri vurgularken kalınlığı değiştir +pdfjs-free-text = + .aria-label = Metin düzenleyicisi +pdfjs-free-text-default-content = Yazmaya başlayın… +pdfjs-ink = + .aria-label = Çizim düzenleyicisi +pdfjs-ink-canvas = + .aria-label = Kullanıcı tarafından oluşturulan resim + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Alternatif metin +pdfjs-editor-alt-text-edit-button-label = Alternatif metni düzenle +pdfjs-editor-alt-text-dialog-label = Bir seçenek seçin +pdfjs-editor-alt-text-dialog-description = Alternatif metin, insanlar resmi göremediğinde veya resim yüklenmediğinde işe yarar. +pdfjs-editor-alt-text-add-description-label = Açıklama ekle +pdfjs-editor-alt-text-add-description-description = Konuyu, ortamı veya eylemleri tanımlayan bir iki cümle yazmaya çalışın. +pdfjs-editor-alt-text-mark-decorative-label = Dekoratif olarak işaretle +pdfjs-editor-alt-text-mark-decorative-description = Kenarlıklar veya filigranlar gibi dekoratif resimler için kullanılır. +pdfjs-editor-alt-text-cancel-button = Vazgeç +pdfjs-editor-alt-text-save-button = Kaydet +pdfjs-editor-alt-text-decorative-tooltip = Dekoratif olarak işaretlendi +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Örneğin, “Genç bir adam yemek yemek için masaya oturuyor” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Sol üst köşe — yeniden boyutlandır +pdfjs-editor-resizer-label-top-middle = Üst orta — yeniden boyutlandır +pdfjs-editor-resizer-label-top-right = Sağ üst köşe — yeniden boyutlandır +pdfjs-editor-resizer-label-middle-right = Orta sağ — yeniden boyutlandır +pdfjs-editor-resizer-label-bottom-right = Sağ alt köşe — yeniden boyutlandır +pdfjs-editor-resizer-label-bottom-middle = Alt orta — yeniden boyutlandır +pdfjs-editor-resizer-label-bottom-left = Sol alt köşe — yeniden boyutlandır +pdfjs-editor-resizer-label-middle-left = Orta sol — yeniden boyutlandır + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Vurgu rengi +pdfjs-editor-colorpicker-button = + .title = Rengi değiştir +pdfjs-editor-colorpicker-dropdown = + .aria-label = Renk seçenekleri +pdfjs-editor-colorpicker-yellow = + .title = Sarı +pdfjs-editor-colorpicker-green = + .title = Yeşil +pdfjs-editor-colorpicker-blue = + .title = Mavi +pdfjs-editor-colorpicker-pink = + .title = Pembe +pdfjs-editor-colorpicker-red = + .title = Kırmızı + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + +pdfjs-editor-highlight-show-all-button-label = Tümünü göster +pdfjs-editor-highlight-show-all-button = + .title = Tümünü göster diff --git a/static/pdf.js/locale/tr/viewer.properties b/static/pdf.js/locale/tr/viewer.properties deleted file mode 100644 index eaa4eaba..00000000 --- a/static/pdf.js/locale/tr/viewer.properties +++ /dev/null @@ -1,283 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Önceki sayfa -previous_label=Önceki -next.title=Sonraki sayfa -next_label=Sonraki - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Sayfa -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=/ {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} / {{pagesCount}}) - -zoom_out.title=Uzaklaştır -zoom_out_label=Uzaklaştır -zoom_in.title=Yaklaştır -zoom_in_label=Yaklaştır -zoom.title=Yakınlaştırma -presentation_mode.title=Sunum moduna geç -presentation_mode_label=Sunum modu -open_file.title=Dosya aç -open_file_label=Aç -print.title=Yazdır -print_label=Yazdır -save.title=Kaydet -save_label=Kaydet -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=İndir -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=İndir -bookmark1.title=Geçerli sayfa (geçerli sayfanın adresini görüntüle) -bookmark1_label=Geçerli sayfa -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Uygulamada aç -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Uygulamada aç - -# Secondary toolbar and context menu -tools.title=Araçlar -tools_label=Araçlar -first_page.title=İlk sayfaya git -first_page_label=İlk sayfaya git -last_page.title=Son sayfaya git -last_page_label=Son sayfaya git -page_rotate_cw.title=Saat yönünde döndür -page_rotate_cw_label=Saat yönünde döndür -page_rotate_ccw.title=Saat yönünün tersine döndür -page_rotate_ccw_label=Saat yönünün tersine döndür - -cursor_text_select_tool.title=Metin seçme aracını etkinleştir -cursor_text_select_tool_label=Metin seçme aracı -cursor_hand_tool.title=El aracını etkinleştir -cursor_hand_tool_label=El aracı - -scroll_page.title=Sayfa kaydırmayı kullan -scroll_page_label=Sayfa kaydırma -scroll_vertical.title=Dikey kaydırma kullan -scroll_vertical_label=Dikey kaydırma -scroll_horizontal.title=Yatay kaydırma kullan -scroll_horizontal_label=Yatay kaydırma -scroll_wrapped.title=Yan yana kaydırmayı kullan -scroll_wrapped_label=Yan yana kaydırma - -spread_none.title=Yan yana sayfaları birleştirme -spread_none_label=Birleştirme -spread_odd.title=Yan yana sayfaları tek numaralı sayfalardan başlayarak birleştir -spread_odd_label=Tek numaralı -spread_even.title=Yan yana sayfaları çift numaralı sayfalardan başlayarak birleştir -spread_even_label=Çift numaralı - -# Document properties dialog box -document_properties.title=Belge özellikleri… -document_properties_label=Belge özellikleri… -document_properties_file_name=Dosya adı: -document_properties_file_size=Dosya boyutu: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bayt) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bayt) -document_properties_title=Başlık: -document_properties_author=Yazar: -document_properties_subject=Konu: -document_properties_keywords=Anahtar kelimeler: -document_properties_creation_date=Oluturma tarihi: -document_properties_modification_date=Değiştirme tarihi: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}} {{time}} -document_properties_creator=Oluşturan: -document_properties_producer=PDF üreticisi: -document_properties_version=PDF sürümü: -document_properties_page_count=Sayfa sayısı: -document_properties_page_size=Sayfa boyutu: -document_properties_page_size_unit_inches=inç -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=dikey -document_properties_page_size_orientation_landscape=yatay -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Hızlı web görünümü: -document_properties_linearized_yes=Evet -document_properties_linearized_no=Hayır -document_properties_close=Kapat - -print_progress_message=Belge yazdırılmaya hazırlanıyor… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent=%{{progress}} -print_progress_close=İptal - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Kenar çubuğunu aç/kapat -toggle_sidebar_notification2.title=Kenar çubuğunu aç/kapat (Belge ana hat/ekler/katmanlar içeriyor) -toggle_sidebar_label=Kenar çubuğunu aç/kapat -document_outline.title=Belge ana hatlarını göster (Tüm öğeleri genişletmek/daraltmak için çift tıklayın) -document_outline_label=Belge ana hatları -attachments.title=Ekleri göster -attachments_label=Ekler -layers.title=Katmanları göster (tüm katmanları varsayılan duruma sıfırlamak için çift tıklayın) -layers_label=Katmanlar -thumbs.title=Küçük resimleri göster -thumbs_label=Küçük resimler -current_outline_item.title=Mevcut ana hat öğesini bul -current_outline_item_label=Mevcut ana hat öğesi -findbar.title=Belgede bul -findbar_label=Bul - -additional_layers=Ek katmanlar -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Sayfa {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Sayfa {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas={{page}}. sayfanın küçük hâli - -# Find panel button title and messages -find_input.title=Bul -find_input.placeholder=Belgede bul… -find_previous.title=Önceki eşleşmeyi bul -find_previous_label=Önceki -find_next.title=Sonraki eşleşmeyi bul -find_next_label=Sonraki -find_highlight=Tümünü vurgula -find_match_case_label=Büyük-küçük harfe duyarlı -find_match_diacritics_label=Fonetik işaretleri bul -find_entire_word_label=Tam sözcükler -find_reached_top=Belgenin başına ulaşıldı, sonundan devam edildi -find_reached_bottom=Belgenin sonuna ulaşıldı, başından devam edildi -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{total}} eşleşmeden {{current}}. eşleşme -find_match_count[two]={{total}} eşleşmeden {{current}}. eşleşme -find_match_count[few]={{total}} eşleşmeden {{current}}. eşleşme -find_match_count[many]={{total}} eşleşmeden {{current}}. eşleşme -find_match_count[other]={{total}} eşleşmeden {{current}}. eşleşme -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]={{limit}} eşleşmeden fazla -find_match_count_limit[one]={{limit}} eşleşmeden fazla -find_match_count_limit[two]={{limit}} eşleşmeden fazla -find_match_count_limit[few]={{limit}} eşleşmeden fazla -find_match_count_limit[many]={{limit}} eşleşmeden fazla -find_match_count_limit[other]={{limit}} eşleşmeden fazla -find_not_found=Eşleşme bulunamadı - -# Predefined zoom values -page_scale_width=Sayfa genişliği -page_scale_fit=Sayfayı sığdır -page_scale_auto=Otomatik yakınlaştır -page_scale_actual=Gerçek boyut -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent=%{{scale}} - -# Loading indicator messages -loading_error=PDF yüklenirken bir hata oluştu. -invalid_file_error=Geçersiz veya bozulmuş PDF dosyası. -missing_file_error=PDF dosyası eksik. -unexpected_response_error=Beklenmeyen sunucu yanıtı. -rendering_error=Sayfa yorumlanırken bir hata oluştu. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} işareti] -password_label=Bu PDF dosyasını açmak için parolasını yazın. -password_invalid=Geçersiz parola. Lütfen yeniden deneyin. -password_ok=Tamam -password_cancel=İptal - -printing_not_supported=Uyarı: Yazdırma bu tarayıcı tarafından tam olarak desteklenmemektedir. -printing_not_ready=Uyarı: PDF tamamen yüklenmedi ve yazdırmaya hazır değil. -web_fonts_disabled=Web fontları devre dışı: Gömülü PDF fontları kullanılamıyor. - -# Editor -editor_free_text2.title=Metin -editor_free_text2_label=Metin -editor_ink2.title=Çiz -editor_ink2_label=Çiz - -editor_stamp1.title=Resim ekle veya düzenle -editor_stamp1_label=Resim ekle veya düzenle - -free_text2_default_content=Yazmaya başlayın… - -# Editor Parameters -editor_free_text_color=Renk -editor_free_text_size=Boyut -editor_ink_color=Renk -editor_ink_thickness=Kalınlık -editor_ink_opacity=Saydamlık - -editor_stamp_add_image_label=Resim ekle -editor_stamp_add_image.title=Resim ekle - -# Editor aria -editor_free_text2_aria_label=Metin düzenleyicisi -editor_ink2_aria_label=Çizim düzenleyicisi -editor_ink_canvas_aria_label=Kullanıcı tarafından oluşturulan resim - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Alternatif metin -editor_alt_text_edit_button_label=Alternatif metni düzenle -editor_alt_text_dialog_label=Bir seçenek seçin -editor_alt_text_dialog_description=Alternatif metin, insanlar görseli göremediğinde veya görsel yüklenmediğinde işe yarar. -editor_alt_text_add_description_label=Açıklama ekle -editor_alt_text_mark_decorative_label=Dekoratif olarak işaretle -editor_alt_text_mark_decorative_description=Kenarlıklar veya filigranlar gibi dekoratif görüntüler için kullanılır. -editor_alt_text_cancel_button=Vazgeç -editor_alt_text_save_button=Kaydet -editor_alt_text_decorative_tooltip=Dekoratif olarak işaretlendi -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=Örneğin, “Genç bir adam yemek yemek için masaya oturuyor” diff --git a/static/pdf.js/locale/trs/viewer.ftl b/static/pdf.js/locale/trs/viewer.ftl new file mode 100644 index 00000000..aba3c72a --- /dev/null +++ b/static/pdf.js/locale/trs/viewer.ftl @@ -0,0 +1,197 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Pajinâ gunâj rukùu +pdfjs-previous-button-label = Sa gachin +pdfjs-next-button = + .title = Pajinâ 'na' ñaan +pdfjs-next-button-label = Ne' ñaan +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Ñanj +# 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 = si'iaj { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount }) +pdfjs-zoom-out-button = + .title = Nagi'iaj li' +pdfjs-zoom-out-button-label = Nagi'iaj li' +pdfjs-zoom-in-button = + .title = Nagi'iaj niko' +pdfjs-zoom-in-button-label = Nagi'iaj niko' +pdfjs-zoom-select = + .title = dàj nìko ma'an +pdfjs-presentation-mode-button = + .title = Naduno' daj ga ma +pdfjs-presentation-mode-button-label = Daj gà ma +pdfjs-open-file-button = + .title = Na'nïn' chrû ñanj +pdfjs-open-file-button-label = Na'nïn +pdfjs-print-button = + .title = Nari' ña du'ua +pdfjs-print-button-label = Nari' ñadu'ua + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Rasun +pdfjs-tools-button-label = Nej rasùun +pdfjs-first-page-button = + .title = gun' riña pajina asiniin +pdfjs-first-page-button-label = Gun' riña pajina asiniin +pdfjs-last-page-button = + .title = Gun' riña pajina rukù ni'in +pdfjs-last-page-button-label = Gun' riña pajina rukù ni'inj +pdfjs-page-rotate-cw-button = + .title = Tanikaj ne' huat +pdfjs-page-rotate-cw-button-label = Tanikaj ne' huat +pdfjs-page-rotate-ccw-button = + .title = Tanikaj ne' chînt' +pdfjs-page-rotate-ccw-button-label = Tanikaj ne' chint +pdfjs-cursor-text-select-tool-button = + .title = Dugi'iaj sun' sa ganahui texto +pdfjs-cursor-text-select-tool-button-label = Nej rasun arajsun' da' nahui' texto +pdfjs-cursor-hand-tool-button = + .title = Nachrun' nej rasun +pdfjs-cursor-hand-tool-button-label = Sa rajsun ro'o' +pdfjs-scroll-vertical-button = + .title = Garasun' dukuán runūu +pdfjs-scroll-vertical-button-label = Dukuán runūu +pdfjs-scroll-horizontal-button = + .title = Garasun' dukuán nikin' nahui +pdfjs-scroll-horizontal-button-label = Dukuán nikin' nahui +pdfjs-scroll-wrapped-button = + .title = Garasun' sa nachree +pdfjs-scroll-wrapped-button-label = Sa nachree +pdfjs-spread-none-button = + .title = Si nagi'iaj nugun'un' nej pagina hua ninin +pdfjs-spread-none-button-label = Ni'io daj hua pagina +pdfjs-spread-odd-button = + .title = Nagi'iaj nugua'ant nej pajina +pdfjs-spread-odd-button-label = Ni'io' daj hua libro gurin +pdfjs-spread-even-button = + .title = Nakāj dugui' ngà nej pajinâ ayi'ì ngà da' hùi hùi +pdfjs-spread-even-button-label = Nahuin nìko nej + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Nej sa nikāj ñanj… +pdfjs-document-properties-button-label = Nej sa nikāj ñanj… +pdfjs-document-properties-file-name = Si yugui archîbo: +pdfjs-document-properties-file-size = Dàj yachìj archîbo: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Si yugui: +pdfjs-document-properties-author = Sí girirà: +pdfjs-document-properties-subject = Dugui': +pdfjs-document-properties-keywords = Nej nuguan' huìi: +pdfjs-document-properties-creation-date = Gui gurugui' man: +pdfjs-document-properties-modification-date = Nuguan' nahuin nakà: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Guiri ro' +pdfjs-document-properties-producer = Sa ri PDF: +pdfjs-document-properties-version = PDF Version: +pdfjs-document-properties-page-count = Si Guendâ Pâjina: +pdfjs-document-properties-page-size = Dàj yachìj pâjina: +pdfjs-document-properties-page-size-unit-inches = riña +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = nadu'ua +pdfjs-document-properties-page-size-orientation-landscape = dàj huaj +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 = Da'ngà'a +pdfjs-document-properties-page-size-name-legal = Nuguan' a'nï'ïn + +## 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 = Nanèt chre ni'iajt riña Web: +pdfjs-document-properties-linearized-yes = Ga'ue +pdfjs-document-properties-linearized-no = Si ga'ue +pdfjs-document-properties-close-button = Narán + +## Print + +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Duyichin' + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Nadunā barrâ nù yi'nïn +pdfjs-toggle-sidebar-button-label = Nadunā barrâ nù yi'nïn +pdfjs-findbar-button-label = Narì' + +## Thumbnails panel item (tooltip and alt text for images) + + +## Find panel button title and messages + +pdfjs-find-previous-button-label = Sa gachîn +pdfjs-find-next-button-label = Ne' ñaan +pdfjs-find-highlight-checkbox = Daran' sa ña'an +pdfjs-find-match-case-checkbox-label = Match case +pdfjs-find-not-found = Nu narì'ij nugua'anj + +## Predefined zoom values + +pdfjs-page-scale-actual = Dàj yàchi akuan' nín +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + + +## Annotations + + +## Password + +pdfjs-password-ok-button = Ga'ue +pdfjs-password-cancel-button = Duyichin' + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/trs/viewer.properties b/static/pdf.js/locale/trs/viewer.properties deleted file mode 100644 index 1a56e5b5..00000000 --- a/static/pdf.js/locale/trs/viewer.properties +++ /dev/null @@ -1,184 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Pajinâ gunâj rukùu -previous_label=Sa gachin -next.title=Pajinâ 'na' ñaan -next_label=Ne' ñaan - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Ñanj -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=si'iaj {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} of {{pagesCount}}) - -zoom_out.title=Nagi'iaj li' -zoom_out_label=Nagi'iaj li' -zoom_in.title=Nagi'iaj niko' -zoom_in_label=Nagi'iaj niko' -zoom.title=dàj nìko ma'an -presentation_mode.title=Naduno' daj ga ma -presentation_mode_label=Daj gà ma -open_file.title=Na'nïn' chrû ñanj -open_file_label=Na'nïn -print.title=Nari' ña du'ua -print_label=Nari' ñadu'ua - -# Secondary toolbar and context menu -tools.title=Rasun -tools_label=Nej rasùun -first_page.title=gun' riña pajina asiniin -first_page_label=Gun' riña pajina asiniin -last_page.title=Gun' riña pajina rukù ni'in -last_page_label=Gun' riña pajina rukù ni'inj -page_rotate_cw.title=Tanikaj ne' huat -page_rotate_cw_label=Tanikaj ne' huat -page_rotate_ccw.title=Tanikaj ne' chînt' -page_rotate_ccw_label=Tanikaj ne' chint - -cursor_text_select_tool.title=Dugi'iaj sun' sa ganahui texto -cursor_text_select_tool_label=Nej rasun arajsun' da' nahui' texto -cursor_hand_tool.title=Nachrun' nej rasun -cursor_hand_tool_label=Sa rajsun ro'o' - -scroll_vertical.title=Garasun' dukuán runūu -scroll_vertical_label=Dukuán runūu -scroll_horizontal.title=Garasun' dukuán nikin' nahui -scroll_horizontal_label=Dukuán nikin' nahui -scroll_wrapped.title=Garasun' sa nachree -scroll_wrapped_label=Sa nachree - -spread_none.title=Si nagi'iaj nugun'un' nej pagina hua ninin -spread_none_label=Ni'io daj hua pagina -spread_odd.title=Nagi'iaj nugua'ant nej pajina -spread_odd_label=Ni'io' daj hua libro gurin -spread_even.title=Nakāj dugui' ngà nej pajinâ ayi'ì ngà da' hùi hùi -spread_even_label=Nahuin nìko nej - -# Document properties dialog box -document_properties.title=Nej sa nikāj ñanj… -document_properties_label=Nej sa nikāj ñanj… -document_properties_file_name=Si yugui archîbo: -document_properties_file_size=Dàj yachìj archîbo: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Si yugui: -document_properties_author=Sí girirà: -document_properties_subject=Dugui': -document_properties_keywords=Nej nuguan' huìi: -document_properties_creation_date=Gui gurugui' man: -document_properties_modification_date=Nuguan' nahuin nakà: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Guiri ro' -document_properties_producer=Sa ri PDF: -document_properties_version=PDF Version: -document_properties_page_count=Si Guendâ Pâjina: -document_properties_page_size=Dàj yachìj pâjina: -document_properties_page_size_unit_inches=riña -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=nadu'ua -document_properties_page_size_orientation_landscape=dàj huaj -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Da'ngà'a -document_properties_page_size_name_legal=Nuguan' a'nï'ïn -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Nanèt chre ni'iajt riña Web: -document_properties_linearized_yes=Ga'ue -document_properties_linearized_no=Si ga'ue -document_properties_close=Narán - -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Duyichin' - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Nadunā barrâ nù yi'nïn -toggle_sidebar_label=Nadunā barrâ nù yi'nïn -findbar_label=Narì' - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. - -# Find panel button title and messages -find_input.title=Narì' -find_previous_label=Sa gachîn -find_next_label=Ne' ñaan -find_highlight=Daran' sa ña'an -find_match_case_label=Match case -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} si'iaj {{total}} guña gè huaj -find_match_count[two]={{current}} si'iaj {{total}} guña gè huaj -find_match_count[few]={{current}} si'iaj {{total}} guña gè huaj -find_match_count[many]={{current}} si'iaj {{total}} guña gè huaj -find_match_count[other]={{current}} of {{total}} matches -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Doj ngà da' {{limit}} nej sa nari' dugui'i -find_match_count_limit[one]=Doj ngà da' {{limit}} sa nari' dugui'i -find_match_count_limit[two]=Doj ngà da' {{limit}} nej sa nari' dugui'i -find_match_count_limit[few]=Doj ngà da' {{limit}} nej sa nari' dugui'i -find_match_count_limit[many]=Doj ngà da' {{limit}} nej sa nari' dugui'i -find_match_count_limit[other]=Doj ngà da' {{limit}} nej sa nari' dugui'i -find_not_found=Nu narì'ij nugua'anj - -# Predefined zoom values -page_scale_actual=Dàj yàchi akuan' nín -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -password_ok=Ga'ue -password_cancel=Duyichin' - diff --git a/static/pdf.js/locale/uk/viewer.ftl b/static/pdf.js/locale/uk/viewer.ftl new file mode 100644 index 00000000..d663e675 --- /dev/null +++ b/static/pdf.js/locale/uk/viewer.ftl @@ -0,0 +1,398 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = Перейти в режим презентації +pdfjs-presentation-mode-button-label = Режим презентації +pdfjs-open-file-button = + .title = Відкрити файл +pdfjs-open-file-button-label = Відкрити +pdfjs-print-button = + .title = Друк +pdfjs-print-button-label = Друк +pdfjs-save-button = + .title = Зберегти +pdfjs-save-button-label = Зберегти +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Завантажити +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = Завантажити +pdfjs-bookmark-button = + .title = Поточна сторінка (перегляд URL-адреси з поточної сторінки) +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 = Масштабоване прокручування +pdfjs-spread-none-button = + .title = Не використовувати розгорнуті сторінки +pdfjs-spread-none-button-label = Без розгорнутих сторінок +pdfjs-spread-odd-button = + .title = Розгорнуті сторінки починаються з непарних номерів +pdfjs-spread-odd-button-label = Непарні сторінки зліва +pdfjs-spread-even-button = + .title = Розгорнуті сторінки починаються з парних номерів +pdfjs-spread-even-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 = Розмір файлу: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } байтів) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } МБ ({ $size_b } байтів) +pdfjs-document-properties-title = Заголовок: +pdfjs-document-properties-author = Автор: +pdfjs-document-properties-subject = Тема: +pdfjs-document-properties-keywords = Ключові слова: +pdfjs-document-properties-creation-date = Дата створення: +pdfjs-document-properties-modification-date = Дата зміни: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = книжкова +pdfjs-document-properties-page-size-orientation-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 = Letter +pdfjs-document-properties-page-size-name-legal = Legal + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation }) + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = Швидкий перегляд в Інтернеті: +pdfjs-document-properties-linearized-yes = Так +pdfjs-document-properties-linearized-no = Ні +pdfjs-document-properties-close-button = Закрити + +## Print + +pdfjs-print-progress-message = Підготовка документу до друку… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Скасувати +pdfjs-printing-not-supported = Попередження: Цей браузер не повністю підтримує друк. +pdfjs-printing-not-ready = Попередження: PDF не повністю завантажений для друку. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Бічна панель +pdfjs-toggle-sidebar-notification-button = + .title = Перемкнути бічну панель (документ містить ескіз/вкладення/шари) +pdfjs-toggle-sidebar-button-label = Перемкнути бічну панель +pdfjs-document-outline-button = + .title = Показати схему документу (подвійний клік для розгортання/згортання елементів) +pdfjs-document-outline-button-label = Схема документа +pdfjs-attachments-button = + .title = Показати вкладення +pdfjs-attachments-button-label = Вкладення +pdfjs-layers-button = + .title = Показати шари (двічі клацніть, щоб скинути всі шари до типового стану) +pdfjs-layers-button-label = Шари +pdfjs-thumbs-button = + .title = Показати мініатюри +pdfjs-thumbs-button-label = Мініатюри +pdfjs-current-outline-item-button = + .title = Знайти поточний елемент змісту +pdfjs-current-outline-item-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 } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Ескіз сторінки { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Знайти + .placeholder = Знайти в документі… +pdfjs-find-previous-button = + .title = Знайти попереднє входження фрази +pdfjs-find-previous-button-label = Попереднє +pdfjs-find-next-button = + .title = Знайти наступне входження фрази +pdfjs-find-next-button-label = Наступне +pdfjs-find-highlight-checkbox = Підсвітити все +pdfjs-find-match-case-checkbox-label = З урахуванням регістру +pdfjs-find-match-diacritics-checkbox-label = Відповідність діакритичних знаків +pdfjs-find-entire-word-checkbox-label = Цілі слова +pdfjs-find-reached-top = Досягнуто початку документу, продовжено з кінця +pdfjs-find-reached-bottom = Досягнуто кінця документу, продовжено з початку +# 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 } збіг з { $total } + [few] { $current } збіги з { $total } + *[many] { $current } збігів з { $total } + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Понад { $limit } збіг + [few] Понад { $limit } збіги + *[many] Понад { $limit } збігів + } +pdfjs-find-not-found = Фразу не знайдено + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = Під час завантаження PDF сталася помилка. +pdfjs-invalid-file-error = Недійсний або пошкоджений PDF-файл. +pdfjs-missing-file-error = Відсутній PDF-файл. +pdfjs-unexpected-response-error = Неочікувана відповідь сервера. +pdfjs-rendering-error = Під час виведення сторінки сталася помилка. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type }-анотація] + +## Password + +pdfjs-password-label = Введіть пароль для відкриття цього PDF-файлу. +pdfjs-password-invalid = Неправильний пароль. Спробуйте ще раз. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Скасувати +pdfjs-web-fonts-disabled = Веб-шрифти вимкнено: неможливо використати вбудовані у PDF шрифти. + +## Editing + +pdfjs-editor-free-text-button = + .title = Текст +pdfjs-editor-free-text-button-label = Текст +pdfjs-editor-ink-button = + .title = Малювати +pdfjs-editor-ink-button-label = Малювати +pdfjs-editor-stamp-button = + .title = Додати чи редагувати зображення +pdfjs-editor-stamp-button-label = Додати чи редагувати зображення +pdfjs-editor-highlight-button = + .title = Підсвітити +pdfjs-editor-highlight-button-label = Підсвітити +pdfjs-highlight-floating-button = + .title = Підсвітити +pdfjs-highlight-floating-button1 = + .title = Підсвітити + .aria-label = Підсвітити +pdfjs-highlight-floating-button-label = Підсвітити + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Вилучити малюнок +pdfjs-editor-remove-freetext-button = + .title = Вилучити текст +pdfjs-editor-remove-stamp-button = + .title = Вилучити зображення +pdfjs-editor-remove-highlight-button = + .title = Вилучити підсвічування + +## + +# 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 = Прозорість +pdfjs-editor-stamp-add-image-button = + .title = Додати зображення +pdfjs-editor-stamp-add-image-button-label = Додати зображення +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Товщина +pdfjs-editor-free-highlight-thickness-title = + .title = Змінюйте товщину під час підсвічування елементів, крім тексту +pdfjs-free-text = + .aria-label = Текстовий редактор +pdfjs-free-text-default-content = Почніть вводити… +pdfjs-ink = + .aria-label = Графічний редактор +pdfjs-ink-canvas = + .aria-label = Зображення, створене користувачем + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Альтернативний текст +pdfjs-editor-alt-text-edit-button-label = Змінити альтернативний текст +pdfjs-editor-alt-text-dialog-label = Вибрати варіант +pdfjs-editor-alt-text-dialog-description = Альтернативний текст допомагає, коли зображення не видно або коли воно не завантажується. +pdfjs-editor-alt-text-add-description-label = Додати опис +pdfjs-editor-alt-text-add-description-description = Намагайтеся створити 1-2 речення, які описують тему, обставини або дії. +pdfjs-editor-alt-text-mark-decorative-label = Позначити декоративним +pdfjs-editor-alt-text-mark-decorative-description = Використовується для декоративних зображень, наприклад рамок або водяних знаків. +pdfjs-editor-alt-text-cancel-button = Скасувати +pdfjs-editor-alt-text-save-button = Зберегти +pdfjs-editor-alt-text-decorative-tooltip = Позначено декоративним +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Наприклад, “Молодий чоловік сідає за стіл їсти” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Верхній лівий кут – зміна розміру +pdfjs-editor-resizer-label-top-middle = Вгорі посередині – зміна розміру +pdfjs-editor-resizer-label-top-right = Верхній правий кут – зміна розміру +pdfjs-editor-resizer-label-middle-right = Праворуч посередині – зміна розміру +pdfjs-editor-resizer-label-bottom-right = Нижній правий кут – зміна розміру +pdfjs-editor-resizer-label-bottom-middle = Внизу посередині – зміна розміру +pdfjs-editor-resizer-label-bottom-left = Нижній лівий кут – зміна розміру +pdfjs-editor-resizer-label-middle-left = Ліворуч посередині – зміна розміру + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Колір підсвічування +pdfjs-editor-colorpicker-button = + .title = Змінити колір +pdfjs-editor-colorpicker-dropdown = + .aria-label = Вибір кольору +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 = Показати все diff --git a/static/pdf.js/locale/uk/viewer.properties b/static/pdf.js/locale/uk/viewer.properties deleted file mode 100644 index 64864e05..00000000 --- a/static/pdf.js/locale/uk/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Попередня сторінка -previous_label=Попередня -next.title=Наступна сторінка -next_label=Наступна - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Сторінка -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=із {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} із {{pagesCount}}) - -zoom_out.title=Зменшити -zoom_out_label=Зменшити -zoom_in.title=Збільшити -zoom_in_label=Збільшити -zoom.title=Масштаб -presentation_mode.title=Перейти в режим презентації -presentation_mode_label=Режим презентації -open_file.title=Відкрити файл -open_file_label=Відкрити -print.title=Друк -print_label=Друк -save.title=Зберегти -save_label=Зберегти -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Завантажити -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Завантажити -bookmark1.title=Поточна сторінка (перегляд URL-адреси з поточної сторінки) -bookmark1_label=Поточна сторінка -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Відкрити у програмі -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Відкрити у програмі - -# Secondary toolbar and context menu -tools.title=Інструменти -tools_label=Інструменти -first_page.title=На першу сторінку -first_page_label=На першу сторінку -last_page.title=На останню сторінку -last_page_label=На останню сторінку -page_rotate_cw.title=Повернути за годинниковою стрілкою -page_rotate_cw_label=Повернути за годинниковою стрілкою -page_rotate_ccw.title=Повернути проти годинникової стрілки -page_rotate_ccw_label=Повернути проти годинникової стрілки - -cursor_text_select_tool.title=Увімкнути інструмент вибору тексту -cursor_text_select_tool_label=Інструмент вибору тексту -cursor_hand_tool.title=Увімкнути інструмент "Рука" -cursor_hand_tool_label=Інструмент "Рука" - -scroll_page.title=Використовувати прокручування сторінки -scroll_page_label=Прокручування сторінки -scroll_vertical.title=Використовувати вертикальне прокручування -scroll_vertical_label=Вертикальне прокручування -scroll_horizontal.title=Використовувати горизонтальне прокручування -scroll_horizontal_label=Горизонтальне прокручування -scroll_wrapped.title=Використовувати масштабоване прокручування -scroll_wrapped_label=Масштабоване прокручування - -spread_none.title=Не використовувати розгорнуті сторінки -spread_none_label=Без розгорнутих сторінок -spread_odd.title=Розгорнуті сторінки починаються з непарних номерів -spread_odd_label=Непарні сторінки зліва -spread_even.title=Розгорнуті сторінки починаються з парних номерів -spread_even_label=Парні сторінки зліва - -# Document properties dialog box -document_properties.title=Властивості документа… -document_properties_label=Властивості документа… -document_properties_file_name=Назва файла: -document_properties_file_size=Розмір файла: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} КБ ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} МБ ({{size_b}} bytes) -document_properties_title=Заголовок: -document_properties_author=Автор: -document_properties_subject=Тема: -document_properties_keywords=Ключові слова: -document_properties_creation_date=Дата створення: -document_properties_modification_date=Дата зміни: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Створено: -document_properties_producer=Виробник PDF: -document_properties_version=Версія PDF: -document_properties_page_count=Кількість сторінок: -document_properties_page_size=Розмір сторінки: -document_properties_page_size_unit_inches=дюймів -document_properties_page_size_unit_millimeters=мм -document_properties_page_size_orientation_portrait=книжкова -document_properties_page_size_orientation_landscape=альбомна -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Швидкий перегляд в Інтернеті: -document_properties_linearized_yes=Так -document_properties_linearized_no=Ні -document_properties_close=Закрити - -print_progress_message=Підготовка документу до друку… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Скасувати - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Бічна панель -toggle_sidebar_notification2.title=Перемкнути бічну панель (документ містить ескіз/вкладення/шари) -toggle_sidebar_label=Перемкнути бічну панель -document_outline.title=Показати схему документу (подвійний клік для розгортання/згортання елементів) -document_outline_label=Схема документа -attachments.title=Показати прикріплення -attachments_label=Прикріплення -layers.title=Показати шари (двічі клацніть, щоб скинути всі шари до типового стану) -layers_label=Шари -thumbs.title=Показувати ескізи -thumbs_label=Ескізи -current_outline_item.title=Знайти поточний елемент змісту -current_outline_item_label=Поточний елемент змісту -findbar.title=Знайти в документі -findbar_label=Знайти - -additional_layers=Додаткові шари -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Сторінка {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Сторінка {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Ескіз сторінки {{page}} - -# Find panel button title and messages -find_input.title=Знайти -find_input.placeholder=Знайти в документі… -find_previous.title=Знайти попереднє входження фрази -find_previous_label=Попереднє -find_next.title=Знайти наступне входження фрази -find_next_label=Наступне -find_highlight=Підсвітити все -find_match_case_label=З урахуванням регістру -find_match_diacritics_label=Відповідність діакритичних знаків -find_entire_word_label=Цілі слова -find_reached_top=Досягнуто початку документу, продовжено з кінця -find_reached_bottom=Досягнуто кінця документу, продовжено з початку -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} збіг із {{total}} -find_match_count[two]={{current}} збіги з {{total}} -find_match_count[few]={{current}} збігів із {{total}} -find_match_count[many]={{current}} збігів із {{total}} -find_match_count[other]={{current}} збігів із {{total}} -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Понад {{limit}} збігів -find_match_count_limit[one]=Більше, ніж {{limit}} збіг -find_match_count_limit[two]=Більше, ніж {{limit}} збіги -find_match_count_limit[few]=Більше, ніж {{limit}} збігів -find_match_count_limit[many]=Понад {{limit}} збігів -find_match_count_limit[other]=Понад {{limit}} збігів -find_not_found=Фразу не знайдено - -# Predefined zoom values -page_scale_width=За шириною -page_scale_fit=Вмістити -page_scale_auto=Автомасштаб -page_scale_actual=Дійсний розмір -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Під час завантаження PDF сталася помилка. -invalid_file_error=Недійсний або пошкоджений PDF-файл. -missing_file_error=Відсутній PDF-файл. -unexpected_response_error=Неочікувана відповідь сервера. -rendering_error=Під час виведення сторінки сталася помилка. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}}-анотація] -password_label=Введіть пароль для відкриття цього PDF-файла. -password_invalid=Невірний пароль. Спробуйте ще. -password_ok=Гаразд -password_cancel=Скасувати - -printing_not_supported=Попередження: Цей браузер не повністю підтримує друк. -printing_not_ready=Попередження: PDF не повністю завантажений для друку. -web_fonts_disabled=Веб-шрифти вимкнено: неможливо використати вбудовані у PDF шрифти. - -# Editor -editor_free_text2.title=Текст -editor_free_text2_label=Текст -editor_ink2.title=Малювати -editor_ink2_label=Малювати - -editor_stamp1.title=Додати чи редагувати зображення -editor_stamp1_label=Додати чи редагувати зображення - -free_text2_default_content=Почніть вводити… - -# Editor Parameters -editor_free_text_color=Колір -editor_free_text_size=Розмір -editor_ink_color=Колір -editor_ink_thickness=Товщина -editor_ink_opacity=Прозорість - -editor_stamp_add_image_label=Додати зображення -editor_stamp_add_image.title=Додати зображення - -# Editor aria -editor_free_text2_aria_label=Текстовий редактор -editor_ink2_aria_label=Графічний редактор -editor_ink_canvas_aria_label=Зображення, створене користувачем - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=Альтернативний текст -editor_alt_text_edit_button_label=Змінити альтернативний текст -editor_alt_text_dialog_label=Вибрати варіант -editor_alt_text_dialog_description=Альтернативний текст допомагає, коли зображення не видно або коли воно не завантажується. -editor_alt_text_add_description_label=Додати опис -editor_alt_text_add_description_description=Намагайтеся створити 1-2 речення, які описують тему, обставини або дії. -editor_alt_text_mark_decorative_label=Позначити декоративним -editor_alt_text_mark_decorative_description=Використовується для декоративних зображень, наприклад рамок або водяних знаків. -editor_alt_text_cancel_button=Скасувати -editor_alt_text_save_button=Зберегти -editor_alt_text_decorative_tooltip=Позначено декоративним -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=Наприклад, “Молодий чоловік сідає за стіл їсти” diff --git a/static/pdf.js/locale/ur/viewer.ftl b/static/pdf.js/locale/ur/viewer.ftl new file mode 100644 index 00000000..c15f157e --- /dev/null +++ b/static/pdf.js/locale/ur/viewer.ftl @@ -0,0 +1,248 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = پیشکش موڈ میں چلے جائیں +pdfjs-presentation-mode-button-label = پیشکش موڈ +pdfjs-open-file-button = + .title = مسل کھولیں +pdfjs-open-file-button-label = کھولیں +pdfjs-print-button = + .title = چھاپیں +pdfjs-print-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-vertical-button = + .title = عمودی اسکرولنگ کا استعمال کریں +pdfjs-scroll-vertical-button-label = عمودی اسکرولنگ +pdfjs-scroll-horizontal-button = + .title = افقی سکرولنگ کا استعمال کریں +pdfjs-scroll-horizontal-button-label = افقی سکرولنگ +pdfjs-spread-none-button = + .title = صفحہ پھیلانے میں شامل نہ ہوں +pdfjs-spread-none-button-label = کوئی پھیلاؤ نہیں +pdfjs-spread-odd-button-label = تاک پھیلاؤ +pdfjs-spread-even-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 = مسل سائز: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = عنوان: +pdfjs-document-properties-author = تخلیق کار: +pdfjs-document-properties-subject = موضوع: +pdfjs-document-properties-keywords = کلیدی الفاظ: +pdfjs-document-properties-creation-date = تخلیق کی تاریخ: +pdfjs-document-properties-modification-date = ترمیم کی تاریخ: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }، { $time } +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 = mm +pdfjs-document-properties-page-size-orientation-portrait = عمودی انداز +pdfjs-document-properties-page-size-orientation-landscape = افقى انداز +pdfjs-document-properties-page-size-name-a-three = A3 +pdfjs-document-properties-page-size-name-a-four = A4 +pdfjs-document-properties-page-size-name-letter = خط +pdfjs-document-properties-page-size-name-legal = قانونی + +## Variables: +## $width (Number) - the width of the (current) page +## $height (Number) - the height of the (current) page +## $unit (String) - the unit of measurement of the (current) page +## $name (String) - the name of the (current) page +## $orientation (String) - the orientation of the (current) page + +pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation }) +pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } { $name } { $orientation } + +## + +# The linearization status of the document; usually called "Fast Web View" in +# English locales of Adobe software. +pdfjs-document-properties-linearized = تیز ویب دیکھیں: +pdfjs-document-properties-linearized-yes = ہاں +pdfjs-document-properties-linearized-no = نہیں +pdfjs-document-properties-close-button = بند کریں + +## Print + +pdfjs-print-progress-message = چھاپنے کرنے کے لیے دستاویز تیار کیے جا رھے ھیں +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = *{ $progress }%* +pdfjs-print-progress-close-button = منسوخ کریں +pdfjs-printing-not-supported = تنبیہ:چھاپنا اس براؤزر پر پوری طرح معاونت شدہ نہیں ہے۔ +pdfjs-printing-not-ready = تنبیہ: PDF چھپائی کے لیے پوری طرح لوڈ نہیں ہوئی۔ + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = سلائیڈ ٹوگل کریں +pdfjs-toggle-sidebar-button-label = سلائیڈ ٹوگل کریں +pdfjs-document-outline-button = + .title = دستاویز کی سرخیاں دکھایں (تمام اشیاء وسیع / غائب کرنے کے لیے ڈبل کلک کریں) +pdfjs-document-outline-button-label = دستاویز آؤٹ لائن +pdfjs-attachments-button = + .title = منسلکات دکھائیں +pdfjs-attachments-button-label = منسلکات +pdfjs-thumbs-button = + .title = تھمبنیل دکھائیں +pdfjs-thumbs-button-label = مجمل +pdfjs-findbar-button = + .title = دستاویز میں ڈھونڈیں +pdfjs-findbar-button-label = ڈھونڈیں + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = صفحہ { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = صفحے کا مجمل { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = ڈھونڈیں + .placeholder = دستاویز… میں ڈھونڈیں +pdfjs-find-previous-button = + .title = فقرے کا پچھلا وقوع ڈھونڈیں +pdfjs-find-previous-button-label = پچھلا +pdfjs-find-next-button = + .title = فقرے کا اگلہ وقوع ڈھونڈیں +pdfjs-find-next-button-label = آگے +pdfjs-find-highlight-checkbox = تمام نمایاں کریں +pdfjs-find-match-case-checkbox-label = حروف مشابہ کریں +pdfjs-find-entire-word-checkbox-label = تمام الفاظ +pdfjs-find-reached-top = صفحہ کے شروع پر پہنچ گیا، نیچے سے جاری کیا +pdfjs-find-reached-bottom = صفحہ کے اختتام پر پہنچ گیا، اوپر سے جاری کیا +pdfjs-find-not-found = فقرا نہیں ملا + +## 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 } + +## Loading indicator messages + +pdfjs-loading-error = PDF لوڈ کرتے وقت نقص آ گیا۔ +pdfjs-invalid-file-error = ناجائز یا خراب PDF مسل +pdfjs-missing-file-error = PDF مسل غائب ہے۔ +pdfjs-unexpected-response-error = غیرمتوقع پیش کار جواب +pdfjs-rendering-error = صفحہ بناتے ہوئے نقص آ گیا۔ + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }.{ $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } نوٹ] + +## Password + +pdfjs-password-label = PDF مسل کھولنے کے لیے پاس ورڈ داخل کریں. +pdfjs-password-invalid = ناجائز پاس ورڈ. براےؑ کرم دوبارہ کوشش کریں. +pdfjs-password-ok-button = ٹھیک ہے +pdfjs-password-cancel-button = منسوخ کریں +pdfjs-web-fonts-disabled = ویب فانٹ نا اہل ہیں: شامل PDF فانٹ استعمال کرنے میں ناکام۔ + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/ur/viewer.properties b/static/pdf.js/locale/ur/viewer.properties deleted file mode 100644 index f2927fe4..00000000 --- a/static/pdf.js/locale/ur/viewer.properties +++ /dev/null @@ -1,218 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=پچھلا صفحہ -previous_label=پچھلا -next.title=اگلا صفحہ -next_label=آگے - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=صفحہ -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages={{pagesCount}} کا -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} کا {{pagesCount}}) - -zoom_out.title=باہر زوم کریں -zoom_out_label=باہر زوم کریں -zoom_in.title=اندر زوم کریں -zoom_in_label=اندر زوم کریں -zoom.title=زوم -presentation_mode.title=پیشکش موڈ میں چلے جائیں -presentation_mode_label=پیشکش موڈ -open_file.title=مسل کھولیں -open_file_label=کھولیں -print.title=چھاپیں -print_label=چھاپیں - -# Secondary toolbar and context menu -tools.title=آلات -tools_label=آلات -first_page.title=پہلے صفحہ پر جائیں -first_page_label=پہلے صفحہ پر جائیں -last_page.title=آخری صفحہ پر جائیں -last_page_label=آخری صفحہ پر جائیں -page_rotate_cw.title=گھڑی وار گھمائیں -page_rotate_cw_label=گھڑی وار گھمائیں -page_rotate_ccw.title=ضد گھڑی وار گھمائیں -page_rotate_ccw_label=ضد گھڑی وار گھمائیں - -cursor_text_select_tool.title=متن کے انتخاب کے ٹول کو فعال بناے -cursor_text_select_tool_label=متن کے انتخاب کا آلہ -cursor_hand_tool.title=ہینڈ ٹول کو فعال بناییں -cursor_hand_tool_label=ہاتھ کا آلہ - -scroll_vertical.title=عمودی اسکرولنگ کا استعمال کریں -scroll_vertical_label=عمودی اسکرولنگ -scroll_horizontal.title=افقی سکرولنگ کا استعمال کریں -scroll_horizontal_label=افقی سکرولنگ - -spread_none.title=صفحہ پھیلانے میں شامل نہ ہوں -spread_none_label=کوئی پھیلاؤ نہیں -spread_odd_label=تاک پھیلاؤ -spread_even_label=جفت پھیلاؤ - -# Document properties dialog box -document_properties.title=دستاویز خواص… -document_properties_label=دستاویز خواص…\u0020 -document_properties_file_name=نام مسل: -document_properties_file_size=مسل سائز: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=عنوان: -document_properties_author=تخلیق کار: -document_properties_subject=موضوع: -document_properties_keywords=کلیدی الفاظ: -document_properties_creation_date=تخلیق کی تاریخ: -document_properties_modification_date=ترمیم کی تاریخ: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}، {{time}} -document_properties_creator=تخلیق کار: -document_properties_producer=PDF پیدا کار: -document_properties_version=PDF ورژن: -document_properties_page_count=صفحہ شمار: -document_properties_page_size=صفہ کی لمبائ: -document_properties_page_size_unit_inches=میں -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=عمودی انداز -document_properties_page_size_orientation_landscape=افقى انداز -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=خط -document_properties_page_size_name_legal=قانونی -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} {{name}} {{orientation}} -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=تیز ویب دیکھیں: -document_properties_linearized_yes=ہاں -document_properties_linearized_no=نہیں -document_properties_close=بند کریں - -print_progress_message=چھاپنے کرنے کے لیے دستاویز تیار کیے جا رھے ھیں -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent=*{{progress}}%* -print_progress_close=منسوخ کریں - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=سلائیڈ ٹوگل کریں -toggle_sidebar_label=سلائیڈ ٹوگل کریں -document_outline.title=دستاویز کی سرخیاں دکھایں (تمام اشیاء وسیع / غائب کرنے کے لیے ڈبل کلک کریں) -document_outline_label=دستاویز آؤٹ لائن -attachments.title=منسلکات دکھائیں -attachments_label=منسلکات -thumbs.title=تھمبنیل دکھائیں -thumbs_label=مجمل -findbar.title=دستاویز میں ڈھونڈیں -findbar_label=ڈھونڈیں - -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=صفحہ {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=صفحہ {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=صفحے کا مجمل {{page}} - -# Find panel button title and messages -find_input.title=ڈھونڈیں -find_input.placeholder=دستاویز… میں ڈھونڈیں -find_previous.title=فقرے کا پچھلا وقوع ڈھونڈیں -find_previous_label=پچھلا -find_next.title=فقرے کا اگلہ وقوع ڈھونڈیں -find_next_label=آگے -find_highlight=تمام نمایاں کریں -find_match_case_label=حروف مشابہ کریں -find_entire_word_label=تمام الفاظ -find_reached_top=صفحہ کے شروع پر پہنچ گیا، نیچے سے جاری کیا -find_reached_bottom=صفحہ کے اختتام پر پہنچ گیا، اوپر سے جاری کیا -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{total}} میچ کا {{current}} -find_match_count[few]={{total}} میچوں میں سے {{current}} -find_match_count[many]={{total}} میچوں میں سے {{current}} -find_match_count[other]={{total}} میچوں میں سے {{current}} -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(total) ]} -find_match_count_limit[zero]={{limit}} سے زیادہ میچ -find_match_count_limit[one]={{limit}} سے زیادہ میچ -find_match_count_limit[two]={{limit}} سے زیادہ میچ -find_match_count_limit[few]={{limit}} سے زیادہ میچ -find_match_count_limit[many]={{limit}} سے زیادہ میچ -find_match_count_limit[other]={{limit}} سے زیادہ میچ -find_not_found=فقرا نہیں ملا - -# Predefined zoom values -page_scale_width=صفحہ چوڑائی -page_scale_fit=صفحہ فٹنگ -page_scale_auto=خودکار زوم -page_scale_actual=اصل سائز -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=PDF لوڈ کرتے وقت نقص آ گیا۔ -invalid_file_error=ناجائز یا خراب PDF مسل -missing_file_error=PDF مسل غائب ہے۔ -unexpected_response_error=غیرمتوقع پیش کار جواب - -rendering_error=صفحہ بناتے ہوئے نقص آ گیا۔ - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}.{{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} نوٹ] -password_label=PDF مسل کھولنے کے لیے پاس ورڈ داخل کریں. -password_invalid=ناجائز پاس ورڈ. براےؑ کرم دوبارہ کوشش کریں. -password_ok=ٹھیک ہے -password_cancel=منسوخ کریں - -printing_not_supported=تنبیہ:چھاپنا اس براؤزر پر پوری طرح معاونت شدہ نہیں ہے۔ -printing_not_ready=تنبیہ: PDF چھپائی کے لیے پوری طرح لوڈ نہیں ہوئی۔ -web_fonts_disabled=ویب فانٹ نا اہل ہیں: شامل PDF فانٹ استعمال کرنے میں ناکام۔ -# LOCALIZATION NOTE (unsupported_feature_signatures): Should contain the same -# exact string as in the `chrome.properties` file. - diff --git a/static/pdf.js/locale/uz/viewer.ftl b/static/pdf.js/locale/uz/viewer.ftl new file mode 100644 index 00000000..fb82f22d --- /dev/null +++ b/static/pdf.js/locale/uz/viewer.ftl @@ -0,0 +1,187 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Oldingi sahifa +pdfjs-previous-button-label = Oldingi +pdfjs-next-button = + .title = Keyingi sahifa +pdfjs-next-button-label = Keyingi +# 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 } +pdfjs-zoom-out-button = + .title = Kichiklashtirish +pdfjs-zoom-out-button-label = Kichiklashtirish +pdfjs-zoom-in-button = + .title = Kattalashtirish +pdfjs-zoom-in-button-label = Kattalashtirish +pdfjs-zoom-select = + .title = Masshtab +pdfjs-presentation-mode-button = + .title = Namoyish usuliga oʻtish +pdfjs-presentation-mode-button-label = Namoyish usuli +pdfjs-open-file-button = + .title = Faylni ochish +pdfjs-open-file-button-label = Ochish +pdfjs-print-button = + .title = Chop qilish +pdfjs-print-button-label = Chop qilish + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Vositalar +pdfjs-tools-button-label = Vositalar +pdfjs-first-page-button = + .title = Birinchi sahifaga oʻtish +pdfjs-first-page-button-label = Birinchi sahifaga oʻtish +pdfjs-last-page-button = + .title = Soʻnggi sahifaga oʻtish +pdfjs-last-page-button-label = Soʻnggi sahifaga oʻtish +pdfjs-page-rotate-cw-button = + .title = Soat yoʻnalishi boʻyicha burish +pdfjs-page-rotate-cw-button-label = Soat yoʻnalishi boʻyicha burish +pdfjs-page-rotate-ccw-button = + .title = Soat yoʻnalishiga qarshi burish +pdfjs-page-rotate-ccw-button-label = Soat yoʻnalishiga qarshi burish + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Hujjat xossalari +pdfjs-document-properties-button-label = Hujjat xossalari +pdfjs-document-properties-file-name = Fayl nomi: +pdfjs-document-properties-file-size = Fayl hajmi: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes) +pdfjs-document-properties-title = Nomi: +pdfjs-document-properties-author = Muallifi: +pdfjs-document-properties-subject = Mavzusi: +pdfjs-document-properties-keywords = Kalit so‘zlar +pdfjs-document-properties-creation-date = Yaratilgan sanasi: +pdfjs-document-properties-modification-date = O‘zgartirilgan sanasi +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Yaratuvchi: +pdfjs-document-properties-producer = PDF ishlab chiqaruvchi: +pdfjs-document-properties-version = PDF versiyasi: +pdfjs-document-properties-page-count = Sahifa soni: + +## 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-close-button = Yopish + +## Print + +pdfjs-printing-not-supported = Diqqat: chop qilish bruzer tomonidan toʻliq qoʻllab-quvvatlanmaydi. +pdfjs-printing-not-ready = Diqqat: PDF fayl chop qilish uchun toʻliq yuklanmadi. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Yon panelni yoqib/oʻchirib qoʻyish +pdfjs-toggle-sidebar-button-label = Yon panelni yoqib/oʻchirib qoʻyish +pdfjs-document-outline-button-label = Hujjat tuzilishi +pdfjs-attachments-button = + .title = Ilovalarni ko‘rsatish +pdfjs-attachments-button-label = Ilovalar +pdfjs-thumbs-button = + .title = Nishonchalarni koʻrsatish +pdfjs-thumbs-button-label = Nishoncha +pdfjs-findbar-button = + .title = Hujjat ichidan topish + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = { $page } sahifa +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = { $page } sahifa nishonchasi + +## Find panel button title and messages + +pdfjs-find-previous-button = + .title = Soʻzlardagi oldingi hodisani topish +pdfjs-find-previous-button-label = Oldingi +pdfjs-find-next-button = + .title = Iboradagi keyingi hodisani topish +pdfjs-find-next-button-label = Keyingi +pdfjs-find-highlight-checkbox = Barchasini ajratib koʻrsatish +pdfjs-find-match-case-checkbox-label = Katta-kichik harflarni farqlash +pdfjs-find-reached-top = Hujjatning boshigacha yetib keldik, pastdan davom ettiriladi +pdfjs-find-reached-bottom = Hujjatning oxiriga yetib kelindi, yuqoridan davom ettirladi +pdfjs-find-not-found = Soʻzlar topilmadi + +## Predefined zoom values + +pdfjs-page-scale-width = Sahifa eni +pdfjs-page-scale-fit = Sahifani moslashtirish +pdfjs-page-scale-auto = Avtomatik masshtab +pdfjs-page-scale-actual = Haqiqiy hajmi +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = PDF yuklanayotganda xato yuz berdi. +pdfjs-invalid-file-error = Xato yoki buzuq PDF fayli. +pdfjs-missing-file-error = PDF fayl kerak. +pdfjs-unexpected-response-error = Kutilmagan server javobi. +pdfjs-rendering-error = Sahifa renderlanayotganda xato yuz berdi. + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Annotation] + +## Password + +pdfjs-password-label = PDF faylni ochish uchun parolni kiriting. +pdfjs-password-invalid = Parol - notoʻgʻri. Qaytadan urinib koʻring. +pdfjs-password-ok-button = OK +pdfjs-web-fonts-disabled = Veb shriftlar oʻchirilgan: ichki PDF shriftlardan foydalanib boʻlmmaydi. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/uz/viewer.properties b/static/pdf.js/locale/uz/viewer.properties deleted file mode 100644 index b8d81970..00000000 --- a/static/pdf.js/locale/uz/viewer.properties +++ /dev/null @@ -1,142 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Oldingi sahifa -previous_label=Oldingi -next.title=Keyingi sahifa -next_label=Keyingi - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=/{{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. - -zoom_out.title=Kichiklashtirish -zoom_out_label=Kichiklashtirish -zoom_in.title=Kattalashtirish -zoom_in_label=Kattalashtirish -zoom.title=Masshtab -presentation_mode.title=Namoyish usuliga oʻtish -presentation_mode_label=Namoyish usuli -open_file.title=Faylni ochish -open_file_label=Ochish -print.title=Chop qilish -print_label=Chop qilish - -# Secondary toolbar and context menu -tools.title=Vositalar -tools_label=Vositalar -first_page.title=Birinchi sahifaga oʻtish -first_page_label=Birinchi sahifaga oʻtish -last_page.title=Soʻnggi sahifaga oʻtish -last_page_label=Soʻnggi sahifaga oʻtish -page_rotate_cw.title=Soat yoʻnalishi boʻyicha burish -page_rotate_cw_label=Soat yoʻnalishi boʻyicha burish -page_rotate_ccw.title=Soat yoʻnalishiga qarshi burish -page_rotate_ccw_label=Soat yoʻnalishiga qarshi burish - - -# Document properties dialog box -document_properties.title=Hujjat xossalari -document_properties_label=Hujjat xossalari -document_properties_file_name=Fayl nomi: -document_properties_file_size=Fayl hajmi: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} bytes) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} bytes) -document_properties_title=Nomi: -document_properties_author=Muallifi: -document_properties_subject=Mavzusi: -document_properties_keywords=Kalit so‘zlar -document_properties_creation_date=Yaratilgan sanasi: -document_properties_modification_date=O‘zgartirilgan sanasi -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Yaratuvchi: -document_properties_producer=PDF ishlab chiqaruvchi: -document_properties_version=PDF versiyasi: -document_properties_page_count=Sahifa soni: -document_properties_close=Yopish - -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Yon panelni yoqib/oʻchirib qoʻyish -toggle_sidebar_label=Yon panelni yoqib/oʻchirib qoʻyish -document_outline_label=Hujjat tuzilishi -attachments.title=Ilovalarni ko‘rsatish -attachments_label=Ilovalar -thumbs.title=Nishonchalarni koʻrsatish -thumbs_label=Nishoncha -findbar.title=Hujjat ichidan topish - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title={{page}} sahifa -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas={{page}} sahifa nishonchasi - -# Find panel button title and messages -find_previous.title=Soʻzlardagi oldingi hodisani topish -find_previous_label=Oldingi -find_next.title=Iboradagi keyingi hodisani topish -find_next_label=Keyingi -find_highlight=Barchasini ajratib koʻrsatish -find_match_case_label=Katta-kichik harflarni farqlash -find_reached_top=Hujjatning boshigacha yetib keldik, pastdan davom ettiriladi -find_reached_bottom=Hujjatning oxiriga yetib kelindi, yuqoridan davom ettirladi -find_not_found=Soʻzlar topilmadi - -# Predefined zoom values -page_scale_width=Sahifa eni -page_scale_fit=Sahifani moslashtirish -page_scale_auto=Avtomatik masshtab -page_scale_actual=Haqiqiy hajmi -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=PDF yuklanayotganda xato yuz berdi. -invalid_file_error=Xato yoki buzuq PDF fayli. -missing_file_error=PDF fayl kerak. -unexpected_response_error=Kutilmagan server javobi. - -rendering_error=Sahifa renderlanayotganda xato yuz berdi. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Annotation] -password_label=PDF faylni ochish uchun parolni kiriting. -password_invalid=Parol - notoʻgʻri. Qaytadan urinib koʻring. -password_ok=OK - -printing_not_supported=Diqqat: chop qilish bruzer tomonidan toʻliq qoʻllab-quvvatlanmaydi. -printing_not_ready=Diqqat: PDF fayl chop qilish uchun toʻliq yuklanmadi. -web_fonts_disabled=Veb shriftlar oʻchirilgan: ichki PDF shriftlardan foydalanib boʻlmmaydi. - diff --git a/static/pdf.js/locale/vi/viewer.ftl b/static/pdf.js/locale/vi/viewer.ftl new file mode 100644 index 00000000..4c53f75b --- /dev/null +++ b/static/pdf.js/locale/vi/viewer.ftl @@ -0,0 +1,394 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Trang trước +pdfjs-previous-button-label = Trước +pdfjs-next-button = + .title = Trang Sau +pdfjs-next-button-label = Tiếp +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Trang +# 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 = trên { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } trên { $pagesCount }) +pdfjs-zoom-out-button = + .title = Thu nhỏ +pdfjs-zoom-out-button-label = Thu nhỏ +pdfjs-zoom-in-button = + .title = Phóng to +pdfjs-zoom-in-button-label = Phóng to +pdfjs-zoom-select = + .title = Thu phóng +pdfjs-presentation-mode-button = + .title = Chuyển sang chế độ trình chiếu +pdfjs-presentation-mode-button-label = Chế độ trình chiếu +pdfjs-open-file-button = + .title = Mở tập tin +pdfjs-open-file-button-label = Mở tập tin +pdfjs-print-button = + .title = In +pdfjs-print-button-label = In +pdfjs-save-button = + .title = Lưu +pdfjs-save-button-label = Lưu +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Tải xuống +# 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 = Tải xuống +pdfjs-bookmark-button = + .title = Trang hiện tại (xem URL từ trang hiện tại) +pdfjs-bookmark-button-label = Trang hiện tại +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = Mở trong ứng dụng +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-button-label = Mở trong ứng dụng + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Công cụ +pdfjs-tools-button-label = Công cụ +pdfjs-first-page-button = + .title = Về trang đầu +pdfjs-first-page-button-label = Về trang đầu +pdfjs-last-page-button = + .title = Đến trang cuối +pdfjs-last-page-button-label = Đến trang cuối +pdfjs-page-rotate-cw-button = + .title = Xoay theo chiều kim đồng hồ +pdfjs-page-rotate-cw-button-label = Xoay theo chiều kim đồng hồ +pdfjs-page-rotate-ccw-button = + .title = Xoay ngược chiều kim đồng hồ +pdfjs-page-rotate-ccw-button-label = Xoay ngược chiều kim đồng hồ +pdfjs-cursor-text-select-tool-button = + .title = Kích hoạt công cụ chọn vùng văn bản +pdfjs-cursor-text-select-tool-button-label = Công cụ chọn vùng văn bản +pdfjs-cursor-hand-tool-button = + .title = Kích hoạt công cụ con trỏ +pdfjs-cursor-hand-tool-button-label = Công cụ con trỏ +pdfjs-scroll-page-button = + .title = Sử dụng cuộn trang hiện tại +pdfjs-scroll-page-button-label = Cuộn trang hiện tại +pdfjs-scroll-vertical-button = + .title = Sử dụng cuộn dọc +pdfjs-scroll-vertical-button-label = Cuộn dọc +pdfjs-scroll-horizontal-button = + .title = Sử dụng cuộn ngang +pdfjs-scroll-horizontal-button-label = Cuộn ngang +pdfjs-scroll-wrapped-button = + .title = Sử dụng cuộn ngắt dòng +pdfjs-scroll-wrapped-button-label = Cuộn ngắt dòng +pdfjs-spread-none-button = + .title = Không nối rộng trang +pdfjs-spread-none-button-label = Không có phân cách +pdfjs-spread-odd-button = + .title = Nối trang bài bắt đầu với các trang được đánh số lẻ +pdfjs-spread-odd-button-label = Phân cách theo số lẻ +pdfjs-spread-even-button = + .title = Nối trang bài bắt đầu với các trang được đánh số chẵn +pdfjs-spread-even-button-label = Phân cách theo số chẵn + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Thuộc tính của tài liệu… +pdfjs-document-properties-button-label = Thuộc tính của tài liệu… +pdfjs-document-properties-file-name = Tên tập tin: +pdfjs-document-properties-file-size = Kích thước: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } byte) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } byte) +pdfjs-document-properties-title = Tiêu đề: +pdfjs-document-properties-author = Tác giả: +pdfjs-document-properties-subject = Chủ đề: +pdfjs-document-properties-keywords = Từ khóa: +pdfjs-document-properties-creation-date = Ngày tạo: +pdfjs-document-properties-modification-date = Ngày sửa đổi: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Người tạo: +pdfjs-document-properties-producer = Phần mềm tạo PDF: +pdfjs-document-properties-version = Phiên bản PDF: +pdfjs-document-properties-page-count = Tổng số trang: +pdfjs-document-properties-page-size = Kích thước trang: +pdfjs-document-properties-page-size-unit-inches = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = khổ dọc +pdfjs-document-properties-page-size-orientation-landscape = khổ ngang +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 = Thư +pdfjs-document-properties-page-size-name-legal = Pháp lý + +## 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 = Xem nhanh trên web: +pdfjs-document-properties-linearized-yes = Có +pdfjs-document-properties-linearized-no = Không +pdfjs-document-properties-close-button = Ðóng + +## Print + +pdfjs-print-progress-message = Chuẩn bị trang để in… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Hủy bỏ +pdfjs-printing-not-supported = Cảnh báo: In ấn không được hỗ trợ đầy đủ ở trình duyệt này. +pdfjs-printing-not-ready = Cảnh báo: PDF chưa được tải hết để in. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Bật/Tắt thanh lề +pdfjs-toggle-sidebar-notification-button = + .title = Bật tắt thanh lề (tài liệu bao gồm bản phác thảo/tập tin đính kèm/lớp) +pdfjs-toggle-sidebar-button-label = Bật/Tắt thanh lề +pdfjs-document-outline-button = + .title = Hiển thị tài liệu phác thảo (nhấp đúp vào để mở rộng/thu gọn tất cả các mục) +pdfjs-document-outline-button-label = Bản phác tài liệu +pdfjs-attachments-button = + .title = Hiện nội dung đính kèm +pdfjs-attachments-button-label = Nội dung đính kèm +pdfjs-layers-button = + .title = Hiển thị các lớp (nhấp đúp để đặt lại tất cả các lớp về trạng thái mặc định) +pdfjs-layers-button-label = Lớp +pdfjs-thumbs-button = + .title = Hiển thị ảnh thu nhỏ +pdfjs-thumbs-button-label = Ảnh thu nhỏ +pdfjs-current-outline-item-button = + .title = Tìm mục phác thảo hiện tại +pdfjs-current-outline-item-button-label = Mục phác thảo hiện tại +pdfjs-findbar-button = + .title = Tìm trong tài liệu +pdfjs-findbar-button-label = Tìm +pdfjs-additional-layers = Các lớp bổ sung + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Trang { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Ảnh thu nhỏ của trang { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Tìm + .placeholder = Tìm trong tài liệu… +pdfjs-find-previous-button = + .title = Tìm cụm từ ở phần trước +pdfjs-find-previous-button-label = Trước +pdfjs-find-next-button = + .title = Tìm cụm từ ở phần sau +pdfjs-find-next-button-label = Tiếp +pdfjs-find-highlight-checkbox = Đánh dấu tất cả +pdfjs-find-match-case-checkbox-label = Phân biệt hoa, thường +pdfjs-find-match-diacritics-checkbox-label = Khớp dấu phụ +pdfjs-find-entire-word-checkbox-label = Toàn bộ từ +pdfjs-find-reached-top = Đã đến phần đầu tài liệu, quay trở lại từ cuối +pdfjs-find-reached-bottom = Đã đến phần cuối của tài liệu, quay trở lại từ đầu +# 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 = { $current } trên { $total } kết quả +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = Tìm thấy hơn { $limit } kết quả +pdfjs-find-not-found = Không tìm thấy cụm từ này + +## Predefined zoom values + +pdfjs-page-scale-width = Vừa chiều rộng +pdfjs-page-scale-fit = Vừa chiều cao +pdfjs-page-scale-auto = Tự động chọn kích thước +pdfjs-page-scale-actual = Kích thước thực +# 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 = Trang { $page } + +## Loading indicator messages + +pdfjs-loading-error = Lỗi khi tải tài liệu PDF. +pdfjs-invalid-file-error = Tập tin PDF hỏng hoặc không hợp lệ. +pdfjs-missing-file-error = Thiếu tập tin PDF. +pdfjs-unexpected-response-error = Máy chủ có phản hồi lạ. +pdfjs-rendering-error = Lỗi khi hiển thị trang. + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date }, { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Chú thích] + +## Password + +pdfjs-password-label = Nhập mật khẩu để mở tập tin PDF này. +pdfjs-password-invalid = Mật khẩu không đúng. Vui lòng thử lại. +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Hủy bỏ +pdfjs-web-fonts-disabled = Phông chữ Web bị vô hiệu hóa: không thể sử dụng các phông chữ PDF được nhúng. + +## Editing + +pdfjs-editor-free-text-button = + .title = Văn bản +pdfjs-editor-free-text-button-label = Văn bản +pdfjs-editor-ink-button = + .title = Vẽ +pdfjs-editor-ink-button-label = Vẽ +pdfjs-editor-stamp-button = + .title = Thêm hoặc chỉnh sửa hình ảnh +pdfjs-editor-stamp-button-label = Thêm hoặc chỉnh sửa hình ảnh +pdfjs-editor-highlight-button = + .title = Đánh dấu +pdfjs-editor-highlight-button-label = Đánh dấu +pdfjs-highlight-floating-button = + .title = Đánh dấu +pdfjs-highlight-floating-button1 = + .title = Đánh dấu + .aria-label = Đánh dấu +pdfjs-highlight-floating-button-label = Đánh dấu + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = Xóa bản vẽ +pdfjs-editor-remove-freetext-button = + .title = Xóa văn bản +pdfjs-editor-remove-stamp-button = + .title = Xóa ảnh +pdfjs-editor-remove-highlight-button = + .title = Xóa phần đánh dấu + +## + +# Editor Parameters +pdfjs-editor-free-text-color-input = Màu +pdfjs-editor-free-text-size-input = Kích cỡ +pdfjs-editor-ink-color-input = Màu +pdfjs-editor-ink-thickness-input = Độ dày +pdfjs-editor-ink-opacity-input = Độ mờ +pdfjs-editor-stamp-add-image-button = + .title = Thêm hình ảnh +pdfjs-editor-stamp-add-image-button-label = Thêm hình ảnh +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Độ dày +pdfjs-editor-free-highlight-thickness-title = + .title = Thay đổi độ dày khi đánh dấu các mục không phải là văn bản +pdfjs-free-text = + .aria-label = Trình sửa văn bản +pdfjs-free-text-default-content = Bắt đầu nhập… +pdfjs-ink = + .aria-label = Trình sửa nét vẽ +pdfjs-ink-canvas = + .aria-label = Hình ảnh do người dùng tạo + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = Văn bản thay thế +pdfjs-editor-alt-text-edit-button-label = Chỉnh sửa văn bản thay thế +pdfjs-editor-alt-text-dialog-label = Chọn một lựa chọn +pdfjs-editor-alt-text-dialog-description = Văn bản thay thế sẽ hữu ích khi mọi người không thể thấy hình ảnh hoặc khi hình ảnh không tải. +pdfjs-editor-alt-text-add-description-label = Thêm một mô tả +pdfjs-editor-alt-text-add-description-description = Hãy nhắm tới 1-2 câu mô tả chủ đề, bối cảnh hoặc hành động. +pdfjs-editor-alt-text-mark-decorative-label = Đánh dấu là trang trí +pdfjs-editor-alt-text-mark-decorative-description = Điều này được sử dụng cho các hình ảnh trang trí, như đường viền hoặc watermark. +pdfjs-editor-alt-text-cancel-button = Hủy bỏ +pdfjs-editor-alt-text-save-button = Lưu +pdfjs-editor-alt-text-decorative-tooltip = Đã đánh dấu là trang trí +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = Ví dụ: “Một thanh niên ngồi xuống bàn để thưởng thức một bữa ăn” + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = Trên cùng bên trái — thay đổi kích thước +pdfjs-editor-resizer-label-top-middle = Trên cùng ở giữa — thay đổi kích thước +pdfjs-editor-resizer-label-top-right = Trên cùng bên phải — thay đổi kích thước +pdfjs-editor-resizer-label-middle-right = Ở giữa bên phải — thay đổi kích thước +pdfjs-editor-resizer-label-bottom-right = Dưới cùng bên phải — thay đổi kích thước +pdfjs-editor-resizer-label-bottom-middle = Ở giữa dưới cùng — thay đổi kích thước +pdfjs-editor-resizer-label-bottom-left = Góc dưới bên trái — thay đổi kích thước +pdfjs-editor-resizer-label-middle-left = Ở giữa bên trái — thay đổi kích thước + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = Màu đánh dấu +pdfjs-editor-colorpicker-button = + .title = Thay đổi màu +pdfjs-editor-colorpicker-dropdown = + .aria-label = Lựa chọn màu sắc +pdfjs-editor-colorpicker-yellow = + .title = Vàng +pdfjs-editor-colorpicker-green = + .title = Xanh lục +pdfjs-editor-colorpicker-blue = + .title = Xanh dương +pdfjs-editor-colorpicker-pink = + .title = Hồng +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 = Hiện tất cả +pdfjs-editor-highlight-show-all-button = + .title = Hiện tất cả diff --git a/static/pdf.js/locale/vi/viewer.properties b/static/pdf.js/locale/vi/viewer.properties deleted file mode 100644 index 3b87eef3..00000000 --- a/static/pdf.js/locale/vi/viewer.properties +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Trang trước -previous_label=Trước -next.title=Trang Sau -next_label=Tiếp - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Trang -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=trên {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} trên {{pagesCount}}) - -zoom_out.title=Thu nhỏ -zoom_out_label=Thu nhỏ -zoom_in.title=Phóng to -zoom_in_label=Phóng to -zoom.title=Thu phóng -presentation_mode.title=Chuyển sang chế độ trình chiếu -presentation_mode_label=Chế độ trình chiếu -open_file.title=Mở tập tin -open_file_label=Mở tập tin -print.title=In -print_label=In -save.title=Lưu -save_label=Lưu -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=Tải xuống -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=Tải xuống -bookmark1.title=Trang hiện tại (xem URL từ trang hiện tại) -bookmark1_label=Trang hiện tại -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=Mở trong ứng dụng -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=Mở trong ứng dụng - -# Secondary toolbar and context menu -tools.title=Công cụ -tools_label=Công cụ -first_page.title=Về trang đầu -first_page_label=Về trang đầu -last_page.title=Đến trang cuối -last_page_label=Đến trang cuối -page_rotate_cw.title=Xoay theo chiều kim đồng hồ -page_rotate_cw_label=Xoay theo chiều kim đồng hồ -page_rotate_ccw.title=Xoay ngược chiều kim đồng hồ -page_rotate_ccw_label=Xoay ngược chiều kim đồng hồ - -cursor_text_select_tool.title=Kích hoạt công cụ chọn vùng văn bản -cursor_text_select_tool_label=Công cụ chọn vùng văn bản -cursor_hand_tool.title=Kích hoạt công cụ con trỏ -cursor_hand_tool_label=Công cụ con trỏ - -scroll_page.title=Sử dụng cuộn trang hiện tại -scroll_page_label=Cuộn trang hiện tại -scroll_vertical.title=Sử dụng cuộn dọc -scroll_vertical_label=Cuộn dọc -scroll_horizontal.title=Sử dụng cuộn ngang -scroll_horizontal_label=Cuộn ngang -scroll_wrapped.title=Sử dụng cuộn ngắt dòng -scroll_wrapped_label=Cuộn ngắt dòng - -spread_none.title=Không nối rộng trang -spread_none_label=Không có phân cách -spread_odd.title=Nối trang bài bắt đầu với các trang được đánh số lẻ -spread_odd_label=Phân cách theo số lẻ -spread_even.title=Nối trang bài bắt đầu với các trang được đánh số chẵn -spread_even_label=Phân cách theo số chẵn - -# Document properties dialog box -document_properties.title=Thuộc tính của tài liệu… -document_properties_label=Thuộc tính của tài liệu… -document_properties_file_name=Tên tập tin: -document_properties_file_size=Kích thước: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} byte) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} byte) -document_properties_title=Tiêu đề: -document_properties_author=Tác giả: -document_properties_subject=Chủ đề: -document_properties_keywords=Từ khóa: -document_properties_creation_date=Ngày tạo: -document_properties_modification_date=Ngày sửa đổi: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Người tạo: -document_properties_producer=Phần mềm tạo PDF: -document_properties_version=Phiên bản PDF: -document_properties_page_count=Tổng số trang: -document_properties_page_size=Kích thước trang: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=khổ dọc -document_properties_page_size_orientation_landscape=khổ ngang -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Thư -document_properties_page_size_name_legal=Pháp lý -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=Xem nhanh trên web: -document_properties_linearized_yes=Có -document_properties_linearized_no=Không -document_properties_close=Ðóng - -print_progress_message=Chuẩn bị trang để in… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Hủy bỏ - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Bật/Tắt thanh lề -toggle_sidebar_notification2.title=Bật tắt thanh lề (tài liệu bao gồm bản phác thảo/tập tin đính kèm/lớp) -toggle_sidebar_label=Bật/Tắt thanh lề -document_outline.title=Hiển thị tài liệu phác thảo (nhấp đúp vào để mở rộng/thu gọn tất cả các mục) -document_outline_label=Bản phác tài liệu -attachments.title=Hiện nội dung đính kèm -attachments_label=Nội dung đính kèm -layers.title=Hiển thị các lớp (nhấp đúp để đặt lại tất cả các lớp về trạng thái mặc định) -layers_label=Lớp -thumbs.title=Hiển thị ảnh thu nhỏ -thumbs_label=Ảnh thu nhỏ -current_outline_item.title=Tìm mục phác thảo hiện tại -current_outline_item_label=Mục phác thảo hiện tại -findbar.title=Tìm trong tài liệu -findbar_label=Tìm - -additional_layers=Các lớp bổ sung -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=Trang {{page}} -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Trang {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Ảnh thu nhỏ của trang {{page}} - -# Find panel button title and messages -find_input.title=Tìm -find_input.placeholder=Tìm trong tài liệu… -find_previous.title=Tìm cụm từ ở phần trước -find_previous_label=Trước -find_next.title=Tìm cụm từ ở phần sau -find_next_label=Tiếp -find_highlight=Tô sáng tất cả -find_match_case_label=Phân biệt hoa, thường -find_match_diacritics_label=Khớp dấu phụ -find_entire_word_label=Toàn bộ từ -find_reached_top=Đã đến phần đầu tài liệu, quay trở lại từ cuối -find_reached_bottom=Đã đến phần cuối của tài liệu, quay trở lại từ đầu -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]={{current}} của {{total}} đã trùng -find_match_count[two]={{current}} của {{total}} đã trùng -find_match_count[few]={{current}} của {{total}} đã trùng -find_match_count[many]={{current}} của {{total}} đã trùng -find_match_count[other]={{current}} của {{total}} đã trùng -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=Nhiều hơn {{limit}} đã trùng -find_match_count_limit[one]=Nhiều hơn {{limit}} đã trùng -find_match_count_limit[two]=Nhiều hơn {{limit}} đã trùng -find_match_count_limit[few]=Nhiều hơn {{limit}} đã trùng -find_match_count_limit[many]=Nhiều hơn {{limit}} đã trùng -find_match_count_limit[other]=Nhiều hơn {{limit}} đã trùng -find_not_found=Không tìm thấy cụm từ này - -# Predefined zoom values -page_scale_width=Vừa chiều rộng -page_scale_fit=Vừa chiều cao -page_scale_auto=Tự động chọn kích thước -page_scale_actual=Kích thước thực -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=Lỗi khi tải tài liệu PDF. -invalid_file_error=Tập tin PDF hỏng hoặc không hợp lệ. -missing_file_error=Thiếu tập tin PDF. -unexpected_response_error=Máy chủ có phản hồi lạ. -rendering_error=Lỗi khi hiển thị trang. - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}}, {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Chú thích] -password_label=Nhập mật khẩu để mở tập tin PDF này. -password_invalid=Mật khẩu không đúng. Vui lòng thử lại. -password_ok=OK -password_cancel=Hủy bỏ - -printing_not_supported=Cảnh báo: In ấn không được hỗ trợ đầy đủ ở trình duyệt này. -printing_not_ready=Cảnh báo: PDF chưa được tải hết để in. -web_fonts_disabled=Phông chữ Web bị vô hiệu hóa: không thể sử dụng các phông chữ PDF được nhúng. - -# Editor -editor_free_text2.title=Văn bản -editor_free_text2_label=Văn bản -editor_ink2.title=Vẽ -editor_ink2_label=Vẽ - -editor_stamp.title=Thêm một ảnh -editor_stamp_label=Thêm một ảnh - -editor_stamp1.title=Thêm hoặc chỉnh sửa hình ảnh -editor_stamp1_label=Thêm hoặc chỉnh sửa hình ảnh - -free_text2_default_content=Bắt đầu nhập… - -# Editor Parameters -editor_free_text_color=Màu -editor_free_text_size=Kích cỡ -editor_ink_color=Màu -editor_ink_thickness=Độ dày -editor_ink_opacity=Độ mờ - -editor_stamp_add_image_label=Thêm hình ảnh -editor_stamp_add_image.title=Thêm hình ảnh - -# Editor aria -editor_free_text2_aria_label=Trình sửa văn bản -editor_ink2_aria_label=Trình sửa nét vẽ -editor_ink_canvas_aria_label=Hình ảnh do người dùng tạo diff --git a/static/pdf.js/locale/wo/viewer.ftl b/static/pdf.js/locale/wo/viewer.ftl new file mode 100644 index 00000000..d66c4591 --- /dev/null +++ b/static/pdf.js/locale/wo/viewer.ftl @@ -0,0 +1,127 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Xët wi jiitu +pdfjs-previous-button-label = Bi jiitu +pdfjs-next-button = + .title = Xët wi ci topp +pdfjs-next-button-label = Bi ci topp +pdfjs-zoom-out-button = + .title = Wàññi +pdfjs-zoom-out-button-label = Wàññi +pdfjs-zoom-in-button = + .title = Yaatal +pdfjs-zoom-in-button-label = Yaatal +pdfjs-zoom-select = + .title = Yambalaŋ +pdfjs-presentation-mode-button = + .title = Wañarñil ci anamu wone +pdfjs-presentation-mode-button-label = Anamu Wone +pdfjs-open-file-button = + .title = Ubbi benn dencukaay +pdfjs-open-file-button-label = Ubbi +pdfjs-print-button = + .title = Móol +pdfjs-print-button-label = Móol + +## Secondary toolbar and context menu + + +## Document properties dialog + +pdfjs-document-properties-title = Bopp: + +## 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 + + +## + + +## Print + +pdfjs-printing-not-supported = Artu: Joowkat bii nanguwul lool mool. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-thumbs-button = + .title = Wone nataal yu ndaw yi +pdfjs-thumbs-button-label = Nataal yu ndaw yi +pdfjs-findbar-button = + .title = Gis ci biir jukki bi +pdfjs-findbar-button-label = Wut + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Xët { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Wiñet bu xët { $page } + +## Find panel button title and messages + +pdfjs-find-previous-button = + .title = Seet beneen kaddu bu ni mel te jiitu +pdfjs-find-previous-button-label = Bi jiitu +pdfjs-find-next-button = + .title = Seet beneen kaddu bu ni mel +pdfjs-find-next-button-label = Bi ci topp +pdfjs-find-highlight-checkbox = Melaxal lépp +pdfjs-find-match-case-checkbox-label = Sàmm jëmmalin wi +pdfjs-find-reached-top = Jot nañu ndorteel xët wi, kontine dale ko ci suuf +pdfjs-find-reached-bottom = Jot nañu jeexitalu xët wi, kontine ci ndorte +pdfjs-find-not-found = Gisiñu kaddu gi + +## Predefined zoom values + +pdfjs-page-scale-width = Yaatuwaay bu mët +pdfjs-page-scale-fit = Xët lëmm +pdfjs-page-scale-auto = Yambalaŋ ci saa si +pdfjs-page-scale-actual = Dayo bi am + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = Am na njumte ci yebum dencukaay PDF bi. +pdfjs-invalid-file-error = Dencukaay PDF bi baaxul walla mu sankar. +pdfjs-rendering-error = Am njumte bu am bi xët bi di wonewu. + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [Karmat { $type }] + +## Password + +pdfjs-password-ok-button = OK +pdfjs-password-cancel-button = Neenal + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/wo/viewer.properties b/static/pdf.js/locale/wo/viewer.properties deleted file mode 100644 index 28ec9633..00000000 --- a/static/pdf.js/locale/wo/viewer.properties +++ /dev/null @@ -1,104 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Xët wi jiitu -previous_label=Bi jiitu -next.title=Xët wi ci topp -next_label=Bi ci topp - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. - -zoom_out.title=Wàññi -zoom_out_label=Wàññi -zoom_in.title=Yaatal -zoom_in_label=Yaatal -zoom.title=Yambalaŋ -presentation_mode.title=Wañarñil ci anamu wone -presentation_mode_label=Anamu Wone -open_file.title=Ubbi benn dencukaay -open_file_label=Ubbi -print.title=Móol -print_label=Móol - -# Secondary toolbar and context menu - - -# Document properties dialog box -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_title=Bopp: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. - -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -thumbs.title=Wone nataal yu ndaw yi -thumbs_label=Nataal yu ndaw yi -findbar.title=Gis ci biir jukki bi -findbar_label=Wut - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Xët {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Wiñet bu xët {{page}} - -# Find panel button title and messages -find_previous.title=Seet beneen kaddu bu ni mel te jiitu -find_previous_label=Bi jiitu -find_next.title=Seet beneen kaddu bu ni mel -find_next_label=Bi ci topp -find_highlight=Melaxal lépp -find_match_case_label=Sàmm jëmmalin wi -find_reached_top=Jot nañu ndorteel xët wi, kontine dale ko ci suuf -find_reached_bottom=Jot nañu jeexitalu xët wi, kontine ci ndorte -find_not_found=Gisiñu kaddu gi - -# Predefined zoom values -page_scale_width=Yaatuwaay bu mët -page_scale_fit=Xët lëmm -page_scale_auto=Yambalaŋ ci saa si -page_scale_actual=Dayo bi am -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. - -loading_error=Am na njumte ci yebum dencukaay PDF bi. -invalid_file_error=Dencukaay PDF bi baaxul walla mu sankar. - -rendering_error=Am njumte bu am bi xët bi di wonewu. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[Karmat {{type}}] -password_ok=OK -password_cancel=Neenal - -printing_not_supported=Artu: Joowkat bii nanguwul lool mool. - diff --git a/static/pdf.js/locale/xh/viewer.ftl b/static/pdf.js/locale/xh/viewer.ftl new file mode 100644 index 00000000..07988873 --- /dev/null +++ b/static/pdf.js/locale/xh/viewer.ftl @@ -0,0 +1,212 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-previous-button = + .title = Iphepha langaphambili +pdfjs-previous-button-label = Okwangaphambili +pdfjs-next-button = + .title = Iphepha elilandelayo +pdfjs-next-button-label = Okulandelayo +# .title: Tooltip for the pageNumber input. +pdfjs-page-input = + .title = Iphepha +# 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 = kwali- { $pagesCount } +# Variables: +# $pageNumber (Number) - the currently visible page +# $pagesCount (Number) - the total number of pages in the document +pdfjs-page-of-pages = ({ $pageNumber } kwali { $pagesCount }) +pdfjs-zoom-out-button = + .title = Bhekelisela Kudana +pdfjs-zoom-out-button-label = Bhekelisela Kudana +pdfjs-zoom-in-button = + .title = Sondeza Kufuphi +pdfjs-zoom-in-button-label = Sondeza Kufuphi +pdfjs-zoom-select = + .title = Yandisa / Nciphisa +pdfjs-presentation-mode-button = + .title = Tshintshela kwimo yonikezelo +pdfjs-presentation-mode-button-label = Imo yonikezelo +pdfjs-open-file-button = + .title = Vula Ifayile +pdfjs-open-file-button-label = Vula +pdfjs-print-button = + .title = Printa +pdfjs-print-button-label = Printa + +## Secondary toolbar and context menu + +pdfjs-tools-button = + .title = Izixhobo zemiyalelo +pdfjs-tools-button-label = Izixhobo zemiyalelo +pdfjs-first-page-button = + .title = Yiya kwiphepha lokuqala +pdfjs-first-page-button-label = Yiya kwiphepha lokuqala +pdfjs-last-page-button = + .title = Yiya kwiphepha lokugqibela +pdfjs-last-page-button-label = Yiya kwiphepha lokugqibela +pdfjs-page-rotate-cw-button = + .title = Jikelisa ngasekunene +pdfjs-page-rotate-cw-button-label = Jikelisa ngasekunene +pdfjs-page-rotate-ccw-button = + .title = Jikelisa ngasekhohlo +pdfjs-page-rotate-ccw-button-label = Jikelisa ngasekhohlo +pdfjs-cursor-text-select-tool-button = + .title = Vumela iSixhobo sokuKhetha iTeksti +pdfjs-cursor-text-select-tool-button-label = ISixhobo sokuKhetha iTeksti +pdfjs-cursor-hand-tool-button = + .title = Yenza iSixhobo seSandla siSebenze +pdfjs-cursor-hand-tool-button-label = ISixhobo seSandla + +## Document properties dialog + +pdfjs-document-properties-button = + .title = Iipropati zoxwebhu… +pdfjs-document-properties-button-label = Iipropati zoxwebhu… +pdfjs-document-properties-file-name = Igama lefayile: +pdfjs-document-properties-file-size = Isayizi yefayile: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB (iibhayiti{ $size_b }) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB (iibhayithi{ $size_b }) +pdfjs-document-properties-title = Umxholo: +pdfjs-document-properties-author = Umbhali: +pdfjs-document-properties-subject = Umbandela: +pdfjs-document-properties-keywords = Amagama aphambili: +pdfjs-document-properties-creation-date = Umhla wokwenziwa kwayo: +pdfjs-document-properties-modification-date = Umhla wokulungiswa kwayo: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +pdfjs-document-properties-creator = Umntu oyenzileyo: +pdfjs-document-properties-producer = Umvelisi we-PDF: +pdfjs-document-properties-version = Uhlelo lwe-PDF: +pdfjs-document-properties-page-count = Inani lamaphepha: + +## 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-close-button = Vala + +## Print + +pdfjs-print-progress-message = Ilungisa uxwebhu ukuze iprinte… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = Rhoxisa +pdfjs-printing-not-supported = Isilumkiso: Ukuprinta akuxhaswa ngokupheleleyo yile bhrawuza. +pdfjs-printing-not-ready = Isilumkiso: IPDF ayihlohlwanga ngokupheleleyo ukwenzela ukuprinta. + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = Togola ngebha eseCaleni +pdfjs-toggle-sidebar-button-label = Togola ngebha eseCaleni +pdfjs-document-outline-button = + .title = Bonisa uLwandlalo loXwebhu (cofa kabini ukuze wandise/diliza zonke izinto) +pdfjs-document-outline-button-label = Isishwankathelo soxwebhu +pdfjs-attachments-button = + .title = Bonisa iziqhotyoshelwa +pdfjs-attachments-button-label = Iziqhoboshelo +pdfjs-thumbs-button = + .title = Bonisa ukrobiso kumfanekiso +pdfjs-thumbs-button-label = Ukrobiso kumfanekiso +pdfjs-findbar-button = + .title = Fumana kuXwebhu +pdfjs-findbar-button-label = Fumana + +## Thumbnails panel item (tooltip and alt text for images) + +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-title = + .title = Iphepha { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = Ukrobiso kumfanekiso wephepha { $page } + +## Find panel button title and messages + +pdfjs-find-input = + .title = Fumana + .placeholder = Fumana kuXwebhu… +pdfjs-find-previous-button = + .title = Fumanisa isenzeko sangaphambili sebinzana lamagama +pdfjs-find-previous-button-label = Okwangaphambili +pdfjs-find-next-button = + .title = Fumanisa isenzeko esilandelayo sebinzana lamagama +pdfjs-find-next-button-label = Okulandelayo +pdfjs-find-highlight-checkbox = Qaqambisa konke +pdfjs-find-match-case-checkbox-label = Tshatisa ngobukhulu bukanobumba +pdfjs-find-reached-top = Ufike ngaphezulu ephepheni, kusukwa ngezantsi +pdfjs-find-reached-bottom = Ufike ekupheleni kwephepha, kusukwa ngaphezulu +pdfjs-find-not-found = Ibinzana alifunyenwanga + +## Predefined zoom values + +pdfjs-page-scale-width = Ububanzi bephepha +pdfjs-page-scale-fit = Ukulinganiswa kwephepha +pdfjs-page-scale-auto = Ukwandisa/Ukunciphisa Ngokwayo +pdfjs-page-scale-actual = Ubungakanani bokwenene +# Variables: +# $scale (Number) - percent value for page scale +pdfjs-page-scale-percent = { $scale }% + +## PDF page + + +## Loading indicator messages + +pdfjs-loading-error = Imposiso yenzekile xa kulayishwa i-PDF. +pdfjs-invalid-file-error = Ifayile ye-PDF engeyiyo okanye eyonakalisiweyo. +pdfjs-missing-file-error = Ifayile ye-PDF edukileyo. +pdfjs-unexpected-response-error = Impendulo yeseva engalindelekanga. +pdfjs-rendering-error = Imposiso yenzekile xa bekunikezelwa iphepha. + +## Annotations + +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } Ubhalo-nqaku] + +## Password + +pdfjs-password-label = Faka ipasiwedi ukuze uvule le fayile yePDF. +pdfjs-password-invalid = Ipasiwedi ayisebenzi. Nceda uzame kwakhona. +pdfjs-password-ok-button = KULUNGILE +pdfjs-password-cancel-button = Rhoxisa +pdfjs-web-fonts-disabled = Iifonti zewebhu ziqhwalelisiwe: ayikwazi ukusebenzisa iifonti ze-PDF ezincanyathelisiweyo. + +## Editing + + +## Alt-text dialog + + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + diff --git a/static/pdf.js/locale/xh/viewer.properties b/static/pdf.js/locale/xh/viewer.properties deleted file mode 100644 index 16c457cf..00000000 --- a/static/pdf.js/locale/xh/viewer.properties +++ /dev/null @@ -1,156 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=Iphepha langaphambili -previous_label=Okwangaphambili -next.title=Iphepha elilandelayo -next_label=Okulandelayo - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=Iphepha -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=kwali- {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} kwali {{pagesCount}}) - -zoom_out.title=Bhekelisela Kudana -zoom_out_label=Bhekelisela Kudana -zoom_in.title=Sondeza Kufuphi -zoom_in_label=Sondeza Kufuphi -zoom.title=Yandisa / Nciphisa -presentation_mode.title=Tshintshela kwimo yonikezelo -presentation_mode_label=Imo yonikezelo -open_file.title=Vula Ifayile -open_file_label=Vula -print.title=Printa -print_label=Printa - -# Secondary toolbar and context menu -tools.title=Izixhobo zemiyalelo -tools_label=Izixhobo zemiyalelo -first_page.title=Yiya kwiphepha lokuqala -first_page_label=Yiya kwiphepha lokuqala -last_page.title=Yiya kwiphepha lokugqibela -last_page_label=Yiya kwiphepha lokugqibela -page_rotate_cw.title=Jikelisa ngasekunene -page_rotate_cw_label=Jikelisa ngasekunene -page_rotate_ccw.title=Jikelisa ngasekhohlo -page_rotate_ccw_label=Jikelisa ngasekhohlo - -cursor_text_select_tool.title=Vumela iSixhobo sokuKhetha iTeksti -cursor_text_select_tool_label=ISixhobo sokuKhetha iTeksti -cursor_hand_tool.title=Yenza iSixhobo seSandla siSebenze -cursor_hand_tool_label=ISixhobo seSandla - -# Document properties dialog box -document_properties.title=Iipropati zoxwebhu… -document_properties_label=Iipropati zoxwebhu… -document_properties_file_name=Igama lefayile: -document_properties_file_size=Isayizi yefayile: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB (iibhayiti{{size_b}}) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB (iibhayithi{{size_b}}) -document_properties_title=Umxholo: -document_properties_author=Umbhali: -document_properties_subject=Umbandela: -document_properties_keywords=Amagama aphambili: -document_properties_creation_date=Umhla wokwenziwa kwayo: -document_properties_modification_date=Umhla wokulungiswa kwayo: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=Umntu oyenzileyo: -document_properties_producer=Umvelisi we-PDF: -document_properties_version=Uhlelo lwe-PDF: -document_properties_page_count=Inani lamaphepha: -document_properties_close=Vala - -print_progress_message=Ilungisa uxwebhu ukuze iprinte… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=Rhoxisa - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=Togola ngebha eseCaleni -toggle_sidebar_label=Togola ngebha eseCaleni -document_outline.title=Bonisa uLwandlalo loXwebhu (cofa kabini ukuze wandise/diliza zonke izinto) -document_outline_label=Isishwankathelo soxwebhu -attachments.title=Bonisa iziqhotyoshelwa -attachments_label=Iziqhoboshelo -thumbs.title=Bonisa ukrobiso kumfanekiso -thumbs_label=Ukrobiso kumfanekiso -findbar.title=Fumana kuXwebhu -findbar_label=Fumana - -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=Iphepha {{page}} -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=Ukrobiso kumfanekiso wephepha {{page}} - -# Find panel button title and messages -find_input.title=Fumana -find_input.placeholder=Fumana kuXwebhu… -find_previous.title=Fumanisa isenzeko sangaphambili sebinzana lamagama -find_previous_label=Okwangaphambili -find_next.title=Fumanisa isenzeko esilandelayo sebinzana lamagama -find_next_label=Okulandelayo -find_highlight=Qaqambisa konke -find_match_case_label=Tshatisa ngobukhulu bukanobumba -find_reached_top=Ufike ngaphezulu ephepheni, kusukwa ngezantsi -find_reached_bottom=Ufike ekupheleni kwephepha, kusukwa ngaphezulu -find_not_found=Ibinzana alifunyenwanga - -# Predefined zoom values -page_scale_width=Ububanzi bephepha -page_scale_fit=Ukulinganiswa kwephepha -page_scale_auto=Ukwandisa/Ukunciphisa Ngokwayo -page_scale_actual=Ubungakanani bokwenene -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -loading_error=Imposiso yenzekile xa kulayishwa i-PDF. -invalid_file_error=Ifayile ye-PDF engeyiyo okanye eyonakalisiweyo. -missing_file_error=Ifayile ye-PDF edukileyo. -unexpected_response_error=Impendulo yeseva engalindelekanga. - -rendering_error=Imposiso yenzekile xa bekunikezelwa iphepha. - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} Ubhalo-nqaku] -password_label=Faka ipasiwedi ukuze uvule le fayile yePDF. -password_invalid=Ipasiwedi ayisebenzi. Nceda uzame kwakhona. -password_ok=KULUNGILE -password_cancel=Rhoxisa - -printing_not_supported=Isilumkiso: Ukuprinta akuxhaswa ngokupheleleyo yile bhrawuza. -printing_not_ready=Isilumkiso: IPDF ayihlohlwanga ngokupheleleyo ukwenzela ukuprinta. -web_fonts_disabled=Iifonti zewebhu ziqhwalelisiwe: ayikwazi ukusebenzisa iifonti ze-PDF ezincanyathelisiweyo. - diff --git a/static/pdf.js/locale/zh-CN/viewer.ftl b/static/pdf.js/locale/zh-CN/viewer.ftl new file mode 100644 index 00000000..d653d5c2 --- /dev/null +++ b/static/pdf.js/locale/zh-CN/viewer.ftl @@ -0,0 +1,388 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = 切换到演示模式 +pdfjs-presentation-mode-button-label = 演示模式 +pdfjs-open-file-button = + .title = 打开文件 +pdfjs-open-file-button-label = 打开 +pdfjs-print-button = + .title = 打印 +pdfjs-print-button-label = 打印 +pdfjs-save-button = + .title = 保存 +pdfjs-save-button-label = 保存 +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = 下载 +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = 下载 +pdfjs-bookmark-button = + .title = 当前页面(在当前页面查看 URL) +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 = 平铺滚动 +pdfjs-spread-none-button = + .title = 不加入衔接页 +pdfjs-spread-none-button-label = 单页视图 +pdfjs-spread-odd-button = + .title = 加入衔接页使奇数页作为起始页 +pdfjs-spread-odd-button-label = 双页视图 +pdfjs-spread-even-button = + .title = 加入衔接页使偶数页作为起始页 +pdfjs-spread-even-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 = 文件大小: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } 字节) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } 字节) +pdfjs-document-properties-title = 标题: +pdfjs-document-properties-author = 作者: +pdfjs-document-properties-subject = 主题: +pdfjs-document-properties-keywords = 关键词: +pdfjs-document-properties-creation-date = 创建日期: +pdfjs-document-properties-modification-date = 修改日期: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date }, { $time } +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 = 纵向 +pdfjs-document-properties-page-size-orientation-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 = Letter +pdfjs-document-properties-page-size-name-legal = 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 = 快速 Web 视图: +pdfjs-document-properties-linearized-yes = 是 +pdfjs-document-properties-linearized-no = 否 +pdfjs-document-properties-close-button = 关闭 + +## Print + +pdfjs-print-progress-message = 正在准备打印文档… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = 取消 +pdfjs-printing-not-supported = 警告:此浏览器尚未完整支持打印功能。 +pdfjs-printing-not-ready = 警告:此 PDF 未完成加载,无法打印。 + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = 切换侧栏 +pdfjs-toggle-sidebar-notification-button = + .title = 切换侧栏(文档所含的大纲/附件/图层) +pdfjs-toggle-sidebar-button-label = 切换侧栏 +pdfjs-document-outline-button = + .title = 显示文档大纲(双击展开/折叠所有项) +pdfjs-document-outline-button-label = 文档大纲 +pdfjs-attachments-button = + .title = 显示附件 +pdfjs-attachments-button-label = 附件 +pdfjs-layers-button = + .title = 显示图层(双击即可将所有图层重置为默认状态) +pdfjs-layers-button-label = 图层 +pdfjs-thumbs-button = + .title = 显示缩略图 +pdfjs-thumbs-button-label = 缩略图 +pdfjs-current-outline-item-button = + .title = 查找当前大纲项目 +pdfjs-current-outline-item-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 } 页 +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = 页面 { $page } 的缩略图 + +## Find panel button title and messages + +pdfjs-find-input = + .title = 查找 + .placeholder = 在文档中查找… +pdfjs-find-previous-button = + .title = 查找词语上一次出现的位置 +pdfjs-find-previous-button-label = 上一页 +pdfjs-find-next-button = + .title = 查找词语后一次出现的位置 +pdfjs-find-next-button-label = 下一页 +pdfjs-find-highlight-checkbox = 全部高亮显示 +pdfjs-find-match-case-checkbox-label = 区分大小写 +pdfjs-find-match-diacritics-checkbox-label = 匹配变音符号 +pdfjs-find-entire-word-checkbox-label = 全词匹配 +pdfjs-find-reached-top = 到达文档开头,从末尾继续 +pdfjs-find-reached-bottom = 到达文档末尾,从开头继续 +# 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 = 第 { $current } 项,共找到 { $total } 个匹配项 +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = 匹配超过 { $limit } 项 +pdfjs-find-not-found = 找不到指定词语 + +## 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 } 页 + +## Loading indicator messages + +pdfjs-loading-error = 加载 PDF 时发生错误。 +pdfjs-invalid-file-error = 无效或损坏的 PDF 文件。 +pdfjs-missing-file-error = 缺少 PDF 文件。 +pdfjs-unexpected-response-error = 意外的服务器响应。 +pdfjs-rendering-error = 渲染页面时发生错误。 + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date },{ $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } 注释] + +## Password + +pdfjs-password-label = 输入密码以打开此 PDF 文件。 +pdfjs-password-invalid = 密码无效。请重试。 +pdfjs-password-ok-button = 确定 +pdfjs-password-cancel-button = 取消 +pdfjs-web-fonts-disabled = Web 字体已被禁用:无法使用嵌入的 PDF 字体。 + +## Editing + +pdfjs-editor-free-text-button = + .title = 文本 +pdfjs-editor-free-text-button-label = 文本 +pdfjs-editor-ink-button = + .title = 绘图 +pdfjs-editor-ink-button-label = 绘图 +pdfjs-editor-stamp-button = + .title = 添加或编辑图像 +pdfjs-editor-stamp-button-label = 添加或编辑图像 +pdfjs-editor-highlight-button = + .title = 高亮 +pdfjs-editor-highlight-button-label = 高亮 +pdfjs-highlight-floating-button = + .title = 高亮 +pdfjs-highlight-floating-button1 = + .title = 高亮 + .aria-label = 高亮 +pdfjs-highlight-floating-button-label = 高亮 + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = 移除绘图 +pdfjs-editor-remove-freetext-button = + .title = 移除文本 +pdfjs-editor-remove-stamp-button = + .title = 移除图像 +pdfjs-editor-remove-highlight-button = + .title = 移除高亮 + +## + +# 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 = 不透明度 +pdfjs-editor-stamp-add-image-button = + .title = 添加图像 +pdfjs-editor-stamp-add-image-button-label = 添加图像 +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = 粗细 +pdfjs-editor-free-highlight-thickness-title = + .title = 更改高亮粗细(用于文本以外项目) +pdfjs-free-text = + .aria-label = 文本编辑器 +pdfjs-free-text-default-content = 开始输入… +pdfjs-ink = + .aria-label = 绘图编辑器 +pdfjs-ink-canvas = + .aria-label = 用户创建图像 + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = 替换文字 +pdfjs-editor-alt-text-edit-button-label = 编辑替换文字 +pdfjs-editor-alt-text-dialog-label = 选择一项 +pdfjs-editor-alt-text-dialog-description = 替换文字可在用户无法看到或加载图像时,描述其内容。 +pdfjs-editor-alt-text-add-description-label = 添加描述 +pdfjs-editor-alt-text-add-description-description = 描述主题、背景或动作,长度尽量控制在两句话内。 +pdfjs-editor-alt-text-mark-decorative-label = 标记为装饰 +pdfjs-editor-alt-text-mark-decorative-description = 用于装饰的图像,例如边框和水印。 +pdfjs-editor-alt-text-cancel-button = 取消 +pdfjs-editor-alt-text-save-button = 保存 +pdfjs-editor-alt-text-decorative-tooltip = 已标记为装饰 +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = 例如:一个少年坐到桌前,准备吃饭 + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = 调整尺寸 - 左上角 +pdfjs-editor-resizer-label-top-middle = 调整尺寸 - 顶部中间 +pdfjs-editor-resizer-label-top-right = 调整尺寸 - 右上角 +pdfjs-editor-resizer-label-middle-right = 调整尺寸 - 右侧中间 +pdfjs-editor-resizer-label-bottom-right = 调整尺寸 - 右下角 +pdfjs-editor-resizer-label-bottom-middle = 调整大小 - 底部中间 +pdfjs-editor-resizer-label-bottom-left = 调整尺寸 - 左下角 +pdfjs-editor-resizer-label-middle-left = 调整尺寸 - 左侧中间 + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = 高亮色 +pdfjs-editor-colorpicker-button = + .title = 更改颜色 +pdfjs-editor-colorpicker-dropdown = + .aria-label = 颜色选择 +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 = 显示全部 diff --git a/static/pdf.js/locale/zh-CN/viewer.properties b/static/pdf.js/locale/zh-CN/viewer.properties deleted file mode 100644 index 12908d19..00000000 --- a/static/pdf.js/locale/zh-CN/viewer.properties +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=上一页 -previous_label=上一页 -next.title=下一页 -next_label=下一页 - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=页面 -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=/ {{pagesCount}} -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=({{pageNumber}} / {{pagesCount}}) - -zoom_out.title=缩小 -zoom_out_label=缩小 -zoom_in.title=放大 -zoom_in_label=放大 -zoom.title=缩放 -presentation_mode.title=切换到演示模式 -presentation_mode_label=演示模式 -open_file.title=打开文件 -open_file_label=打开 -print.title=打印 -print_label=打印 -save.title=保存 -save_label=保存 -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=下载 -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=下载 -bookmark1.title=当前页面(在当前页面查看 URL) -bookmark1_label=当前页面 -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=在应用中打开 -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=在应用中打开 - -# Secondary toolbar and context menu -tools.title=工具 -tools_label=工具 -first_page.title=转到第一页 -first_page_label=转到第一页 -last_page.title=转到最后一页 -last_page_label=转到最后一页 -page_rotate_cw.title=顺时针旋转 -page_rotate_cw_label=顺时针旋转 -page_rotate_ccw.title=逆时针旋转 -page_rotate_ccw_label=逆时针旋转 - -cursor_text_select_tool.title=启用文本选择工具 -cursor_text_select_tool_label=文本选择工具 -cursor_hand_tool.title=启用手形工具 -cursor_hand_tool_label=手形工具 - -scroll_page.title=使用页面滚动 -scroll_page_label=页面滚动 -scroll_vertical.title=使用垂直滚动 -scroll_vertical_label=垂直滚动 -scroll_horizontal.title=使用水平滚动 -scroll_horizontal_label=水平滚动 -scroll_wrapped.title=使用平铺滚动 -scroll_wrapped_label=平铺滚动 - -spread_none.title=不加入衔接页 -spread_none_label=单页视图 -spread_odd.title=加入衔接页使奇数页作为起始页 -spread_odd_label=双页视图 -spread_even.title=加入衔接页使偶数页作为起始页 -spread_even_label=书籍视图 - -# Document properties dialog box -document_properties.title=文档属性… -document_properties_label=文档属性… -document_properties_file_name=文件名: -document_properties_file_size=文件大小: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB ({{size_b}} 字节) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB ({{size_b}} 字节) -document_properties_title=标题: -document_properties_author=作者: -document_properties_subject=主题: -document_properties_keywords=关键词: -document_properties_creation_date=创建日期: -document_properties_modification_date=修改日期: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}}, {{time}} -document_properties_creator=创建者: -document_properties_producer=PDF 生成器: -document_properties_version=PDF 版本: -document_properties_page_count=页数: -document_properties_page_size=页面大小: -document_properties_page_size_unit_inches=英寸 -document_properties_page_size_unit_millimeters=毫米 -document_properties_page_size_orientation_portrait=纵向 -document_properties_page_size_orientation_landscape=横向 -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=文本 -document_properties_page_size_name_legal=法律 -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}({{name}},{{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=快速 Web 视图: -document_properties_linearized_yes=是 -document_properties_linearized_no=否 -document_properties_close=关闭 - -print_progress_message=正在准备打印文档… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=取消 - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=切换侧栏 -toggle_sidebar_notification2.title=切换侧栏(文档所含的大纲/附件/图层) -toggle_sidebar_label=切换侧栏 -document_outline.title=显示文档大纲(双击展开/折叠所有项) -document_outline_label=文档大纲 -attachments.title=显示附件 -attachments_label=附件 -layers.title=显示图层(双击即可将所有图层重置为默认状态) -layers_label=图层 -thumbs.title=显示缩略图 -thumbs_label=缩略图 -current_outline_item.title=查找当前大纲项目 -current_outline_item_label=当前大纲项目 -findbar.title=在文档中查找 -findbar_label=查找 - -additional_layers=其他图层 -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=第 {{page}} 页 -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=第 {{page}} 页 -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=页面 {{page}} 的缩略图 - -# Find panel button title and messages -find_input.title=查找 -find_input.placeholder=在文档中查找… -find_previous.title=查找词语上一次出现的位置 -find_previous_label=上一页 -find_next.title=查找词语后一次出现的位置 -find_next_label=下一页 -find_highlight=全部高亮显示 -find_match_case_label=区分大小写 -find_match_diacritics_label=匹配变音符号 -find_entire_word_label=全词匹配 -find_reached_top=到达文档开头,从末尾继续 -find_reached_bottom=到达文档末尾,从开头继续 -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]=第 {{current}} 项,共匹配 {{total}} 项 -find_match_count[two]=第 {{current}} 项,共匹配 {{total}} 项 -find_match_count[few]=第 {{current}} 项,共匹配 {{total}} 项 -find_match_count[many]=第 {{current}} 项,共匹配 {{total}} 项 -find_match_count[other]=第 {{current}} 项,共匹配 {{total}} 项 -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=超过 {{limit}} 项匹配 -find_match_count_limit[one]=超过 {{limit}} 项匹配 -find_match_count_limit[two]=超过 {{limit}} 项匹配 -find_match_count_limit[few]=超过 {{limit}} 项匹配 -find_match_count_limit[many]=超过 {{limit}} 项匹配 -find_match_count_limit[other]=超过 {{limit}} 项匹配 -find_not_found=找不到指定词语 - -# Predefined zoom values -page_scale_width=适合页宽 -page_scale_fit=适合页面 -page_scale_auto=自动缩放 -page_scale_actual=实际大小 -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=加载 PDF 时发生错误。 -invalid_file_error=无效或损坏的 PDF 文件。 -missing_file_error=缺少 PDF 文件。 -unexpected_response_error=意外的服务器响应。 -rendering_error=渲染页面时发生错误。 - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}},{{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} 注释] -password_label=输入密码以打开此 PDF 文件。 -password_invalid=密码无效。请重试。 -password_ok=确定 -password_cancel=取消 - -printing_not_supported=警告:此浏览器尚未完整支持打印功能。 -printing_not_ready=警告:此 PDF 未完成加载,无法打印。 -web_fonts_disabled=Web 字体已被禁用:无法使用嵌入的 PDF 字体。 - -# Editor -editor_free_text2.title=文本 -editor_free_text2_label=文本 -editor_ink2.title=绘图 -editor_ink2_label=绘图 - -editor_stamp1.title=添加或编辑图像 -editor_stamp1_label=添加或编辑图像 - -free_text2_default_content=开始输入… - -# Editor Parameters -editor_free_text_color=颜色 -editor_free_text_size=字号 -editor_ink_color=颜色 -editor_ink_thickness=粗细 -editor_ink_opacity=不透明度 - -editor_stamp_add_image_label=添加图像 -editor_stamp_add_image.title=添加图像 - -# Editor aria -editor_free_text2_aria_label=文本编辑器 -editor_ink2_aria_label=绘图编辑器 -editor_ink_canvas_aria_label=用户创建图像 - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=替换文字 -editor_alt_text_edit_button_label=编辑替换文字 -editor_alt_text_dialog_label=选择一个选项 -editor_alt_text_dialog_description=替换文字可在用户无法看到或加载图像时,描述其内容。 -editor_alt_text_add_description_label=添加描述 -editor_alt_text_add_description_description=描述主题、背景或动作,长度尽量控制在两句话内。 -editor_alt_text_mark_decorative_label=标记为装饰 -editor_alt_text_mark_decorative_description=用于装饰性图像,例如边框和水印。 -editor_alt_text_cancel_button=取消 -editor_alt_text_save_button=保存 -editor_alt_text_decorative_tooltip=已标记为装饰 -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=例如:一个少年坐到桌前,准备吃饭 diff --git a/static/pdf.js/locale/zh-TW/viewer.ftl b/static/pdf.js/locale/zh-TW/viewer.ftl new file mode 100644 index 00000000..f8614a9f --- /dev/null +++ b/static/pdf.js/locale/zh-TW/viewer.ftl @@ -0,0 +1,394 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## 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-presentation-mode-button = + .title = 切換至簡報模式 +pdfjs-presentation-mode-button-label = 簡報模式 +pdfjs-open-file-button = + .title = 開啟檔案 +pdfjs-open-file-button-label = 開啟 +pdfjs-print-button = + .title = 列印 +pdfjs-print-button-label = 列印 +pdfjs-save-button = + .title = 儲存 +pdfjs-save-button-label = 儲存 +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = 下載 +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = 下載 +pdfjs-bookmark-button = + .title = 目前頁面(含目前檢視頁面的網址) +pdfjs-bookmark-button-label = 目前頁面 +# Used in Firefox for Android. +pdfjs-open-in-app-button = + .title = 在應用程式中開啟 +# Used in Firefox for Android. +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-open-in-app-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 = 多頁捲動 +pdfjs-spread-none-button = + .title = 不要進行跨頁顯示 +pdfjs-spread-none-button-label = 不跨頁 +pdfjs-spread-odd-button = + .title = 從奇數頁開始跨頁 +pdfjs-spread-odd-button-label = 奇數跨頁 +pdfjs-spread-even-button = + .title = 從偶數頁開始跨頁 +pdfjs-spread-even-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 = 檔案大小: +# Variables: +# $size_kb (Number) - the PDF file size in kilobytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-kb = { $size_kb } KB({ $size_b } 位元組) +# Variables: +# $size_mb (Number) - the PDF file size in megabytes +# $size_b (Number) - the PDF file size in bytes +pdfjs-document-properties-mb = { $size_mb } MB({ $size_b } 位元組) +pdfjs-document-properties-title = 標題: +pdfjs-document-properties-author = 作者: +pdfjs-document-properties-subject = 主旨: +pdfjs-document-properties-keywords = 關鍵字: +pdfjs-document-properties-creation-date = 建立日期: +pdfjs-document-properties-modification-date = 修改日期: +# Variables: +# $date (Date) - the creation/modification date of the PDF file +# $time (Time) - the creation/modification time of the PDF file +pdfjs-document-properties-date-string = { $date } { $time } +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 = in +pdfjs-document-properties-page-size-unit-millimeters = mm +pdfjs-document-properties-page-size-orientation-portrait = 垂直 +pdfjs-document-properties-page-size-orientation-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 = Letter +pdfjs-document-properties-page-size-name-legal = 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 = 快速 Web 檢視: +pdfjs-document-properties-linearized-yes = 是 +pdfjs-document-properties-linearized-no = 否 +pdfjs-document-properties-close-button = 關閉 + +## Print + +pdfjs-print-progress-message = 正在準備列印文件… +# Variables: +# $progress (Number) - percent value +pdfjs-print-progress-percent = { $progress }% +pdfjs-print-progress-close-button = 取消 +pdfjs-printing-not-supported = 警告: 此瀏覽器未完整支援列印功能。 +pdfjs-printing-not-ready = 警告: 此 PDF 未完成下載以供列印。 + +## Tooltips and alt text for side panel toolbar buttons + +pdfjs-toggle-sidebar-button = + .title = 切換側邊欄 +pdfjs-toggle-sidebar-notification-button = + .title = 切換側邊欄(包含大綱、附件、圖層的文件) +pdfjs-toggle-sidebar-button-label = 切換側邊欄 +pdfjs-document-outline-button = + .title = 顯示文件大綱(雙擊展開/摺疊所有項目) +pdfjs-document-outline-button-label = 文件大綱 +pdfjs-attachments-button = + .title = 顯示附件 +pdfjs-attachments-button-label = 附件 +pdfjs-layers-button = + .title = 顯示圖層(滑鼠雙擊即可將所有圖層重設為預設狀態) +pdfjs-layers-button-label = 圖層 +pdfjs-thumbs-button = + .title = 顯示縮圖 +pdfjs-thumbs-button-label = 縮圖 +pdfjs-current-outline-item-button = + .title = 尋找目前的大綱項目 +pdfjs-current-outline-item-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 } 頁 +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-canvas = + .aria-label = 第 { $page } 頁的縮圖 + +## Find panel button title and messages + +pdfjs-find-input = + .title = 尋找 + .placeholder = 在文件中搜尋… +pdfjs-find-previous-button = + .title = 尋找文字前次出現的位置 +pdfjs-find-previous-button-label = 上一個 +pdfjs-find-next-button = + .title = 尋找文字下次出現的位置 +pdfjs-find-next-button-label = 下一個 +pdfjs-find-highlight-checkbox = 強調全部 +pdfjs-find-match-case-checkbox-label = 區分大小寫 +pdfjs-find-match-diacritics-checkbox-label = 符合變音符號 +pdfjs-find-entire-word-checkbox-label = 符合整個字 +pdfjs-find-reached-top = 已搜尋至文件頂端,自底端繼續搜尋 +pdfjs-find-reached-bottom = 已搜尋至文件底端,自頂端繼續搜尋 +# 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 = 第 { $current } 筆符合,共符合 { $total } 筆 +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = 符合超過 { $limit } 項 +pdfjs-find-not-found = 找不到指定文字 + +## 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 } 頁 + +## Loading indicator messages + +pdfjs-loading-error = 載入 PDF 時發生錯誤。 +pdfjs-invalid-file-error = 無效或毀損的 PDF 檔案。 +pdfjs-missing-file-error = 找不到 PDF 檔案。 +pdfjs-unexpected-response-error = 伺服器回應未預期的內容。 +pdfjs-rendering-error = 描繪頁面時發生錯誤。 + +## Annotations + +# Variables: +# $date (Date) - the modification date of the annotation +# $time (Time) - the modification time of the annotation +pdfjs-annotation-date-string = { $date } { $time } +# .alt: This is used as a tooltip. +# Variables: +# $type (String) - an annotation type from a list defined in the PDF spec +# (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +pdfjs-text-annotation-type = + .alt = [{ $type } 註解] + +## Password + +pdfjs-password-label = 請輸入用來開啟此 PDF 檔案的密碼。 +pdfjs-password-invalid = 密碼不正確,請再試一次。 +pdfjs-password-ok-button = 確定 +pdfjs-password-cancel-button = 取消 +pdfjs-web-fonts-disabled = 已停用網路字型 (Web fonts): 無法使用 PDF 內嵌字型。 + +## Editing + +pdfjs-editor-free-text-button = + .title = 文字 +pdfjs-editor-free-text-button-label = 文字 +pdfjs-editor-ink-button = + .title = 繪圖 +pdfjs-editor-ink-button-label = 繪圖 +pdfjs-editor-stamp-button = + .title = 新增或編輯圖片 +pdfjs-editor-stamp-button-label = 新增或編輯圖片 +pdfjs-editor-highlight-button = + .title = 強調 +pdfjs-editor-highlight-button-label = 強調 +pdfjs-highlight-floating-button = + .title = 強調 +pdfjs-highlight-floating-button1 = + .title = 強調 + .aria-label = 強調 +pdfjs-highlight-floating-button-label = 強調 + +## Remove button for the various kind of editor. + +pdfjs-editor-remove-ink-button = + .title = 移除繪圖 +pdfjs-editor-remove-freetext-button = + .title = 移除文字 +pdfjs-editor-remove-stamp-button = + .title = 移除圖片 +pdfjs-editor-remove-highlight-button = + .title = 移除強調範圍 + +## + +# 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 = 透​明度 +pdfjs-editor-stamp-add-image-button = + .title = 新增圖片 +pdfjs-editor-stamp-add-image-button-label = 新增圖片 +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = 線條粗細 +pdfjs-editor-free-highlight-thickness-title = + .title = 更改強調文字以外的項目時的線條粗細 +pdfjs-free-text = + .aria-label = 文本編輯器 +pdfjs-free-text-default-content = 開始打字… +pdfjs-ink = + .aria-label = 圖形編輯器 +pdfjs-ink-canvas = + .aria-label = 使用者建立的圖片 + +## Alt-text dialog + +# Alternative text (alt text) helps when people can't see the image. +pdfjs-editor-alt-text-button-label = 替代文字 +pdfjs-editor-alt-text-edit-button-label = 編輯替代文字 +pdfjs-editor-alt-text-dialog-label = 挑選一種 +pdfjs-editor-alt-text-dialog-description = 替代文字可協助盲人,或於圖片無法載入時提供說明。 +pdfjs-editor-alt-text-add-description-label = 新增描述 +pdfjs-editor-alt-text-add-description-description = 用 1-2 句文字描述主題、背景或動作。 +pdfjs-editor-alt-text-mark-decorative-label = 標示為裝飾性內容 +pdfjs-editor-alt-text-mark-decorative-description = 這是裝飾性圖片,例如邊框或浮水印。 +pdfjs-editor-alt-text-cancel-button = 取消 +pdfjs-editor-alt-text-save-button = 儲存 +pdfjs-editor-alt-text-decorative-tooltip = 已標示為裝飾性內容 +# .placeholder: This is a placeholder for the alt text input area +pdfjs-editor-alt-text-textarea = + .placeholder = 例如:「有一位年輕男人坐在桌子前面吃飯」 + +## Editor resizers +## This is used in an aria label to help to understand the role of the resizer. + +pdfjs-editor-resizer-label-top-left = 左上角 — 調整大小 +pdfjs-editor-resizer-label-top-middle = 頂部中間 — 調整大小 +pdfjs-editor-resizer-label-top-right = 右上角 — 調整大小 +pdfjs-editor-resizer-label-middle-right = 中間右方 — 調整大小 +pdfjs-editor-resizer-label-bottom-right = 右下角 — 調整大小 +pdfjs-editor-resizer-label-bottom-middle = 底部中間 — 調整大小 +pdfjs-editor-resizer-label-bottom-left = 左下角 — 調整大小 +pdfjs-editor-resizer-label-middle-left = 中間左方 — 調整大小 + +## Color picker + +# This means "Color used to highlight text" +pdfjs-editor-highlight-colorpicker-label = 強調色彩 +pdfjs-editor-colorpicker-button = + .title = 更改色彩 +pdfjs-editor-colorpicker-dropdown = + .aria-label = 色彩選項 +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 = 顯示全部 diff --git a/static/pdf.js/locale/zh-TW/viewer.properties b/static/pdf.js/locale/zh-TW/viewer.properties deleted file mode 100644 index 56cf24c9..00000000 --- a/static/pdf.js/locale/zh-TW/viewer.properties +++ /dev/null @@ -1,281 +0,0 @@ -# Copyright 2012 Mozilla Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Main toolbar buttons (tooltips and alt text for images) -previous.title=上一頁 -previous_label=上一頁 -next.title=下一頁 -next_label=下一頁 - -# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. -page.title=第 -# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number -# representing the total number of pages in the document. -of_pages=頁,共 {{pagesCount}} 頁 -# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" -# will be replaced by a number representing the currently visible page, -# respectively a number representing the total number of pages in the document. -page_of_pages=(第 {{pageNumber}} 頁,共 {{pagesCount}} 頁) - -zoom_out.title=縮小 -zoom_out_label=縮小 -zoom_in.title=放大 -zoom_in_label=放大 -zoom.title=縮放 -presentation_mode.title=切換至簡報模式 -presentation_mode_label=簡報模式 -open_file.title=開啟檔案 -open_file_label=開啟 -print.title=列印 -print_label=列印 -save.title=儲存 -save_label=儲存 -# LOCALIZATION NOTE (download_button.title): used in Firefox for Android as a tooltip for the download button (“download” is a verb). -download_button.title=下載 -# LOCALIZATION NOTE (download_button_label): 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. -download_button_label=下載 -bookmark1.title=目前頁面(含目前檢視頁面的網址) -bookmark1_label=目前頁面 -# LOCALIZATION NOTE (open_in_app.title): This string is used in Firefox for Android. -open_in_app.title=在應用程式中開啟 -# LOCALIZATION NOTE (open_in_app_label): This string is used in Firefox for Android. Length of the translation matters since we are in a mobile context, with limited screen estate. -open_in_app_label=用程式開啟 - -# Secondary toolbar and context menu -tools.title=工具 -tools_label=工具 -first_page.title=跳到第一頁 -first_page_label=跳到第一頁 -last_page.title=跳到最後一頁 -last_page_label=跳到最後一頁 -page_rotate_cw.title=順時針旋轉 -page_rotate_cw_label=順時針旋轉 -page_rotate_ccw.title=逆時針旋轉 -page_rotate_ccw_label=逆時針旋轉 - -cursor_text_select_tool.title=開啟文字選擇工具 -cursor_text_select_tool_label=文字選擇工具 -cursor_hand_tool.title=開啟頁面移動工具 -cursor_hand_tool_label=頁面移動工具 - -scroll_page.title=使用頁面捲動功能 -scroll_page_label=頁面捲動功能 -scroll_vertical.title=使用垂直捲動版面 -scroll_vertical_label=垂直捲動 -scroll_horizontal.title=使用水平捲動版面 -scroll_horizontal_label=水平捲動 -scroll_wrapped.title=使用多頁捲動版面 -scroll_wrapped_label=多頁捲動 - -spread_none.title=不要進行跨頁顯示 -spread_none_label=不跨頁 -spread_odd.title=從奇數頁開始跨頁 -spread_odd_label=奇數跨頁 -spread_even.title=從偶數頁開始跨頁 -spread_even_label=偶數跨頁 - -# Document properties dialog box -document_properties.title=文件內容… -document_properties_label=文件內容… -document_properties_file_name=檔案名稱: -document_properties_file_size=檔案大小: -# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" -# will be replaced by the PDF file size in kilobytes, respectively in bytes. -document_properties_kb={{size_kb}} KB({{size_b}} 位元組) -# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" -# will be replaced by the PDF file size in megabytes, respectively in bytes. -document_properties_mb={{size_mb}} MB({{size_b}} 位元組) -document_properties_title=標題: -document_properties_author=作者: -document_properties_subject=主旨: -document_properties_keywords=關鍵字: -document_properties_creation_date=建立日期: -document_properties_modification_date=修改日期: -# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" -# will be replaced by the creation/modification date, and time, of the PDF file. -document_properties_date_string={{date}} {{time}} -document_properties_creator=建立者: -document_properties_producer=PDF 產生器: -document_properties_version=PDF 版本: -document_properties_page_count=頁數: -document_properties_page_size=頁面大小: -document_properties_page_size_unit_inches=in -document_properties_page_size_unit_millimeters=mm -document_properties_page_size_orientation_portrait=垂直 -document_properties_page_size_orientation_landscape=水平 -document_properties_page_size_name_a3=A3 -document_properties_page_size_name_a4=A4 -document_properties_page_size_name_letter=Letter -document_properties_page_size_name_legal=Legal -# LOCALIZATION NOTE (document_properties_page_size_dimension_string): -# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement and orientation, of the (current) page. -document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}({{orientation}}) -# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): -# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by -# the size, respectively their unit of measurement, name, and orientation, of the (current) page. -document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}({{name}},{{orientation}}) -# LOCALIZATION NOTE (document_properties_linearized): The linearization status of -# the document; usually called "Fast Web View" in English locales of Adobe software. -document_properties_linearized=快速 Web 檢視: -document_properties_linearized_yes=是 -document_properties_linearized_no=否 -document_properties_close=關閉 - -print_progress_message=正在準備列印文件… -# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by -# a numerical per cent value. -print_progress_percent={{progress}}% -print_progress_close=取消 - -# Tooltips and alt text for side panel toolbar buttons -# (the _label strings are alt text for the buttons, the .title strings are -# tooltips) -toggle_sidebar.title=切換側邊欄 -toggle_sidebar_notification2.title=切換側邊欄(包含大綱、附件、圖層的文件) -toggle_sidebar_label=切換側邊欄 -document_outline.title=顯示文件大綱(雙擊展開/摺疊所有項目) -document_outline_label=文件大綱 -attachments.title=顯示附件 -attachments_label=附件 -layers.title=顯示圖層(滑鼠雙擊即可將所有圖層重設為預設狀態) -layers_label=圖層 -thumbs.title=顯示縮圖 -thumbs_label=縮圖 -current_outline_item.title=尋找目前的大綱項目 -current_outline_item_label=目前的大綱項目 -findbar.title=在文件中尋找 -findbar_label=尋找 - -additional_layers=其他圖層 -# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. -page_landmark=第 {{page}} 頁 -# Thumbnails panel item (tooltip and alt text for images) -# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page -# number. -thumb_page_title=第 {{page}} 頁 -# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page -# number. -thumb_page_canvas=第 {{page}} 頁的縮圖 - -# Find panel button title and messages -find_input.title=尋找 -find_input.placeholder=在文件中搜尋… -find_previous.title=尋找文字前次出現的位置 -find_previous_label=上一個 -find_next.title=尋找文字下次出現的位置 -find_next_label=下一個 -find_highlight=全部強調標示 -find_match_case_label=區分大小寫 -find_match_diacritics_label=符合變音符號 -find_entire_word_label=符合整個字 -find_reached_top=已搜尋至文件頂端,自底端繼續搜尋 -find_reached_bottom=已搜尋至文件底端,自頂端繼續搜尋 -# LOCALIZATION NOTE (find_match_count): The supported plural forms are -# [one|two|few|many|other], with [other] as the default value. -# "{{current}}" and "{{total}}" will be replaced by a number representing the -# index of the currently active find result, respectively a number representing -# the total number of matches in the document. -find_match_count={[ plural(total) ]} -find_match_count[one]=第 {{current}} 筆,共找到 {{total}} 筆 -find_match_count[two]=第 {{current}} 筆,共找到 {{total}} 筆 -find_match_count[few]=第 {{current}} 筆,共找到 {{total}} 筆 -find_match_count[many]=第 {{current}} 筆,共找到 {{total}} 筆 -find_match_count[other]=第 {{current}} 筆,共找到 {{total}} 筆 -# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are -# [zero|one|two|few|many|other], with [other] as the default value. -# "{{limit}}" will be replaced by a numerical value. -find_match_count_limit={[ plural(limit) ]} -find_match_count_limit[zero]=找到超過 {{limit}} 筆 -find_match_count_limit[one]=找到超過 {{limit}} 筆 -find_match_count_limit[two]=找到超過 {{limit}} 筆 -find_match_count_limit[few]=找到超過 {{limit}} 筆 -find_match_count_limit[many]=找到超過 {{limit}} 筆 -find_match_count_limit[other]=找到超過 {{limit}} 筆 -find_not_found=找不到指定文字 - -# Predefined zoom values -page_scale_width=頁面寬度 -page_scale_fit=縮放至頁面大小 -page_scale_auto=自動縮放 -page_scale_actual=實際大小 -# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a -# numerical scale value. -page_scale_percent={{scale}}% - -# Loading indicator messages -loading_error=載入 PDF 時發生錯誤。 -invalid_file_error=無效或毀損的 PDF 檔案。 -missing_file_error=找不到 PDF 檔案。 -unexpected_response_error=伺服器回應未預期的內容。 -rendering_error=描繪頁面時發生錯誤。 - -# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be -# replaced by the modification date, and time, of the annotation. -annotation_date_string={{date}} {{time}} - -# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. -# "{{type}}" will be replaced with an annotation type from a list defined in -# the PDF spec (32000-1:2008 Table 169 – Annotation types). -# Some common types are e.g.: "Check", "Text", "Comment", "Note" -text_annotation_type.alt=[{{type}} 註解] -password_label=請輸入用來開啟此 PDF 檔案的密碼。 -password_invalid=密碼不正確,請再試一次。 -password_ok=確定 -password_cancel=取消 - -printing_not_supported=警告: 此瀏覽器未完整支援列印功能。 -printing_not_ready=警告: 此 PDF 未完成下載以供列印。 -web_fonts_disabled=已停用網路字型 (Web fonts): 無法使用 PDF 內嵌字型。 - -# Editor -editor_free_text2.title=文字 -editor_free_text2_label=文字 -editor_ink2.title=繪圖 -editor_ink2_label=繪圖 - -editor_stamp1.title=新增或編輯圖片 -editor_stamp1_label=新增或編輯圖片 - -free_text2_default_content=開始打字… - -# Editor Parameters -editor_free_text_color=色彩 -editor_free_text_size=大小 -editor_ink_color=色彩 -editor_ink_thickness=線條粗細 -editor_ink_opacity=透​明度 - -editor_stamp_add_image_label=新增圖片 -editor_stamp_add_image.title=新增圖片 - -# Editor aria -editor_free_text2_aria_label=文本編輯器 -editor_ink2_aria_label=圖形編輯器 -editor_ink_canvas_aria_label=使用者建立的圖片 - -# Alt-text dialog -# LOCALIZATION NOTE (editor_alt_text_button_label): Alternative text (alt text) helps -# when people can't see the image. -editor_alt_text_button_label=替代文字 -editor_alt_text_edit_button_label=編輯替代文字 -editor_alt_text_dialog_label=挑選一種 -editor_alt_text_dialog_description=替代文字可協助盲人,或於圖片無法載入時提供說明。 -editor_alt_text_add_description_label=新增描述 -editor_alt_text_add_description_description=用 1-2 句文字描述主題、背景或動作。 -editor_alt_text_cancel_button=取消 -editor_alt_text_save_button=儲存 -# This is a placeholder for the alt text input area -editor_alt_text_textarea.placeholder=例如:「有一位年輕男人坐在桌子前面吃飯」 diff --git a/static/pdf.js/pdf.js b/static/pdf.js/pdf.mjs similarity index 69% rename from static/pdf.js/pdf.js rename to static/pdf.js/pdf.mjs index e78325d1..a84a1910 100644 --- a/static/pdf.js/pdf.js +++ b/static/pdf.js/pdf.mjs @@ -20,59 +20,89 @@ * JavaScript code in this page */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = root.pdfjsLib = factory(); - else if(typeof define === 'function' && define.amd) - define("pdfjs-dist/build/pdf", [], () => { return (root.pdfjsLib = factory()); }); - else if(typeof exports === 'object') - exports["pdfjs-dist/build/pdf"] = root.pdfjsLib = factory(); - else - root["pdfjs-dist/build/pdf"] = root.pdfjsLib = factory(); -})(globalThis, () => { -return /******/ (() => { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ([ -/* 0 */, -/* 1 */ -/***/ ((__unused_webpack_module, exports) => { +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = globalThis.pdfjsLib = {}; +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + AbortException: () => (/* reexport */ AbortException), + AnnotationEditorLayer: () => (/* reexport */ AnnotationEditorLayer), + AnnotationEditorParamsType: () => (/* reexport */ AnnotationEditorParamsType), + AnnotationEditorType: () => (/* reexport */ AnnotationEditorType), + AnnotationEditorUIManager: () => (/* reexport */ AnnotationEditorUIManager), + AnnotationLayer: () => (/* reexport */ AnnotationLayer), + AnnotationMode: () => (/* reexport */ AnnotationMode), + CMapCompressionType: () => (/* reexport */ CMapCompressionType), + ColorPicker: () => (/* reexport */ ColorPicker), + DOMSVGFactory: () => (/* reexport */ DOMSVGFactory), + DrawLayer: () => (/* reexport */ DrawLayer), + FeatureTest: () => (/* reexport */ util_FeatureTest), + GlobalWorkerOptions: () => (/* reexport */ GlobalWorkerOptions), + ImageKind: () => (/* reexport */ util_ImageKind), + InvalidPDFException: () => (/* reexport */ InvalidPDFException), + MissingPDFException: () => (/* reexport */ MissingPDFException), + OPS: () => (/* reexport */ OPS), + Outliner: () => (/* reexport */ Outliner), + PDFDataRangeTransport: () => (/* reexport */ PDFDataRangeTransport), + PDFDateString: () => (/* reexport */ PDFDateString), + PDFWorker: () => (/* reexport */ PDFWorker), + PasswordResponses: () => (/* reexport */ PasswordResponses), + PermissionFlag: () => (/* reexport */ PermissionFlag), + PixelsPerInch: () => (/* reexport */ PixelsPerInch), + RenderingCancelledException: () => (/* reexport */ RenderingCancelledException), + TextLayer: () => (/* reexport */ TextLayer), + UnexpectedResponseException: () => (/* reexport */ UnexpectedResponseException), + Util: () => (/* reexport */ Util), + VerbosityLevel: () => (/* reexport */ VerbosityLevel), + XfaLayer: () => (/* reexport */ XfaLayer), + build: () => (/* reexport */ build), + createValidAbsoluteUrl: () => (/* reexport */ createValidAbsoluteUrl), + fetchData: () => (/* reexport */ fetchData), + getDocument: () => (/* reexport */ getDocument), + getFilenameFromUrl: () => (/* reexport */ getFilenameFromUrl), + getPdfFilenameFromUrl: () => (/* reexport */ getPdfFilenameFromUrl), + getXfaPageViewport: () => (/* reexport */ getXfaPageViewport), + isDataScheme: () => (/* reexport */ isDataScheme), + isPdfFile: () => (/* reexport */ isPdfFile), + noContextMenu: () => (/* reexport */ noContextMenu), + normalizeUnicode: () => (/* reexport */ normalizeUnicode), + renderTextLayer: () => (/* reexport */ renderTextLayer), + setLayerDimensions: () => (/* reexport */ setLayerDimensions), + shadow: () => (/* reexport */ shadow), + updateTextLayer: () => (/* reexport */ updateTextLayer), + version: () => (/* reexport */ version) +}); - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.RenderingIntentFlag = exports.PromiseCapability = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.MAX_IMAGE_SIZE_TO_CACHE = exports.LINE_FACTOR = exports.LINE_DESCENT_FACTOR = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FeatureTest = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.BASELINE_FACTOR = exports.AnnotationType = exports.AnnotationReplyType = exports.AnnotationPrefix = exports.AnnotationMode = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationEditorType = exports.AnnotationEditorPrefix = exports.AnnotationEditorParamsType = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0; -exports.assert = assert; -exports.bytesToString = bytesToString; -exports.createValidAbsoluteUrl = createValidAbsoluteUrl; -exports.getModificationDate = getModificationDate; -exports.getUuid = getUuid; -exports.getVerbosityLevel = getVerbosityLevel; -exports.info = info; -exports.isArrayBuffer = isArrayBuffer; -exports.isArrayEqual = isArrayEqual; -exports.isNodeJS = void 0; -exports.normalizeUnicode = normalizeUnicode; -exports.objectFromMap = objectFromMap; -exports.objectSize = objectSize; -exports.setVerbosityLevel = setVerbosityLevel; -exports.shadow = shadow; -exports.string32 = string32; -exports.stringToBytes = stringToBytes; -exports.stringToPDFString = stringToPDFString; -exports.stringToUTF8String = stringToUTF8String; -exports.unreachable = unreachable; -exports.utf8StringToString = utf8StringToString; -exports.warn = warn; -const isNodeJS = exports.isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); -const IDENTITY_MATRIX = exports.IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; -const FONT_IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; -const MAX_IMAGE_SIZE_TO_CACHE = exports.MAX_IMAGE_SIZE_TO_CACHE = 10e6; -const LINE_FACTOR = exports.LINE_FACTOR = 1.35; -const LINE_DESCENT_FACTOR = exports.LINE_DESCENT_FACTOR = 0.35; -const BASELINE_FACTOR = exports.BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR; -const RenderingIntentFlag = exports.RenderingIntentFlag = { +;// CONCATENATED MODULE: ./src/shared/util.js +const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); +const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; +const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; +const MAX_IMAGE_SIZE_TO_CACHE = 10e6; +const LINE_FACTOR = 1.35; +const LINE_DESCENT_FACTOR = 0.35; +const BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR; +const RenderingIntentFlag = { ANY: 0x01, DISPLAY: 0x02, PRINT: 0x04, @@ -82,21 +112,22 @@ const RenderingIntentFlag = exports.RenderingIntentFlag = { ANNOTATIONS_DISABLE: 0x40, OPLIST: 0x100 }; -const AnnotationMode = exports.AnnotationMode = { +const AnnotationMode = { DISABLE: 0, ENABLE: 1, ENABLE_FORMS: 2, ENABLE_STORAGE: 3 }; -const AnnotationEditorPrefix = exports.AnnotationEditorPrefix = "pdfjs_internal_editor_"; -const AnnotationEditorType = exports.AnnotationEditorType = { +const AnnotationEditorPrefix = "pdfjs_internal_editor_"; +const AnnotationEditorType = { DISABLE: -1, NONE: 0, FREETEXT: 3, + HIGHLIGHT: 9, STAMP: 13, INK: 15 }; -const AnnotationEditorParamsType = exports.AnnotationEditorParamsType = { +const AnnotationEditorParamsType = { RESIZE: 1, CREATE: 2, FREETEXT_SIZE: 11, @@ -104,9 +135,14 @@ const AnnotationEditorParamsType = exports.AnnotationEditorParamsType = { FREETEXT_OPACITY: 13, INK_COLOR: 21, INK_THICKNESS: 22, - INK_OPACITY: 23 + INK_OPACITY: 23, + HIGHLIGHT_COLOR: 31, + HIGHLIGHT_DEFAULT_COLOR: 32, + HIGHLIGHT_THICKNESS: 33, + HIGHLIGHT_FREE: 34, + HIGHLIGHT_SHOW_ALL: 35 }; -const PermissionFlag = exports.PermissionFlag = { +const PermissionFlag = { PRINT: 0x04, MODIFY_CONTENTS: 0x08, COPY: 0x10, @@ -116,7 +152,7 @@ const PermissionFlag = exports.PermissionFlag = { ASSEMBLE: 0x400, PRINT_HIGH_QUALITY: 0x800 }; -const TextRenderingMode = exports.TextRenderingMode = { +const TextRenderingMode = { FILL: 0, STROKE: 1, FILL_STROKE: 2, @@ -128,12 +164,12 @@ const TextRenderingMode = exports.TextRenderingMode = { FILL_STROKE_MASK: 3, ADD_TO_PATH_FLAG: 4 }; -const ImageKind = exports.ImageKind = { +const util_ImageKind = { GRAYSCALE_1BPP: 1, RGB_24BPP: 2, RGBA_32BPP: 3 }; -const AnnotationType = exports.AnnotationType = { +const AnnotationType = { TEXT: 1, LINK: 2, FREETEXT: 3, @@ -161,11 +197,11 @@ const AnnotationType = exports.AnnotationType = { THREED: 25, REDACT: 26 }; -const AnnotationReplyType = exports.AnnotationReplyType = { +const AnnotationReplyType = { GROUP: "Group", REPLY: "R" }; -const AnnotationFlag = exports.AnnotationFlag = { +const AnnotationFlag = { INVISIBLE: 0x01, HIDDEN: 0x02, PRINT: 0x04, @@ -177,7 +213,7 @@ const AnnotationFlag = exports.AnnotationFlag = { TOGGLENOVIEW: 0x100, LOCKEDCONTENTS: 0x200 }; -const AnnotationFieldFlag = exports.AnnotationFieldFlag = { +const AnnotationFieldFlag = { READONLY: 0x0000001, REQUIRED: 0x0000002, NOEXPORT: 0x0000004, @@ -198,14 +234,14 @@ const AnnotationFieldFlag = exports.AnnotationFieldFlag = { RADIOSINUNISON: 0x2000000, COMMITONSELCHANGE: 0x4000000 }; -const AnnotationBorderStyleType = exports.AnnotationBorderStyleType = { +const AnnotationBorderStyleType = { SOLID: 1, DASHED: 2, BEVELED: 3, INSET: 4, UNDERLINE: 5 }; -const AnnotationActionEventType = exports.AnnotationActionEventType = { +const AnnotationActionEventType = { E: "Mouse Enter", X: "Mouse Exit", D: "Mouse Down", @@ -221,27 +257,27 @@ const AnnotationActionEventType = exports.AnnotationActionEventType = { V: "Validate", C: "Calculate" }; -const DocumentActionEventType = exports.DocumentActionEventType = { +const DocumentActionEventType = { WC: "WillClose", WS: "WillSave", DS: "DidSave", WP: "WillPrint", DP: "DidPrint" }; -const PageActionEventType = exports.PageActionEventType = { +const PageActionEventType = { O: "PageOpen", C: "PageClose" }; -const VerbosityLevel = exports.VerbosityLevel = { +const VerbosityLevel = { ERRORS: 0, WARNINGS: 1, INFOS: 5 }; -const CMapCompressionType = exports.CMapCompressionType = { +const CMapCompressionType = { NONE: 0, BINARY: 1 }; -const OPS = exports.OPS = { +const OPS = { dependency: 1, setLineWidth: 2, setLineCap: 3, @@ -331,7 +367,7 @@ const OPS = exports.OPS = { paintSolidColorImageMask: 90, constructPath: 91 }; -const PasswordResponses = exports.PasswordResponses = { +const PasswordResponses = { NEED_PASSWORD: 1, INCORRECT_PASSWORD: 2 }; @@ -408,7 +444,7 @@ function shadow(obj, prop, value, nonSerializable = false) { }); return value; } -const BaseException = exports.BaseException = function BaseExceptionClosure() { +const BaseException = function BaseExceptionClosure() { function BaseException(message, name) { if (this.constructor === BaseException) { unreachable("Cannot initialize BaseException."); @@ -426,45 +462,38 @@ class PasswordException extends BaseException { this.code = code; } } -exports.PasswordException = PasswordException; class UnknownErrorException extends BaseException { constructor(msg, details) { super(msg, "UnknownErrorException"); this.details = details; } } -exports.UnknownErrorException = UnknownErrorException; class InvalidPDFException extends BaseException { constructor(msg) { super(msg, "InvalidPDFException"); } } -exports.InvalidPDFException = InvalidPDFException; class MissingPDFException extends BaseException { constructor(msg) { super(msg, "MissingPDFException"); } } -exports.MissingPDFException = MissingPDFException; class UnexpectedResponseException extends BaseException { constructor(msg, status) { super(msg, "UnexpectedResponseException"); this.status = status; } } -exports.UnexpectedResponseException = UnexpectedResponseException; class FormatError extends BaseException { constructor(msg) { super(msg, "FormatError"); } } -exports.FormatError = FormatError; class AbortException extends BaseException { constructor(msg) { super(msg, "AbortException"); } } -exports.AbortException = AbortException; function bytesToString(bytes) { if (typeof bytes !== "object" || bytes?.length === undefined) { unreachable("Invalid argument for bytesToString"); @@ -520,7 +549,7 @@ function isEvalSupported() { return false; } } -class FeatureTest { +class util_FeatureTest { static get isLittleEndian() { return shadow(this, "isLittleEndian", isLittleEndian()); } @@ -531,23 +560,20 @@ class FeatureTest { return shadow(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas !== "undefined"); } static get platform() { - if (typeof navigator === "undefined") { + if (typeof navigator !== "undefined" && typeof navigator?.platform === "string") { return shadow(this, "platform", { - isWin: false, - isMac: false + isMac: navigator.platform.includes("Mac") }); } return shadow(this, "platform", { - isWin: navigator.platform.includes("Win"), - isMac: navigator.platform.includes("Mac") + isMac: false }); } static get isCSSRoundSupported() { return shadow(this, "isCSSRoundSupported", globalThis.CSS?.supports?.("width: round(1.5px, 1px)")); } } -exports.FeatureTest = FeatureTest; -const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0")); +const hexNumbers = Array.from(Array(256).keys(), n => n.toString(16).padStart(2, "0")); class Util { static makeHexColor(r, g, b) { return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`; @@ -557,43 +583,43 @@ class Util { if (transform[0]) { if (transform[0] < 0) { temp = minMax[0]; - minMax[0] = minMax[1]; - minMax[1] = temp; + minMax[0] = minMax[2]; + minMax[2] = temp; } minMax[0] *= transform[0]; - minMax[1] *= transform[0]; + minMax[2] *= transform[0]; if (transform[3] < 0) { - temp = minMax[2]; - minMax[2] = minMax[3]; + temp = minMax[1]; + minMax[1] = minMax[3]; minMax[3] = temp; } - minMax[2] *= transform[3]; + minMax[1] *= transform[3]; minMax[3] *= transform[3]; } else { temp = minMax[0]; - minMax[0] = minMax[2]; - minMax[2] = temp; - temp = minMax[1]; - minMax[1] = minMax[3]; + minMax[0] = minMax[1]; + minMax[1] = temp; + temp = minMax[2]; + minMax[2] = minMax[3]; minMax[3] = temp; if (transform[1] < 0) { - temp = minMax[2]; - minMax[2] = minMax[3]; + temp = minMax[1]; + minMax[1] = minMax[3]; minMax[3] = temp; } - minMax[2] *= transform[1]; + minMax[1] *= transform[1]; minMax[3] *= transform[1]; if (transform[2] < 0) { temp = minMax[0]; - minMax[0] = minMax[1]; - minMax[1] = temp; + minMax[0] = minMax[2]; + minMax[2] = temp; } minMax[0] *= transform[2]; - minMax[1] *= transform[2]; + minMax[2] *= transform[2]; } minMax[0] += transform[4]; - minMax[1] += transform[4]; - minMax[2] += transform[5]; + minMax[1] += transform[5]; + minMax[2] += transform[4]; minMax[3] += transform[5]; } static transform(m1, m2) { @@ -658,70 +684,64 @@ class Util { } return [xLow, yLow, xHigh, yHigh]; } - static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) { - const tvalues = [], - bounds = [[], []]; - let a, b, c, t, t1, t2, b2ac, sqrtb2ac; - for (let i = 0; i < 2; ++i) { - if (i === 0) { - b = 6 * x0 - 12 * x1 + 6 * x2; - a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3; - c = 3 * x1 - 3 * x0; - } else { - b = 6 * y0 - 12 * y1 + 6 * y2; - a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3; - c = 3 * y1 - 3 * y0; - } - if (Math.abs(a) < 1e-12) { - if (Math.abs(b) < 1e-12) { - continue; - } - t = -c / b; - if (0 < t && t < 1) { - tvalues.push(t); - } - continue; - } - b2ac = b * b - 4 * c * a; - sqrtb2ac = Math.sqrt(b2ac); - if (b2ac < 0) { - continue; - } - t1 = (-b + sqrtb2ac) / (2 * a); - if (0 < t1 && t1 < 1) { - tvalues.push(t1); - } - t2 = (-b - sqrtb2ac) / (2 * a); - if (0 < t2 && t2 < 1) { - tvalues.push(t2); - } + static #getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, t, minMax) { + if (t <= 0 || t >= 1) { + return; } - let j = tvalues.length, - mt; - const jlen = j; - while (j--) { - t = tvalues[j]; - mt = 1 - t; - bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3; - bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3; + const mt = 1 - t; + const tt = t * t; + const ttt = tt * t; + const x = mt * (mt * (mt * x0 + 3 * t * x1) + 3 * tt * x2) + ttt * x3; + const y = mt * (mt * (mt * y0 + 3 * t * y1) + 3 * tt * y2) + ttt * y3; + minMax[0] = Math.min(minMax[0], x); + minMax[1] = Math.min(minMax[1], y); + minMax[2] = Math.max(minMax[2], x); + minMax[3] = Math.max(minMax[3], y); + } + static #getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, a, b, c, minMax) { + if (Math.abs(a) < 1e-12) { + if (Math.abs(b) >= 1e-12) { + this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, -c / b, minMax); + } + return; } - bounds[0][jlen] = x0; - bounds[1][jlen] = y0; - bounds[0][jlen + 1] = x3; - bounds[1][jlen + 1] = y3; - bounds[0].length = bounds[1].length = jlen + 2; - return [Math.min(...bounds[0]), Math.min(...bounds[1]), Math.max(...bounds[0]), Math.max(...bounds[1])]; + const delta = b ** 2 - 4 * c * a; + if (delta < 0) { + return; + } + const sqrtDelta = Math.sqrt(delta); + const a2 = 2 * a; + this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, (-b + sqrtDelta) / a2, minMax); + this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, (-b - sqrtDelta) / a2, minMax); + } + static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax) { + if (minMax) { + minMax[0] = Math.min(minMax[0], x0, x3); + minMax[1] = Math.min(minMax[1], y0, y3); + minMax[2] = Math.max(minMax[2], x0, x3); + minMax[3] = Math.max(minMax[3], y0, y3); + } else { + minMax = [Math.min(x0, x3), Math.min(y0, y3), Math.max(x0, x3), Math.max(y0, y3)]; + } + this.#getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-x0 + 3 * (x1 - x2) + x3), 6 * (x0 - 2 * x1 + x2), 3 * (x1 - x0), minMax); + this.#getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-y0 + 3 * (y1 - y2) + y3), 6 * (y0 - 2 * y1 + y2), 3 * (y1 - y0), minMax); + return minMax; } } -exports.Util = Util; -const PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac]; +const PDFStringTranslateTable = (/* unused pure expression or super */ null && ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac])); function stringToPDFString(str) { if (str[0] >= "\xEF") { let encoding; if (str[0] === "\xFE" && str[1] === "\xFF") { encoding = "utf-16be"; + if (str.length % 2 === 1) { + str = str.slice(0, -1); + } } else if (str[0] === "\xFF" && str[1] === "\xFE") { encoding = "utf-16le"; + if (str.length % 2 === 1) { + str = str.slice(0, -1); + } } else if (str[0] === "\xEF" && str[1] === "\xBB" && str[2] === "\xBF") { encoding = "utf-8"; } @@ -731,7 +751,11 @@ function stringToPDFString(str) { fatal: true }); const buffer = stringToBytes(str); - return decoder.decode(buffer); + const decoded = decoder.decode(buffer); + if (!decoded.includes("\x1b")) { + return decoded; + } + return decoded.replaceAll(/\x1b[^\x1b]*(?:\x1b|$)/g, ""); } catch (ex) { warn(`stringToPDFString: "${ex}".`); } @@ -739,7 +763,12 @@ function stringToPDFString(str) { } const strBuf = []; for (let i = 0, ii = str.length; i < ii; i++) { - const code = PDFStringTranslateTable[str.charCodeAt(i)]; + const charCode = str.charCodeAt(i); + if (charCode === 0x1b) { + while (++i < ii && str.charCodeAt(i) !== 0x1b) {} + continue; + } + const code = PDFStringTranslateTable[charCode]; strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); } return strBuf.join(""); @@ -750,9 +779,6 @@ function stringToUTF8String(str) { function utf8StringToString(str) { return unescape(encodeURIComponent(str)); } -function isArrayBuffer(v) { - return typeof v === "object" && v?.byteLength !== undefined; -} function isArrayEqual(arr1, arr2) { if (arr1.length !== arr2.length) { return false; @@ -768,25 +794,6 @@ function getModificationDate(date = new Date()) { const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")]; return buffer.join(""); } -class PromiseCapability { - #settled = false; - constructor() { - this.promise = new Promise((resolve, reject) => { - this.resolve = data => { - this.#settled = true; - resolve(data); - }; - this.reject = reason => { - this.#settled = true; - reject(reason); - }; - }); - } - get settled() { - return this.#settled; - } -} -exports.PromiseCapability = PromiseCapability; let NormalizeRegex = null; let NormalizationMap = null; function normalizeUnicode(str) { @@ -794,9 +801,7 @@ function normalizeUnicode(str) { NormalizeRegex = /([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu; NormalizationMap = new Map([["ſt", "ſt"]]); } - return str.replaceAll(NormalizeRegex, (_, p1, p2) => { - return p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2); - }); + return str.replaceAll(NormalizeRegex, (_, p1, p2) => p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2)); } function getUuid() { if (typeof crypto !== "undefined" && typeof crypto?.randomUUID === "function") { @@ -812,501 +817,643 @@ function getUuid() { } return bytesToString(buf); } -const AnnotationPrefix = exports.AnnotationPrefix = "pdfjs_internal_id_"; +const AnnotationPrefix = "pdfjs_internal_id_"; +const FontRenderOps = { + BEZIER_CURVE_TO: 0, + MOVE_TO: 1, + LINE_TO: 2, + QUADRATIC_CURVE_TO: 3, + RESTORE: 4, + SAVE: 5, + SCALE: 6, + TRANSFORM: 7, + TRANSLATE: 8 +}; -/***/ }), -/* 2 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +;// CONCATENATED MODULE: ./src/display/base_factory.js - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.RenderTask = exports.PDFWorkerUtil = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDocumentLoadingTask = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultStandardFontDataFactory = exports.DefaultFilterFactory = exports.DefaultCanvasFactory = exports.DefaultCMapReaderFactory = void 0; -Object.defineProperty(exports, "SVGGraphics", ({ - enumerable: true, - get: function () { - return _displaySvg.SVGGraphics; - } -})); -exports.build = void 0; -exports.getDocument = getDocument; -exports.version = void 0; -var _util = __w_pdfjs_require__(1); -var _annotation_storage = __w_pdfjs_require__(3); -var _display_utils = __w_pdfjs_require__(6); -var _font_loader = __w_pdfjs_require__(9); -var _displayNode_utils = __w_pdfjs_require__(10); -var _canvas = __w_pdfjs_require__(11); -var _worker_options = __w_pdfjs_require__(14); -var _message_handler = __w_pdfjs_require__(15); -var _metadata = __w_pdfjs_require__(16); -var _optional_content_config = __w_pdfjs_require__(17); -var _transport_stream = __w_pdfjs_require__(18); -var _displayFetch_stream = __w_pdfjs_require__(19); -var _displayNetwork = __w_pdfjs_require__(22); -var _displayNode_stream = __w_pdfjs_require__(23); -var _displaySvg = __w_pdfjs_require__(24); -var _xfa_text = __w_pdfjs_require__(25); -const DEFAULT_RANGE_CHUNK_SIZE = 65536; -const RENDERING_CANCELLED_TIMEOUT = 100; -const DELAYED_CLEANUP_TIMEOUT = 5000; -const DefaultCanvasFactory = exports.DefaultCanvasFactory = _util.isNodeJS ? _displayNode_utils.NodeCanvasFactory : _display_utils.DOMCanvasFactory; -const DefaultCMapReaderFactory = exports.DefaultCMapReaderFactory = _util.isNodeJS ? _displayNode_utils.NodeCMapReaderFactory : _display_utils.DOMCMapReaderFactory; -const DefaultFilterFactory = exports.DefaultFilterFactory = _util.isNodeJS ? _displayNode_utils.NodeFilterFactory : _display_utils.DOMFilterFactory; -const DefaultStandardFontDataFactory = exports.DefaultStandardFontDataFactory = _util.isNodeJS ? _displayNode_utils.NodeStandardFontDataFactory : _display_utils.DOMStandardFontDataFactory; -function getDocument(src) { - if (typeof src === "string" || src instanceof URL) { - src = { - url: src - }; - } else if ((0, _util.isArrayBuffer)(src)) { - src = { - data: src - }; - } - if (typeof src !== "object") { - throw new Error("Invalid parameter in getDocument, need parameter object."); - } - if (!src.url && !src.data && !src.range) { - throw new Error("Invalid parameter object: need either .data, .range or .url"); - } - const task = new PDFDocumentLoadingTask(); - const { - docId - } = task; - const url = src.url ? getUrlProp(src.url) : null; - const data = src.data ? getDataProp(src.data) : null; - const httpHeaders = src.httpHeaders || null; - const withCredentials = src.withCredentials === true; - const password = src.password ?? null; - const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null; - const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : DEFAULT_RANGE_CHUNK_SIZE; - let worker = src.worker instanceof PDFWorker ? src.worker : null; - const verbosity = src.verbosity; - const docBaseUrl = typeof src.docBaseUrl === "string" && !(0, _display_utils.isDataScheme)(src.docBaseUrl) ? src.docBaseUrl : null; - const cMapUrl = typeof src.cMapUrl === "string" ? src.cMapUrl : null; - const cMapPacked = src.cMapPacked !== false; - const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory; - const standardFontDataUrl = typeof src.standardFontDataUrl === "string" ? src.standardFontDataUrl : null; - const StandardFontDataFactory = src.StandardFontDataFactory || DefaultStandardFontDataFactory; - const ignoreErrors = src.stopAtErrors !== true; - const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1; - const isEvalSupported = src.isEvalSupported !== false; - const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !_util.isNodeJS; - const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1; - const disableFontFace = typeof src.disableFontFace === "boolean" ? src.disableFontFace : _util.isNodeJS; - const fontExtraProperties = src.fontExtraProperties === true; - const enableXfa = src.enableXfa === true; - const ownerDocument = src.ownerDocument || globalThis.document; - const disableRange = src.disableRange === true; - const disableStream = src.disableStream === true; - const disableAutoFetch = src.disableAutoFetch === true; - const pdfBug = src.pdfBug === true; - const length = rangeTransport ? rangeTransport.length : src.length ?? NaN; - const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !_util.isNodeJS && !disableFontFace; - const useWorkerFetch = typeof src.useWorkerFetch === "boolean" ? src.useWorkerFetch : CMapReaderFactory === _display_utils.DOMCMapReaderFactory && StandardFontDataFactory === _display_utils.DOMStandardFontDataFactory && cMapUrl && standardFontDataUrl && (0, _display_utils.isValidFetchUrl)(cMapUrl, document.baseURI) && (0, _display_utils.isValidFetchUrl)(standardFontDataUrl, document.baseURI); - const canvasFactory = src.canvasFactory || new DefaultCanvasFactory({ - ownerDocument - }); - const filterFactory = src.filterFactory || new DefaultFilterFactory({ - docId, - ownerDocument - }); - const styleElement = null; - (0, _util.setVerbosityLevel)(verbosity); - const transportFactory = { - canvasFactory, - filterFactory - }; - if (!useWorkerFetch) { - transportFactory.cMapReaderFactory = new CMapReaderFactory({ - baseUrl: cMapUrl, - isCompressed: cMapPacked - }); - transportFactory.standardFontDataFactory = new StandardFontDataFactory({ - baseUrl: standardFontDataUrl - }); - } - if (!worker) { - const workerParams = { - verbosity, - port: _worker_options.GlobalWorkerOptions.workerPort - }; - worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); - task._worker = worker; - } - const fetchDocParams = { - docId, - apiVersion: '3.11.176', - data, - password, - disableAutoFetch, - rangeChunkSize, - length, - docBaseUrl, - enableXfa, - evaluatorOptions: { - maxImageSize, - disableFontFace, - ignoreErrors, - isEvalSupported, - isOffscreenCanvasSupported, - canvasMaxAreaInBytes, - fontExtraProperties, - useSystemFonts, - cMapUrl: useWorkerFetch ? cMapUrl : null, - standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null - } - }; - const transportParams = { - ignoreErrors, - isEvalSupported, - disableFontFace, - fontExtraProperties, - enableXfa, - ownerDocument, - disableAutoFetch, - pdfBug, - styleElement - }; - worker.promise.then(function () { - if (task.destroyed) { - throw new Error("Loading aborted"); - } - const workerIdPromise = _fetchDocument(worker, fetchDocParams); - const networkStreamPromise = new Promise(function (resolve) { - let networkStream; - if (rangeTransport) { - networkStream = new _transport_stream.PDFDataTransportStream({ - length, - initialData: rangeTransport.initialData, - progressiveDone: rangeTransport.progressiveDone, - contentDispositionFilename: rangeTransport.contentDispositionFilename, - disableRange, - disableStream - }, rangeTransport); - } else if (!data) { - const createPDFNetworkStream = params => { - if (_util.isNodeJS) { - return new _displayNode_stream.PDFNodeStream(params); - } - return (0, _display_utils.isValidFetchUrl)(params.url) ? new _displayFetch_stream.PDFFetchStream(params) : new _displayNetwork.PDFNetworkStream(params); - }; - networkStream = createPDFNetworkStream({ - url, - length, - httpHeaders, - withCredentials, - rangeChunkSize, - disableRange, - disableStream - }); - } - resolve(networkStream); - }); - return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) { - if (task.destroyed) { - throw new Error("Loading aborted"); - } - const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port); - const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory); - task._transport = transport; - messageHandler.send("Ready", null); - }); - }).catch(task._capability.reject); - return task; -} -async function _fetchDocument(worker, source) { - if (worker.destroyed) { - throw new Error("Worker was destroyed"); - } - const workerId = await worker.messageHandler.sendWithPromise("GetDocRequest", source, source.data ? [source.data.buffer] : null); - if (worker.destroyed) { - throw new Error("Worker was destroyed"); - } - return workerId; -} -function getUrlProp(val) { - if (val instanceof URL) { - return val.href; - } - try { - return new URL(val, window.location).href; - } catch { - if (_util.isNodeJS && typeof val === "string") { - return val; - } - } - throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property."); -} -function getDataProp(val) { - if (_util.isNodeJS && typeof Buffer !== "undefined" && val instanceof Buffer) { - throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`."); - } - if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) { - return val; - } - if (typeof val === "string") { - return (0, _util.stringToBytes)(val); - } - if (typeof val === "object" && !isNaN(val?.length) || (0, _util.isArrayBuffer)(val)) { - return new Uint8Array(val); - } - throw new Error("Invalid PDF binary data: either TypedArray, " + "string, or array-like object is expected in the data property."); -} -class PDFDocumentLoadingTask { - static #docId = 0; +class BaseFilterFactory { constructor() { - this._capability = new _util.PromiseCapability(); - this._transport = null; - this._worker = null; - this.docId = `d${PDFDocumentLoadingTask.#docId++}`; - this.destroyed = false; - this.onPassword = null; - this.onProgress = null; - } - get promise() { - return this._capability.promise; - } - async destroy() { - this.destroyed = true; - try { - if (this._worker?.port) { - this._worker._pendingDestroy = true; - } - await this._transport?.destroy(); - } catch (ex) { - if (this._worker?.port) { - delete this._worker._pendingDestroy; - } - throw ex; - } - this._transport = null; - if (this._worker) { - this._worker.destroy(); - this._worker = null; + if (this.constructor === BaseFilterFactory) { + unreachable("Cannot initialize BaseFilterFactory."); } } + addFilter(maps) { + return "none"; + } + addHCMFilter(fgColor, bgColor) { + return "none"; + } + addAlphaFilter(map) { + return "none"; + } + addLuminosityFilter(map) { + return "none"; + } + addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) { + return "none"; + } + destroy(keepHCM = false) {} } -exports.PDFDocumentLoadingTask = PDFDocumentLoadingTask; -class PDFDataRangeTransport { - constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) { - this.length = length; - this.initialData = initialData; - this.progressiveDone = progressiveDone; - this.contentDispositionFilename = contentDispositionFilename; - this._rangeListeners = []; - this._progressListeners = []; - this._progressiveReadListeners = []; - this._progressiveDoneListeners = []; - this._readyCapability = new _util.PromiseCapability(); - } - addRangeListener(listener) { - this._rangeListeners.push(listener); - } - addProgressListener(listener) { - this._progressListeners.push(listener); - } - addProgressiveReadListener(listener) { - this._progressiveReadListeners.push(listener); - } - addProgressiveDoneListener(listener) { - this._progressiveDoneListeners.push(listener); - } - onDataRange(begin, chunk) { - for (const listener of this._rangeListeners) { - listener(begin, chunk); +class BaseCanvasFactory { + constructor() { + if (this.constructor === BaseCanvasFactory) { + unreachable("Cannot initialize BaseCanvasFactory."); } } - onDataProgress(loaded, total) { - this._readyCapability.promise.then(() => { - for (const listener of this._progressListeners) { - listener(loaded, total); - } - }); + create(width, height) { + if (width <= 0 || height <= 0) { + throw new Error("Invalid canvas size"); + } + const canvas = this._createCanvas(width, height); + return { + canvas, + context: canvas.getContext("2d") + }; } - onDataProgressiveRead(chunk) { - this._readyCapability.promise.then(() => { - for (const listener of this._progressiveReadListeners) { - listener(chunk); - } - }); + reset(canvasAndContext, width, height) { + if (!canvasAndContext.canvas) { + throw new Error("Canvas is not specified"); + } + if (width <= 0 || height <= 0) { + throw new Error("Invalid canvas size"); + } + canvasAndContext.canvas.width = width; + canvasAndContext.canvas.height = height; } - onDataProgressiveDone() { - this._readyCapability.promise.then(() => { - for (const listener of this._progressiveDoneListeners) { - listener(); - } - }); + destroy(canvasAndContext) { + if (!canvasAndContext.canvas) { + throw new Error("Canvas is not specified"); + } + canvasAndContext.canvas.width = 0; + canvasAndContext.canvas.height = 0; + canvasAndContext.canvas = null; + canvasAndContext.context = null; } - transportReady() { - this._readyCapability.resolve(); - } - requestDataRange(begin, end) { - (0, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange"); - } - abort() {} -} -exports.PDFDataRangeTransport = PDFDataRangeTransport; -class PDFDocumentProxy { - constructor(pdfInfo, transport) { - this._pdfInfo = pdfInfo; - this._transport = transport; - Object.defineProperty(this, "getJavaScript", { - value: () => { - (0, _display_utils.deprecated)("`PDFDocumentProxy.getJavaScript`, " + "please use `PDFDocumentProxy.getJSActions` instead."); - return this.getJSActions().then(js => { - if (!js) { - return js; - } - const jsArr = []; - for (const name in js) { - jsArr.push(...js[name]); - } - return jsArr; - }); - } - }); - } - get annotationStorage() { - return this._transport.annotationStorage; - } - get filterFactory() { - return this._transport.filterFactory; - } - get numPages() { - return this._pdfInfo.numPages; - } - get fingerprints() { - return this._pdfInfo.fingerprints; - } - get isPureXfa() { - return (0, _util.shadow)(this, "isPureXfa", !!this._transport._htmlForXfa); - } - get allXfaHtml() { - return this._transport._htmlForXfa; - } - getPage(pageNumber) { - return this._transport.getPage(pageNumber); - } - getPageIndex(ref) { - return this._transport.getPageIndex(ref); - } - getDestinations() { - return this._transport.getDestinations(); - } - getDestination(id) { - return this._transport.getDestination(id); - } - getPageLabels() { - return this._transport.getPageLabels(); - } - getPageLayout() { - return this._transport.getPageLayout(); - } - getPageMode() { - return this._transport.getPageMode(); - } - getViewerPreferences() { - return this._transport.getViewerPreferences(); - } - getOpenAction() { - return this._transport.getOpenAction(); - } - getAttachments() { - return this._transport.getAttachments(); - } - getJSActions() { - return this._transport.getDocJSActions(); - } - getOutline() { - return this._transport.getOutline(); - } - getOptionalContentConfig() { - return this._transport.getOptionalContentConfig(); - } - getPermissions() { - return this._transport.getPermissions(); - } - getMetadata() { - return this._transport.getMetadata(); - } - getMarkInfo() { - return this._transport.getMarkInfo(); - } - getData() { - return this._transport.getData(); - } - saveDocument() { - return this._transport.saveDocument(); - } - getDownloadInfo() { - return this._transport.downloadInfoCapability.promise; - } - cleanup(keepLoadedFonts = false) { - return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa); - } - destroy() { - return this.loadingTask.destroy(); - } - get loadingParams() { - return this._transport.loadingParams; - } - get loadingTask() { - return this._transport.loadingTask; - } - getFieldObjects() { - return this._transport.getFieldObjects(); - } - hasJSActions() { - return this._transport.hasJSActions(); - } - getCalculationOrderIds() { - return this._transport.getCalculationOrderIds(); + _createCanvas(width, height) { + unreachable("Abstract method `_createCanvas` called."); } } -exports.PDFDocumentProxy = PDFDocumentProxy; -class PDFPageProxy { - #delayedCleanupTimeout = null; - #pendingCleanup = false; - constructor(pageIndex, pageInfo, transport, pdfBug = false) { - this._pageIndex = pageIndex; - this._pageInfo = pageInfo; - this._transport = transport; - this._stats = pdfBug ? new _display_utils.StatTimer() : null; - this._pdfBug = pdfBug; - this.commonObjs = transport.commonObjs; - this.objs = new PDFObjects(); - this._maybeCleanupAfterRender = false; - this._intentStates = new Map(); - this.destroyed = false; +class BaseCMapReaderFactory { + constructor({ + baseUrl = null, + isCompressed = true + }) { + if (this.constructor === BaseCMapReaderFactory) { + unreachable("Cannot initialize BaseCMapReaderFactory."); + } + this.baseUrl = baseUrl; + this.isCompressed = isCompressed; } - get pageNumber() { - return this._pageIndex + 1; + async fetch({ + name + }) { + if (!this.baseUrl) { + throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'); + } + if (!name) { + throw new Error("CMap name must be specified."); + } + const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); + const compressionType = this.isCompressed ? CMapCompressionType.BINARY : CMapCompressionType.NONE; + return this._fetchData(url, compressionType).catch(reason => { + throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); + }); } - get rotate() { - return this._pageInfo.rotate; + _fetchData(url, compressionType) { + unreachable("Abstract method `_fetchData` called."); } - get ref() { - return this._pageInfo.ref; +} +class BaseStandardFontDataFactory { + constructor({ + baseUrl = null + }) { + if (this.constructor === BaseStandardFontDataFactory) { + unreachable("Cannot initialize BaseStandardFontDataFactory."); + } + this.baseUrl = baseUrl; } - get userUnit() { - return this._pageInfo.userUnit; + async fetch({ + filename + }) { + if (!this.baseUrl) { + throw new Error('The standard font "baseUrl" parameter must be specified, ensure that ' + 'the "standardFontDataUrl" API parameter is provided.'); + } + if (!filename) { + throw new Error("Font filename must be specified."); + } + const url = `${this.baseUrl}${filename}`; + return this._fetchData(url).catch(reason => { + throw new Error(`Unable to load font data at: ${url}`); + }); } - get view() { - return this._pageInfo.view; + _fetchData(url) { + unreachable("Abstract method `_fetchData` called."); } - getViewport({ +} +class BaseSVGFactory { + constructor() { + if (this.constructor === BaseSVGFactory) { + unreachable("Cannot initialize BaseSVGFactory."); + } + } + create(width, height, skipDimensions = false) { + if (width <= 0 || height <= 0) { + throw new Error("Invalid SVG dimensions"); + } + const svg = this._createSVG("svg:svg"); + svg.setAttribute("version", "1.1"); + if (!skipDimensions) { + svg.setAttribute("width", `${width}px`); + svg.setAttribute("height", `${height}px`); + } + svg.setAttribute("preserveAspectRatio", "none"); + svg.setAttribute("viewBox", `0 0 ${width} ${height}`); + return svg; + } + createElement(type) { + if (typeof type !== "string") { + throw new Error("Invalid SVG element type"); + } + return this._createSVG(type); + } + _createSVG(type) { + unreachable("Abstract method `_createSVG` called."); + } +} + +;// CONCATENATED MODULE: ./src/display/display_utils.js + + +const SVG_NS = "http://www.w3.org/2000/svg"; +class PixelsPerInch { + static CSS = 96.0; + static PDF = 72.0; + static PDF_TO_CSS_UNITS = this.CSS / this.PDF; +} +class DOMFilterFactory extends BaseFilterFactory { + #_cache; + #_defs; + #docId; + #document; + #_hcmCache; + #id = 0; + constructor({ + docId, + ownerDocument = globalThis.document + } = {}) { + super(); + this.#docId = docId; + this.#document = ownerDocument; + } + get #cache() { + return this.#_cache ||= new Map(); + } + get #hcmCache() { + return this.#_hcmCache ||= new Map(); + } + get #defs() { + if (!this.#_defs) { + const div = this.#document.createElement("div"); + const { + style + } = div; + style.visibility = "hidden"; + style.contain = "strict"; + style.width = style.height = 0; + style.position = "absolute"; + style.top = style.left = 0; + style.zIndex = -1; + const svg = this.#document.createElementNS(SVG_NS, "svg"); + svg.setAttribute("width", 0); + svg.setAttribute("height", 0); + this.#_defs = this.#document.createElementNS(SVG_NS, "defs"); + div.append(svg); + svg.append(this.#_defs); + this.#document.body.append(div); + } + return this.#_defs; + } + #createTables(maps) { + if (maps.length === 1) { + const mapR = maps[0]; + const buffer = new Array(256); + for (let i = 0; i < 256; i++) { + buffer[i] = mapR[i] / 255; + } + const table = buffer.join(","); + return [table, table, table]; + } + const [mapR, mapG, mapB] = maps; + const bufferR = new Array(256); + const bufferG = new Array(256); + const bufferB = new Array(256); + for (let i = 0; i < 256; i++) { + bufferR[i] = mapR[i] / 255; + bufferG[i] = mapG[i] / 255; + bufferB[i] = mapB[i] / 255; + } + return [bufferR.join(","), bufferG.join(","), bufferB.join(",")]; + } + addFilter(maps) { + if (!maps) { + return "none"; + } + let value = this.#cache.get(maps); + if (value) { + return value; + } + const [tableR, tableG, tableB] = this.#createTables(maps); + const key = maps.length === 1 ? tableR : `${tableR}${tableG}${tableB}`; + value = this.#cache.get(key); + if (value) { + this.#cache.set(maps, value); + return value; + } + const id = `g_${this.#docId}_transfer_map_${this.#id++}`; + const url = `url(#${id})`; + this.#cache.set(maps, url); + this.#cache.set(key, url); + const filter = this.#createFilter(id); + this.#addTransferMapConversion(tableR, tableG, tableB, filter); + return url; + } + addHCMFilter(fgColor, bgColor) { + const key = `${fgColor}-${bgColor}`; + const filterName = "base"; + let info = this.#hcmCache.get(filterName); + if (info?.key === key) { + return info.url; + } + if (info) { + info.filter?.remove(); + info.key = key; + info.url = "none"; + info.filter = null; + } else { + info = { + key, + url: "none", + filter: null + }; + this.#hcmCache.set(filterName, info); + } + if (!fgColor || !bgColor) { + return info.url; + } + const fgRGB = this.#getRGB(fgColor); + fgColor = Util.makeHexColor(...fgRGB); + const bgRGB = this.#getRGB(bgColor); + bgColor = Util.makeHexColor(...bgRGB); + this.#defs.style.color = ""; + if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) { + return info.url; + } + const map = new Array(256); + for (let i = 0; i <= 255; i++) { + const x = i / 255; + map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4; + } + const table = map.join(","); + const id = `g_${this.#docId}_hcm_filter`; + const filter = info.filter = this.#createFilter(id); + this.#addTransferMapConversion(table, table, table, filter); + this.#addGrayConversion(filter); + const getSteps = (c, n) => { + const start = fgRGB[c] / 255; + const end = bgRGB[c] / 255; + const arr = new Array(n + 1); + for (let i = 0; i <= n; i++) { + arr[i] = start + i / n * (end - start); + } + return arr.join(","); + }; + this.#addTransferMapConversion(getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter); + info.url = `url(#${id})`; + return info.url; + } + addAlphaFilter(map) { + let value = this.#cache.get(map); + if (value) { + return value; + } + const [tableA] = this.#createTables([map]); + const key = `alpha_${tableA}`; + value = this.#cache.get(key); + if (value) { + this.#cache.set(map, value); + return value; + } + const id = `g_${this.#docId}_alpha_map_${this.#id++}`; + const url = `url(#${id})`; + this.#cache.set(map, url); + this.#cache.set(key, url); + const filter = this.#createFilter(id); + this.#addTransferMapAlphaConversion(tableA, filter); + return url; + } + addLuminosityFilter(map) { + let value = this.#cache.get(map || "luminosity"); + if (value) { + return value; + } + let tableA, key; + if (map) { + [tableA] = this.#createTables([map]); + key = `luminosity_${tableA}`; + } else { + key = "luminosity"; + } + value = this.#cache.get(key); + if (value) { + this.#cache.set(map, value); + return value; + } + const id = `g_${this.#docId}_luminosity_map_${this.#id++}`; + const url = `url(#${id})`; + this.#cache.set(map, url); + this.#cache.set(key, url); + const filter = this.#createFilter(id); + this.#addLuminosityConversion(filter); + if (map) { + this.#addTransferMapAlphaConversion(tableA, filter); + } + return url; + } + addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) { + const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`; + let info = this.#hcmCache.get(filterName); + if (info?.key === key) { + return info.url; + } + if (info) { + info.filter?.remove(); + info.key = key; + info.url = "none"; + info.filter = null; + } else { + info = { + key, + url: "none", + filter: null + }; + this.#hcmCache.set(filterName, info); + } + if (!fgColor || !bgColor) { + return info.url; + } + const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this)); + let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]); + let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]); + let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(this.#getRGB.bind(this)); + if (bgGray < fgGray) { + [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB]; + } + this.#defs.style.color = ""; + const getSteps = (fg, bg, n) => { + const arr = new Array(256); + const step = (bgGray - fgGray) / n; + const newStart = fg / 255; + const newStep = (bg - fg) / (255 * n); + let prev = 0; + for (let i = 0; i <= n; i++) { + const k = Math.round(fgGray + i * step); + const value = newStart + i * newStep; + for (let j = prev; j <= k; j++) { + arr[j] = value; + } + prev = k + 1; + } + for (let i = prev; i < 256; i++) { + arr[i] = arr[prev - 1]; + } + return arr.join(","); + }; + const id = `g_${this.#docId}_hcm_${filterName}_filter`; + const filter = info.filter = this.#createFilter(id); + this.#addGrayConversion(filter); + this.#addTransferMapConversion(getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter); + info.url = `url(#${id})`; + return info.url; + } + destroy(keepHCM = false) { + if (keepHCM && this.#hcmCache.size !== 0) { + return; + } + if (this.#_defs) { + this.#_defs.parentNode.parentNode.remove(); + this.#_defs = null; + } + if (this.#_cache) { + this.#_cache.clear(); + this.#_cache = null; + } + this.#id = 0; + } + #addLuminosityConversion(filter) { + const feColorMatrix = this.#document.createElementNS(SVG_NS, "feColorMatrix"); + feColorMatrix.setAttribute("type", "matrix"); + feColorMatrix.setAttribute("values", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0"); + filter.append(feColorMatrix); + } + #addGrayConversion(filter) { + const feColorMatrix = this.#document.createElementNS(SVG_NS, "feColorMatrix"); + feColorMatrix.setAttribute("type", "matrix"); + feColorMatrix.setAttribute("values", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"); + filter.append(feColorMatrix); + } + #createFilter(id) { + const filter = this.#document.createElementNS(SVG_NS, "filter"); + filter.setAttribute("color-interpolation-filters", "sRGB"); + filter.setAttribute("id", id); + this.#defs.append(filter); + return filter; + } + #appendFeFunc(feComponentTransfer, func, table) { + const feFunc = this.#document.createElementNS(SVG_NS, func); + feFunc.setAttribute("type", "discrete"); + feFunc.setAttribute("tableValues", table); + feComponentTransfer.append(feFunc); + } + #addTransferMapConversion(rTable, gTable, bTable, filter) { + const feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer"); + filter.append(feComponentTransfer); + this.#appendFeFunc(feComponentTransfer, "feFuncR", rTable); + this.#appendFeFunc(feComponentTransfer, "feFuncG", gTable); + this.#appendFeFunc(feComponentTransfer, "feFuncB", bTable); + } + #addTransferMapAlphaConversion(aTable, filter) { + const feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer"); + filter.append(feComponentTransfer); + this.#appendFeFunc(feComponentTransfer, "feFuncA", aTable); + } + #getRGB(color) { + this.#defs.style.color = color; + return getRGB(getComputedStyle(this.#defs).getPropertyValue("color")); + } +} +class DOMCanvasFactory extends BaseCanvasFactory { + constructor({ + ownerDocument = globalThis.document + } = {}) { + super(); + this._document = ownerDocument; + } + _createCanvas(width, height) { + const canvas = this._document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + return canvas; + } +} +async function fetchData(url, type = "text") { + if (isValidFetchUrl(url, document.baseURI)) { + const response = await fetch(url); + if (!response.ok) { + throw new Error(response.statusText); + } + switch (type) { + case "arraybuffer": + return response.arrayBuffer(); + case "blob": + return response.blob(); + case "json": + return response.json(); + } + return response.text(); + } + return new Promise((resolve, reject) => { + const request = new XMLHttpRequest(); + request.open("GET", url, true); + request.responseType = type; + request.onreadystatechange = () => { + if (request.readyState !== XMLHttpRequest.DONE) { + return; + } + if (request.status === 200 || request.status === 0) { + switch (type) { + case "arraybuffer": + case "blob": + case "json": + resolve(request.response); + return; + } + resolve(request.responseText); + return; + } + reject(new Error(request.statusText)); + }; + request.send(null); + }); +} +class DOMCMapReaderFactory extends BaseCMapReaderFactory { + _fetchData(url, compressionType) { + return fetchData(url, this.isCompressed ? "arraybuffer" : "text").then(data => ({ + cMapData: data instanceof ArrayBuffer ? new Uint8Array(data) : stringToBytes(data), + compressionType + })); + } +} +class DOMStandardFontDataFactory extends BaseStandardFontDataFactory { + _fetchData(url) { + return fetchData(url, "arraybuffer").then(data => new Uint8Array(data)); + } +} +class DOMSVGFactory extends BaseSVGFactory { + _createSVG(type) { + return document.createElementNS(SVG_NS, type); + } +} +class PageViewport { + constructor({ + viewBox, scale, - rotation = this.rotate, + rotation, offsetX = 0, offsetY = 0, dontFlip = false + }) { + this.viewBox = viewBox; + this.scale = scale; + this.rotation = rotation; + this.offsetX = offsetX; + this.offsetY = offsetY; + const centerX = (viewBox[2] + viewBox[0]) / 2; + const centerY = (viewBox[3] + viewBox[1]) / 2; + let rotateA, rotateB, rotateC, rotateD; + rotation %= 360; + if (rotation < 0) { + rotation += 360; + } + switch (rotation) { + case 180: + rotateA = -1; + rotateB = 0; + rotateC = 0; + rotateD = 1; + break; + case 90: + rotateA = 0; + rotateB = 1; + rotateC = 1; + rotateD = 0; + break; + case 270: + rotateA = 0; + rotateB = -1; + rotateC = -1; + rotateD = 0; + break; + case 0: + rotateA = 1; + rotateB = 0; + rotateC = 0; + rotateD = -1; + break; + default: + throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); + } + if (dontFlip) { + rotateC = -rotateC; + rotateD = -rotateD; + } + let offsetCanvasX, offsetCanvasY; + let width, height; + if (rotateA === 0) { + offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; + offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; + width = (viewBox[3] - viewBox[1]) * scale; + height = (viewBox[2] - viewBox[0]) * scale; + } else { + offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; + offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; + width = (viewBox[2] - viewBox[0]) * scale; + height = (viewBox[3] - viewBox[1]) * scale; + } + this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; + this.width = width; + this.height = height; + } + get rawDims() { + const { + viewBox + } = this; + return shadow(this, "rawDims", { + pageWidth: viewBox[2] - viewBox[0], + pageHeight: viewBox[3] - viewBox[1], + pageX: viewBox[0], + pageY: viewBox[1] + }); + } + clone({ + scale = this.scale, + rotation = this.rotation, + offsetX = this.offsetX, + offsetY = this.offsetY, + dontFlip = false } = {}) { - return new _display_utils.PageViewport({ - viewBox: this.view, + return new PageViewport({ + viewBox: this.viewBox.slice(), scale, rotation, offsetX, @@ -1314,2482 +1461,408 @@ class PDFPageProxy { dontFlip }); } - getAnnotations({ - intent = "display" - } = {}) { - const intentArgs = this._transport.getRenderingIntent(intent); - return this._transport.getAnnotations(this._pageIndex, intentArgs.renderingIntent); + convertToViewportPoint(x, y) { + return Util.applyTransform([x, y], this.transform); } - getJSActions() { - return this._transport.getPageJSActions(this._pageIndex); + convertToViewportRectangle(rect) { + const topLeft = Util.applyTransform([rect[0], rect[1]], this.transform); + const bottomRight = Util.applyTransform([rect[2], rect[3]], this.transform); + return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; } - get filterFactory() { - return this._transport.filterFactory; + convertToPdfPoint(x, y) { + return Util.applyInverseTransform([x, y], this.transform); } - get isPureXfa() { - return (0, _util.shadow)(this, "isPureXfa", !!this._transport._htmlForXfa); +} +class RenderingCancelledException extends BaseException { + constructor(msg, extraDelay = 0) { + super(msg, "RenderingCancelledException"); + this.extraDelay = extraDelay; } - async getXfa() { - return this._transport._htmlForXfa?.children[this._pageIndex] || null; +} +function isDataScheme(url) { + const ii = url.length; + let i = 0; + while (i < ii && url[i].trim() === "") { + i++; } - render({ - canvasContext, - viewport, - intent = "display", - annotationMode = _util.AnnotationMode.ENABLE, - transform = null, - background = null, - optionalContentConfigPromise = null, - annotationCanvasMap = null, - pageColors = null, - printAnnotationStorage = null - }) { - this._stats?.time("Overall"); - const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage); - this.#pendingCleanup = false; - this.#abortDelayedCleanup(); - if (!optionalContentConfigPromise) { - optionalContentConfigPromise = this._transport.getOptionalContentConfig(); + return url.substring(i, i + 5).toLowerCase() === "data:"; +} +function isPdfFile(filename) { + return typeof filename === "string" && /\.pdf$/i.test(filename); +} +function getFilenameFromUrl(url) { + [url] = url.split(/[#?]/, 1); + return url.substring(url.lastIndexOf("/") + 1); +} +function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") { + if (typeof url !== "string") { + return defaultFilename; + } + if (isDataScheme(url)) { + warn('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'); + return defaultFilename; + } + const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; + const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i; + const splitURI = reURI.exec(url); + let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]); + if (suggestedFilename) { + suggestedFilename = suggestedFilename[0]; + if (suggestedFilename.includes("%")) { + try { + suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; + } catch {} } - let intentState = this._intentStates.get(intentArgs.cacheKey); - if (!intentState) { - intentState = Object.create(null); - this._intentStates.set(intentArgs.cacheKey, intentState); + } + return suggestedFilename || defaultFilename; +} +class StatTimer { + started = Object.create(null); + times = []; + time(name) { + if (name in this.started) { + warn(`Timer is already running for ${name}`); } - if (intentState.streamReaderCancelTimeout) { - clearTimeout(intentState.streamReaderCancelTimeout); - intentState.streamReaderCancelTimeout = null; + this.started[name] = Date.now(); + } + timeEnd(name) { + if (!(name in this.started)) { + warn(`Timer has not been started for ${name}`); } - const intentPrint = !!(intentArgs.renderingIntent & _util.RenderingIntentFlag.PRINT); - if (!intentState.displayReadyCapability) { - intentState.displayReadyCapability = new _util.PromiseCapability(); - intentState.operatorList = { - fnArray: [], - argsArray: [], - lastChunk: false, - separateAnnots: null - }; - this._stats?.time("Page Request"); - this._pumpOperatorList(intentArgs); - } - const complete = error => { - intentState.renderTasks.delete(internalRenderTask); - if (this._maybeCleanupAfterRender || intentPrint) { - this.#pendingCleanup = true; - } - this.#tryCleanup(!intentPrint); - if (error) { - internalRenderTask.capability.reject(error); - this._abortOperatorList({ - intentState, - reason: error instanceof Error ? error : new Error(error) - }); - } else { - internalRenderTask.capability.resolve(); - } - this._stats?.timeEnd("Rendering"); - this._stats?.timeEnd("Overall"); - }; - const internalRenderTask = new InternalRenderTask({ - callback: complete, - params: { - canvasContext, - viewport, - transform, - background - }, - objs: this.objs, - commonObjs: this.commonObjs, - annotationCanvasMap, - operatorList: intentState.operatorList, - pageIndex: this._pageIndex, - canvasFactory: this._transport.canvasFactory, - filterFactory: this._transport.filterFactory, - useRequestAnimationFrame: !intentPrint, - pdfBug: this._pdfBug, - pageColors + this.times.push({ + name, + start: this.started[name], + end: Date.now() }); - (intentState.renderTasks ||= new Set()).add(internalRenderTask); - const renderTask = internalRenderTask.task; - Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => { - if (this.destroyed) { - complete(); - return; - } - this._stats?.time("Rendering"); - internalRenderTask.initializeGraphics({ - transparency, - optionalContentConfig - }); - internalRenderTask.operatorListChanged(); - }).catch(complete); - return renderTask; + delete this.started[name]; } - getOperatorList({ - intent = "display", - annotationMode = _util.AnnotationMode.ENABLE, - printAnnotationStorage = null - } = {}) { - function operatorListChanged() { - if (intentState.operatorList.lastChunk) { - intentState.opListReadCapability.resolve(intentState.operatorList); - intentState.renderTasks.delete(opListTask); - } - } - const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, true); - let intentState = this._intentStates.get(intentArgs.cacheKey); - if (!intentState) { - intentState = Object.create(null); - this._intentStates.set(intentArgs.cacheKey, intentState); - } - let opListTask; - if (!intentState.opListReadCapability) { - opListTask = Object.create(null); - opListTask.operatorListChanged = operatorListChanged; - intentState.opListReadCapability = new _util.PromiseCapability(); - (intentState.renderTasks ||= new Set()).add(opListTask); - intentState.operatorList = { - fnArray: [], - argsArray: [], - lastChunk: false, - separateAnnots: null - }; - this._stats?.time("Page Request"); - this._pumpOperatorList(intentArgs); - } - return intentState.opListReadCapability.promise; - } - streamTextContent({ - includeMarkedContent = false, - disableNormalization = false - } = {}) { - const TEXT_CONTENT_CHUNK_SIZE = 100; - return this._transport.messageHandler.sendWithStream("GetTextContent", { - pageIndex: this._pageIndex, - includeMarkedContent: includeMarkedContent === true, - disableNormalization: disableNormalization === true - }, { - highWaterMark: TEXT_CONTENT_CHUNK_SIZE, - size(textContent) { - return textContent.items.length; - } - }); - } - getTextContent(params = {}) { - if (this._transport._htmlForXfa) { - return this.getXfa().then(xfa => { - return _xfa_text.XfaText.textContent(xfa); - }); - } - const readableStream = this.streamTextContent(params); - return new Promise(function (resolve, reject) { - function pump() { - reader.read().then(function ({ - value, - done - }) { - if (done) { - resolve(textContent); - return; - } - Object.assign(textContent.styles, value.styles); - textContent.items.push(...value.items); - pump(); - }, reject); - } - const reader = readableStream.getReader(); - const textContent = { - items: [], - styles: Object.create(null) - }; - pump(); - }); - } - getStructTree() { - return this._transport.getStructTree(this._pageIndex); - } - _destroy() { - this.destroyed = true; - const waitOn = []; - for (const intentState of this._intentStates.values()) { - this._abortOperatorList({ - intentState, - reason: new Error("Page was destroyed."), - force: true - }); - if (intentState.opListReadCapability) { - continue; - } - for (const internalRenderTask of intentState.renderTasks) { - waitOn.push(internalRenderTask.completed); - internalRenderTask.cancel(); - } - } - this.objs.clear(); - this.#pendingCleanup = false; - this.#abortDelayedCleanup(); - return Promise.all(waitOn); - } - cleanup(resetStats = false) { - this.#pendingCleanup = true; - const success = this.#tryCleanup(false); - if (resetStats && success) { - this._stats &&= new _display_utils.StatTimer(); - } - return success; - } - #tryCleanup(delayed = false) { - this.#abortDelayedCleanup(); - if (!this.#pendingCleanup || this.destroyed) { - return false; - } - if (delayed) { - this.#delayedCleanupTimeout = setTimeout(() => { - this.#delayedCleanupTimeout = null; - this.#tryCleanup(false); - }, DELAYED_CLEANUP_TIMEOUT); - return false; + toString() { + const outBuf = []; + let longest = 0; + for (const { + name + } of this.times) { + longest = Math.max(name.length, longest); } for (const { - renderTasks, - operatorList - } of this._intentStates.values()) { - if (renderTasks.size > 0 || !operatorList.lastChunk) { - return false; - } + name, + start, + end + } of this.times) { + outBuf.push(`${name.padEnd(longest)} ${end - start}ms\n`); } - this._intentStates.clear(); - this.objs.clear(); - this.#pendingCleanup = false; - return true; + return outBuf.join(""); } - #abortDelayedCleanup() { - if (this.#delayedCleanupTimeout) { - clearTimeout(this.#delayedCleanupTimeout); - this.#delayedCleanupTimeout = null; - } - } - _startRenderPage(transparency, cacheKey) { - const intentState = this._intentStates.get(cacheKey); - if (!intentState) { - return; - } - this._stats?.timeEnd("Page Request"); - intentState.displayReadyCapability?.resolve(transparency); - } - _renderPageChunk(operatorListChunk, intentState) { - for (let i = 0, ii = operatorListChunk.length; i < ii; i++) { - intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); - intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); - } - intentState.operatorList.lastChunk = operatorListChunk.lastChunk; - intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots; - for (const internalRenderTask of intentState.renderTasks) { - internalRenderTask.operatorListChanged(); - } - if (operatorListChunk.lastChunk) { - this.#tryCleanup(true); - } - } - _pumpOperatorList({ - renderingIntent, - cacheKey, - annotationStorageSerializable - }) { +} +function isValidFetchUrl(url, baseUrl) { + try { const { - map, - transfers - } = annotationStorageSerializable; - const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", { - pageIndex: this._pageIndex, - intent: renderingIntent, - cacheKey, - annotationStorage: map - }, transfers); - const reader = readableStream.getReader(); - const intentState = this._intentStates.get(cacheKey); - intentState.streamReader = reader; - const pump = () => { - reader.read().then(({ - value, - done - }) => { - if (done) { - intentState.streamReader = null; - return; - } - if (this._transport.destroyed) { - return; - } - this._renderPageChunk(value, intentState); - pump(); - }, reason => { - intentState.streamReader = null; - if (this._transport.destroyed) { - return; - } - if (intentState.operatorList) { - intentState.operatorList.lastChunk = true; - for (const internalRenderTask of intentState.renderTasks) { - internalRenderTask.operatorListChanged(); - } - this.#tryCleanup(true); - } - if (intentState.displayReadyCapability) { - intentState.displayReadyCapability.reject(reason); - } else if (intentState.opListReadCapability) { - intentState.opListReadCapability.reject(reason); - } else { - throw reason; - } - }); - }; - pump(); - } - _abortOperatorList({ - intentState, - reason, - force = false - }) { - if (!intentState.streamReader) { - return; - } - if (intentState.streamReaderCancelTimeout) { - clearTimeout(intentState.streamReaderCancelTimeout); - intentState.streamReaderCancelTimeout = null; - } - if (!force) { - if (intentState.renderTasks.size > 0) { - return; - } - if (reason instanceof _display_utils.RenderingCancelledException) { - let delay = RENDERING_CANCELLED_TIMEOUT; - if (reason.extraDelay > 0 && reason.extraDelay < 1000) { - delay += reason.extraDelay; - } - intentState.streamReaderCancelTimeout = setTimeout(() => { - intentState.streamReaderCancelTimeout = null; - this._abortOperatorList({ - intentState, - reason, - force: true - }); - }, delay); - return; - } - } - intentState.streamReader.cancel(new _util.AbortException(reason.message)).catch(() => {}); - intentState.streamReader = null; - if (this._transport.destroyed) { - return; - } - for (const [curCacheKey, curIntentState] of this._intentStates) { - if (curIntentState === intentState) { - this._intentStates.delete(curCacheKey); - break; - } - } - this.cleanup(); - } - get stats() { - return this._stats; - } -} -exports.PDFPageProxy = PDFPageProxy; -class LoopbackPort { - #listeners = new Set(); - #deferred = Promise.resolve(); - postMessage(obj, transfer) { - const event = { - data: structuredClone(obj, transfer ? { - transfer - } : null) - }; - this.#deferred.then(() => { - for (const listener of this.#listeners) { - listener.call(this, event); - } - }); - } - addEventListener(name, listener) { - this.#listeners.add(listener); - } - removeEventListener(name, listener) { - this.#listeners.delete(listener); - } - terminate() { - this.#listeners.clear(); - } -} -exports.LoopbackPort = LoopbackPort; -const PDFWorkerUtil = exports.PDFWorkerUtil = { - isWorkerDisabled: false, - fallbackWorkerSrc: null, - fakeWorkerId: 0 -}; -{ - if (_util.isNodeJS && typeof require === "function") { - PDFWorkerUtil.isWorkerDisabled = true; - PDFWorkerUtil.fallbackWorkerSrc = "./pdf.worker.js"; - } else if (typeof document === "object") { - const pdfjsFilePath = document?.currentScript?.src; - if (pdfjsFilePath) { - PDFWorkerUtil.fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2"); - } - } - PDFWorkerUtil.isSameOrigin = function (baseUrl, otherUrl) { - let base; - try { - base = new URL(baseUrl); - if (!base.origin || base.origin === "null") { - return false; - } - } catch { - return false; - } - const other = new URL(otherUrl, base); - return base.origin === other.origin; - }; - PDFWorkerUtil.createCDNWrapper = function (url) { - const wrapper = `importScripts("${url}");`; - return URL.createObjectURL(new Blob([wrapper])); - }; -} -class PDFWorker { - static #workerPorts; - constructor({ - name = null, - port = null, - verbosity = (0, _util.getVerbosityLevel)() - } = {}) { - this.name = name; - this.destroyed = false; - this.verbosity = verbosity; - this._readyCapability = new _util.PromiseCapability(); - this._port = null; - this._webWorker = null; - this._messageHandler = null; - if (port) { - if (PDFWorker.#workerPorts?.has(port)) { - throw new Error("Cannot use more than one PDFWorker per port."); - } - (PDFWorker.#workerPorts ||= new WeakMap()).set(port, this); - this._initializeFromPort(port); - return; - } - this._initialize(); - } - get promise() { - return this._readyCapability.promise; - } - get port() { - return this._port; - } - get messageHandler() { - return this._messageHandler; - } - _initializeFromPort(port) { - this._port = port; - this._messageHandler = new _message_handler.MessageHandler("main", "worker", port); - this._messageHandler.on("ready", function () {}); - this._readyCapability.resolve(); - this._messageHandler.send("configure", { - verbosity: this.verbosity - }); - } - _initialize() { - if (!PDFWorkerUtil.isWorkerDisabled && !PDFWorker._mainThreadWorkerMessageHandler) { - let { - workerSrc - } = PDFWorker; - try { - if (!PDFWorkerUtil.isSameOrigin(window.location.href, workerSrc)) { - workerSrc = PDFWorkerUtil.createCDNWrapper(new URL(workerSrc, window.location).href); - } - const worker = new Worker(workerSrc); - const messageHandler = new _message_handler.MessageHandler("main", "worker", worker); - const terminateEarly = () => { - worker.removeEventListener("error", onWorkerError); - messageHandler.destroy(); - worker.terminate(); - if (this.destroyed) { - this._readyCapability.reject(new Error("Worker was destroyed")); - } else { - this._setupFakeWorker(); - } - }; - const onWorkerError = () => { - if (!this._webWorker) { - terminateEarly(); - } - }; - worker.addEventListener("error", onWorkerError); - messageHandler.on("test", data => { - worker.removeEventListener("error", onWorkerError); - if (this.destroyed) { - terminateEarly(); - return; - } - if (data) { - this._messageHandler = messageHandler; - this._port = worker; - this._webWorker = worker; - this._readyCapability.resolve(); - messageHandler.send("configure", { - verbosity: this.verbosity - }); - } else { - this._setupFakeWorker(); - messageHandler.destroy(); - worker.terminate(); - } - }); - messageHandler.on("ready", data => { - worker.removeEventListener("error", onWorkerError); - if (this.destroyed) { - terminateEarly(); - return; - } - try { - sendTest(); - } catch { - this._setupFakeWorker(); - } - }); - const sendTest = () => { - const testObj = new Uint8Array(); - messageHandler.send("test", testObj, [testObj.buffer]); - }; - sendTest(); - return; - } catch { - (0, _util.info)("The worker has been disabled."); - } - } - this._setupFakeWorker(); - } - _setupFakeWorker() { - if (!PDFWorkerUtil.isWorkerDisabled) { - (0, _util.warn)("Setting up fake worker."); - PDFWorkerUtil.isWorkerDisabled = true; - } - PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => { - if (this.destroyed) { - this._readyCapability.reject(new Error("Worker was destroyed")); - return; - } - const port = new LoopbackPort(); - this._port = port; - const id = `fake${PDFWorkerUtil.fakeWorkerId++}`; - const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port); - WorkerMessageHandler.setup(workerHandler, port); - const messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port); - this._messageHandler = messageHandler; - this._readyCapability.resolve(); - messageHandler.send("configure", { - verbosity: this.verbosity - }); - }).catch(reason => { - this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); - }); - } - destroy() { - this.destroyed = true; - if (this._webWorker) { - this._webWorker.terminate(); - this._webWorker = null; - } - PDFWorker.#workerPorts?.delete(this._port); - this._port = null; - if (this._messageHandler) { - this._messageHandler.destroy(); - this._messageHandler = null; - } - } - static fromPort(params) { - if (!params?.port) { - throw new Error("PDFWorker.fromPort - invalid method signature."); - } - const cachedPort = this.#workerPorts?.get(params.port); - if (cachedPort) { - if (cachedPort._pendingDestroy) { - throw new Error("PDFWorker.fromPort - the worker is being destroyed.\n" + "Please remember to await `PDFDocumentLoadingTask.destroy()`-calls."); - } - return cachedPort; - } - return new PDFWorker(params); - } - static get workerSrc() { - if (_worker_options.GlobalWorkerOptions.workerSrc) { - return _worker_options.GlobalWorkerOptions.workerSrc; - } - if (PDFWorkerUtil.fallbackWorkerSrc !== null) { - if (!_util.isNodeJS) { - (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'); - } - return PDFWorkerUtil.fallbackWorkerSrc; - } - throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); - } - static get _mainThreadWorkerMessageHandler() { - try { - return globalThis.pdfjsWorker?.WorkerMessageHandler || null; - } catch { - return null; - } - } - static get _setupFakeWorkerGlobal() { - const loader = async () => { - const mainWorkerMessageHandler = this._mainThreadWorkerMessageHandler; - if (mainWorkerMessageHandler) { - return mainWorkerMessageHandler; - } - if (_util.isNodeJS && typeof require === "function") { - const worker = eval("require")(this.workerSrc); - return worker.WorkerMessageHandler; - } - await (0, _display_utils.loadScript)(this.workerSrc); - return window.pdfjsWorker.WorkerMessageHandler; - }; - return (0, _util.shadow)(this, "_setupFakeWorkerGlobal", loader()); - } -} -exports.PDFWorker = PDFWorker; -class WorkerTransport { - #methodPromises = new Map(); - #pageCache = new Map(); - #pagePromises = new Map(); - #passwordCapability = null; - constructor(messageHandler, loadingTask, networkStream, params, factory) { - this.messageHandler = messageHandler; - this.loadingTask = loadingTask; - this.commonObjs = new PDFObjects(); - this.fontLoader = new _font_loader.FontLoader({ - ownerDocument: params.ownerDocument, - styleElement: params.styleElement - }); - this._params = params; - this.canvasFactory = factory.canvasFactory; - this.filterFactory = factory.filterFactory; - this.cMapReaderFactory = factory.cMapReaderFactory; - this.standardFontDataFactory = factory.standardFontDataFactory; - this.destroyed = false; - this.destroyCapability = null; - this._networkStream = networkStream; - this._fullReader = null; - this._lastProgress = null; - this.downloadInfoCapability = new _util.PromiseCapability(); - this.setupMessageHandler(); - } - #cacheSimpleMethod(name, data = null) { - const cachedPromise = this.#methodPromises.get(name); - if (cachedPromise) { - return cachedPromise; - } - const promise = this.messageHandler.sendWithPromise(name, data); - this.#methodPromises.set(name, promise); - return promise; - } - get annotationStorage() { - return (0, _util.shadow)(this, "annotationStorage", new _annotation_storage.AnnotationStorage()); - } - getRenderingIntent(intent, annotationMode = _util.AnnotationMode.ENABLE, printAnnotationStorage = null, isOpList = false) { - let renderingIntent = _util.RenderingIntentFlag.DISPLAY; - let annotationStorageSerializable = _annotation_storage.SerializableEmpty; - switch (intent) { - case "any": - renderingIntent = _util.RenderingIntentFlag.ANY; - break; - case "display": - break; - case "print": - renderingIntent = _util.RenderingIntentFlag.PRINT; - break; - default: - (0, _util.warn)(`getRenderingIntent - invalid intent: ${intent}`); - } - switch (annotationMode) { - case _util.AnnotationMode.DISABLE: - renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_DISABLE; - break; - case _util.AnnotationMode.ENABLE: - break; - case _util.AnnotationMode.ENABLE_FORMS: - renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_FORMS; - break; - case _util.AnnotationMode.ENABLE_STORAGE: - renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_STORAGE; - const annotationStorage = renderingIntent & _util.RenderingIntentFlag.PRINT && printAnnotationStorage instanceof _annotation_storage.PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage; - annotationStorageSerializable = annotationStorage.serializable; - break; - default: - (0, _util.warn)(`getRenderingIntent - invalid annotationMode: ${annotationMode}`); - } - if (isOpList) { - renderingIntent += _util.RenderingIntentFlag.OPLIST; - } - return { - renderingIntent, - cacheKey: `${renderingIntent}_${annotationStorageSerializable.hash}`, - annotationStorageSerializable - }; - } - destroy() { - if (this.destroyCapability) { - return this.destroyCapability.promise; - } - this.destroyed = true; - this.destroyCapability = new _util.PromiseCapability(); - this.#passwordCapability?.reject(new Error("Worker was destroyed during onPassword callback")); - const waitOn = []; - for (const page of this.#pageCache.values()) { - waitOn.push(page._destroy()); - } - this.#pageCache.clear(); - this.#pagePromises.clear(); - if (this.hasOwnProperty("annotationStorage")) { - this.annotationStorage.resetModified(); - } - const terminated = this.messageHandler.sendWithPromise("Terminate", null); - waitOn.push(terminated); - Promise.all(waitOn).then(() => { - this.commonObjs.clear(); - this.fontLoader.clear(); - this.#methodPromises.clear(); - this.filterFactory.destroy(); - this._networkStream?.cancelAllRequests(new _util.AbortException("Worker was terminated.")); - if (this.messageHandler) { - this.messageHandler.destroy(); - this.messageHandler = null; - } - this.destroyCapability.resolve(); - }, this.destroyCapability.reject); - return this.destroyCapability.promise; - } - setupMessageHandler() { - const { - messageHandler, - loadingTask - } = this; - messageHandler.on("GetReader", (data, sink) => { - (0, _util.assert)(this._networkStream, "GetReader - no `IPDFStream` instance available."); - this._fullReader = this._networkStream.getFullReader(); - this._fullReader.onProgress = evt => { - this._lastProgress = { - loaded: evt.loaded, - total: evt.total - }; - }; - sink.onPull = () => { - this._fullReader.read().then(function ({ - value, - done - }) { - if (done) { - sink.close(); - return; - } - (0, _util.assert)(value instanceof ArrayBuffer, "GetReader - expected an ArrayBuffer."); - sink.enqueue(new Uint8Array(value), 1, [value]); - }).catch(reason => { - sink.error(reason); - }); - }; - sink.onCancel = reason => { - this._fullReader.cancel(reason); - sink.ready.catch(readyReason => { - if (this.destroyed) { - return; - } - throw readyReason; - }); - }; - }); - messageHandler.on("ReaderHeadersReady", data => { - const headersCapability = new _util.PromiseCapability(); - const fullReader = this._fullReader; - fullReader.headersReady.then(() => { - if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { - if (this._lastProgress) { - loadingTask.onProgress?.(this._lastProgress); - } - fullReader.onProgress = evt => { - loadingTask.onProgress?.({ - loaded: evt.loaded, - total: evt.total - }); - }; - } - headersCapability.resolve({ - isStreamingSupported: fullReader.isStreamingSupported, - isRangeSupported: fullReader.isRangeSupported, - contentLength: fullReader.contentLength - }); - }, headersCapability.reject); - return headersCapability.promise; - }); - messageHandler.on("GetRangeReader", (data, sink) => { - (0, _util.assert)(this._networkStream, "GetRangeReader - no `IPDFStream` instance available."); - const rangeReader = this._networkStream.getRangeReader(data.begin, data.end); - if (!rangeReader) { - sink.close(); - return; - } - sink.onPull = () => { - rangeReader.read().then(function ({ - value, - done - }) { - if (done) { - sink.close(); - return; - } - (0, _util.assert)(value instanceof ArrayBuffer, "GetRangeReader - expected an ArrayBuffer."); - sink.enqueue(new Uint8Array(value), 1, [value]); - }).catch(reason => { - sink.error(reason); - }); - }; - sink.onCancel = reason => { - rangeReader.cancel(reason); - sink.ready.catch(readyReason => { - if (this.destroyed) { - return; - } - throw readyReason; - }); - }; - }); - messageHandler.on("GetDoc", ({ - pdfInfo - }) => { - this._numPages = pdfInfo.numPages; - this._htmlForXfa = pdfInfo.htmlForXfa; - delete pdfInfo.htmlForXfa; - loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); - }); - messageHandler.on("DocException", function (ex) { - let reason; - switch (ex.name) { - case "PasswordException": - reason = new _util.PasswordException(ex.message, ex.code); - break; - case "InvalidPDFException": - reason = new _util.InvalidPDFException(ex.message); - break; - case "MissingPDFException": - reason = new _util.MissingPDFException(ex.message); - break; - case "UnexpectedResponseException": - reason = new _util.UnexpectedResponseException(ex.message, ex.status); - break; - case "UnknownErrorException": - reason = new _util.UnknownErrorException(ex.message, ex.details); - break; - default: - (0, _util.unreachable)("DocException - expected a valid Error."); - } - loadingTask._capability.reject(reason); - }); - messageHandler.on("PasswordRequest", exception => { - this.#passwordCapability = new _util.PromiseCapability(); - if (loadingTask.onPassword) { - const updatePassword = password => { - if (password instanceof Error) { - this.#passwordCapability.reject(password); - } else { - this.#passwordCapability.resolve({ - password - }); - } - }; - try { - loadingTask.onPassword(updatePassword, exception.code); - } catch (ex) { - this.#passwordCapability.reject(ex); - } - } else { - this.#passwordCapability.reject(new _util.PasswordException(exception.message, exception.code)); - } - return this.#passwordCapability.promise; - }); - messageHandler.on("DataLoaded", data => { - loadingTask.onProgress?.({ - loaded: data.length, - total: data.length - }); - this.downloadInfoCapability.resolve(data); - }); - messageHandler.on("StartRenderPage", data => { - if (this.destroyed) { - return; - } - const page = this.#pageCache.get(data.pageIndex); - page._startRenderPage(data.transparency, data.cacheKey); - }); - messageHandler.on("commonobj", ([id, type, exportedData]) => { - if (this.destroyed) { - return; - } - if (this.commonObjs.has(id)) { - return; - } - switch (type) { - case "Font": - const params = this._params; - if ("error" in exportedData) { - const exportedError = exportedData.error; - (0, _util.warn)(`Error during font loading: ${exportedError}`); - this.commonObjs.resolve(id, exportedError); - break; - } - const inspectFont = params.pdfBug && globalThis.FontInspector?.enabled ? (font, url) => globalThis.FontInspector.fontAdded(font, url) : null; - const font = new _font_loader.FontFaceObject(exportedData, { - isEvalSupported: params.isEvalSupported, - disableFontFace: params.disableFontFace, - ignoreErrors: params.ignoreErrors, - inspectFont - }); - this.fontLoader.bind(font).catch(reason => { - return messageHandler.sendWithPromise("FontFallback", { - id - }); - }).finally(() => { - if (!params.fontExtraProperties && font.data) { - font.data = null; - } - this.commonObjs.resolve(id, font); - }); - break; - case "FontPath": - case "Image": - case "Pattern": - this.commonObjs.resolve(id, exportedData); - break; - default: - throw new Error(`Got unknown common object type ${type}`); - } - }); - messageHandler.on("obj", ([id, pageIndex, type, imageData]) => { - if (this.destroyed) { - return; - } - const pageProxy = this.#pageCache.get(pageIndex); - if (pageProxy.objs.has(id)) { - return; - } - switch (type) { - case "Image": - pageProxy.objs.resolve(id, imageData); - if (imageData) { - let length; - if (imageData.bitmap) { - const { - width, - height - } = imageData; - length = width * height * 4; - } else { - length = imageData.data?.length || 0; - } - if (length > _util.MAX_IMAGE_SIZE_TO_CACHE) { - pageProxy._maybeCleanupAfterRender = true; - } - } - break; - case "Pattern": - pageProxy.objs.resolve(id, imageData); - break; - default: - throw new Error(`Got unknown object type ${type}`); - } - }); - messageHandler.on("DocProgress", data => { - if (this.destroyed) { - return; - } - loadingTask.onProgress?.({ - loaded: data.loaded, - total: data.total - }); - }); - messageHandler.on("FetchBuiltInCMap", data => { - if (this.destroyed) { - return Promise.reject(new Error("Worker was destroyed.")); - } - if (!this.cMapReaderFactory) { - return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.")); - } - return this.cMapReaderFactory.fetch(data); - }); - messageHandler.on("FetchStandardFontData", data => { - if (this.destroyed) { - return Promise.reject(new Error("Worker was destroyed.")); - } - if (!this.standardFontDataFactory) { - return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")); - } - return this.standardFontDataFactory.fetch(data); - }); - } - getData() { - return this.messageHandler.sendWithPromise("GetData", null); - } - saveDocument() { - if (this.annotationStorage.size <= 0) { - (0, _util.warn)("saveDocument called while `annotationStorage` is empty, " + "please use the getData-method instead."); - } - const { - map, - transfers - } = this.annotationStorage.serializable; - return this.messageHandler.sendWithPromise("SaveDocument", { - isPureXfa: !!this._htmlForXfa, - numPages: this._numPages, - annotationStorage: map, - filename: this._fullReader?.filename ?? null - }, transfers).finally(() => { - this.annotationStorage.resetModified(); - }); - } - getPage(pageNumber) { - if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { - return Promise.reject(new Error("Invalid page request.")); - } - const pageIndex = pageNumber - 1, - cachedPromise = this.#pagePromises.get(pageIndex); - if (cachedPromise) { - return cachedPromise; - } - const promise = this.messageHandler.sendWithPromise("GetPage", { - pageIndex - }).then(pageInfo => { - if (this.destroyed) { - throw new Error("Transport destroyed"); - } - const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug); - this.#pageCache.set(pageIndex, page); - return page; - }); - this.#pagePromises.set(pageIndex, promise); - return promise; - } - getPageIndex(ref) { - if (typeof ref !== "object" || ref === null || !Number.isInteger(ref.num) || ref.num < 0 || !Number.isInteger(ref.gen) || ref.gen < 0) { - return Promise.reject(new Error("Invalid pageIndex request.")); - } - return this.messageHandler.sendWithPromise("GetPageIndex", { - num: ref.num, - gen: ref.gen - }); - } - getAnnotations(pageIndex, intent) { - return this.messageHandler.sendWithPromise("GetAnnotations", { - pageIndex, - intent - }); - } - getFieldObjects() { - return this.#cacheSimpleMethod("GetFieldObjects"); - } - hasJSActions() { - return this.#cacheSimpleMethod("HasJSActions"); - } - getCalculationOrderIds() { - return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null); - } - getDestinations() { - return this.messageHandler.sendWithPromise("GetDestinations", null); - } - getDestination(id) { - if (typeof id !== "string") { - return Promise.reject(new Error("Invalid destination request.")); - } - return this.messageHandler.sendWithPromise("GetDestination", { - id - }); - } - getPageLabels() { - return this.messageHandler.sendWithPromise("GetPageLabels", null); - } - getPageLayout() { - return this.messageHandler.sendWithPromise("GetPageLayout", null); - } - getPageMode() { - return this.messageHandler.sendWithPromise("GetPageMode", null); - } - getViewerPreferences() { - return this.messageHandler.sendWithPromise("GetViewerPreferences", null); - } - getOpenAction() { - return this.messageHandler.sendWithPromise("GetOpenAction", null); - } - getAttachments() { - return this.messageHandler.sendWithPromise("GetAttachments", null); - } - getDocJSActions() { - return this.#cacheSimpleMethod("GetDocJSActions"); - } - getPageJSActions(pageIndex) { - return this.messageHandler.sendWithPromise("GetPageJSActions", { - pageIndex - }); - } - getStructTree(pageIndex) { - return this.messageHandler.sendWithPromise("GetStructTree", { - pageIndex - }); - } - getOutline() { - return this.messageHandler.sendWithPromise("GetOutline", null); - } - getOptionalContentConfig() { - return this.messageHandler.sendWithPromise("GetOptionalContentConfig", null).then(results => { - return new _optional_content_config.OptionalContentConfig(results); - }); - } - getPermissions() { - return this.messageHandler.sendWithPromise("GetPermissions", null); - } - getMetadata() { - const name = "GetMetadata", - cachedPromise = this.#methodPromises.get(name); - if (cachedPromise) { - return cachedPromise; - } - const promise = this.messageHandler.sendWithPromise(name, null).then(results => { - return { - info: results[0], - metadata: results[1] ? new _metadata.Metadata(results[1]) : null, - contentDispositionFilename: this._fullReader?.filename ?? null, - contentLength: this._fullReader?.contentLength ?? null - }; - }); - this.#methodPromises.set(name, promise); - return promise; - } - getMarkInfo() { - return this.messageHandler.sendWithPromise("GetMarkInfo", null); - } - async startCleanup(keepLoadedFonts = false) { - if (this.destroyed) { - return; - } - await this.messageHandler.sendWithPromise("Cleanup", null); - for (const page of this.#pageCache.values()) { - const cleanupSuccessful = page.cleanup(); - if (!cleanupSuccessful) { - throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`); - } - } - this.commonObjs.clear(); - if (!keepLoadedFonts) { - this.fontLoader.clear(); - } - this.#methodPromises.clear(); - this.filterFactory.destroy(true); - } - get loadingParams() { - const { - disableAutoFetch, - enableXfa - } = this._params; - return (0, _util.shadow)(this, "loadingParams", { - disableAutoFetch, - enableXfa - }); - } -} -class PDFObjects { - #objs = Object.create(null); - #ensureObj(objId) { - return this.#objs[objId] ||= { - capability: new _util.PromiseCapability(), - data: null - }; - } - get(objId, callback = null) { - if (callback) { - const obj = this.#ensureObj(objId); - obj.capability.promise.then(() => callback(obj.data)); - return null; - } - const obj = this.#objs[objId]; - if (!obj?.capability.settled) { - throw new Error(`Requesting object that isn't resolved yet ${objId}.`); - } - return obj.data; - } - has(objId) { - const obj = this.#objs[objId]; - return obj?.capability.settled || false; - } - resolve(objId, data = null) { - const obj = this.#ensureObj(objId); - obj.data = data; - obj.capability.resolve(); - } - clear() { - for (const objId in this.#objs) { - const { - data - } = this.#objs[objId]; - data?.bitmap?.close(); - } - this.#objs = Object.create(null); - } -} -class RenderTask { - #internalRenderTask = null; - constructor(internalRenderTask) { - this.#internalRenderTask = internalRenderTask; - this.onContinue = null; - } - get promise() { - return this.#internalRenderTask.capability.promise; - } - cancel(extraDelay = 0) { - this.#internalRenderTask.cancel(null, extraDelay); - } - get separateAnnots() { - const { - separateAnnots - } = this.#internalRenderTask.operatorList; - if (!separateAnnots) { - return false; - } - const { - annotationCanvasMap - } = this.#internalRenderTask; - return separateAnnots.form || separateAnnots.canvas && annotationCanvasMap?.size > 0; - } -} -exports.RenderTask = RenderTask; -class InternalRenderTask { - static #canvasInUse = new WeakSet(); - constructor({ - callback, - params, - objs, - commonObjs, - annotationCanvasMap, - operatorList, - pageIndex, - canvasFactory, - filterFactory, - useRequestAnimationFrame = false, - pdfBug = false, - pageColors = null - }) { - this.callback = callback; - this.params = params; - this.objs = objs; - this.commonObjs = commonObjs; - this.annotationCanvasMap = annotationCanvasMap; - this.operatorListIdx = null; - this.operatorList = operatorList; - this._pageIndex = pageIndex; - this.canvasFactory = canvasFactory; - this.filterFactory = filterFactory; - this._pdfBug = pdfBug; - this.pageColors = pageColors; - this.running = false; - this.graphicsReadyCallback = null; - this.graphicsReady = false; - this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; - this.cancelled = false; - this.capability = new _util.PromiseCapability(); - this.task = new RenderTask(this); - this._cancelBound = this.cancel.bind(this); - this._continueBound = this._continue.bind(this); - this._scheduleNextBound = this._scheduleNext.bind(this); - this._nextBound = this._next.bind(this); - this._canvas = params.canvasContext.canvas; - } - get completed() { - return this.capability.promise.catch(function () {}); - } - initializeGraphics({ - transparency = false, - optionalContentConfig - }) { - if (this.cancelled) { - return; - } - if (this._canvas) { - if (InternalRenderTask.#canvasInUse.has(this._canvas)) { - throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed."); - } - InternalRenderTask.#canvasInUse.add(this._canvas); - } - if (this._pdfBug && globalThis.StepperManager?.enabled) { - this.stepper = globalThis.StepperManager.create(this._pageIndex); - this.stepper.init(this.operatorList); - this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); - } - const { - canvasContext, - viewport, - transform, - background - } = this.params; - this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { - optionalContentConfig - }, this.annotationCanvasMap, this.pageColors); - this.gfx.beginDrawing({ - transform, - viewport, - transparency, - background - }); - this.operatorListIdx = 0; - this.graphicsReady = true; - this.graphicsReadyCallback?.(); - } - cancel(error = null, extraDelay = 0) { - this.running = false; - this.cancelled = true; - this.gfx?.endDrawing(); - InternalRenderTask.#canvasInUse.delete(this._canvas); - this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay)); - } - operatorListChanged() { - if (!this.graphicsReady) { - this.graphicsReadyCallback ||= this._continueBound; - return; - } - this.stepper?.updateOperatorList(this.operatorList); - if (this.running) { - return; - } - this._continue(); - } - _continue() { - this.running = true; - if (this.cancelled) { - return; - } - if (this.task.onContinue) { - this.task.onContinue(this._scheduleNextBound); - } else { - this._scheduleNext(); - } - } - _scheduleNext() { - if (this._useRequestAnimationFrame) { - window.requestAnimationFrame(() => { - this._nextBound().catch(this._cancelBound); - }); - } else { - Promise.resolve().then(this._nextBound).catch(this._cancelBound); - } - } - async _next() { - if (this.cancelled) { - return; - } - this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); - if (this.operatorListIdx === this.operatorList.argsArray.length) { - this.running = false; - if (this.operatorList.lastChunk) { - this.gfx.endDrawing(); - InternalRenderTask.#canvasInUse.delete(this._canvas); - this.callback(); - } - } - } -} -const version = exports.version = '3.11.176'; -const build = exports.build = '92d22853e'; - -/***/ }), -/* 3 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.SerializableEmpty = exports.PrintAnnotationStorage = exports.AnnotationStorage = void 0; -var _util = __w_pdfjs_require__(1); -var _editor = __w_pdfjs_require__(4); -var _murmurhash = __w_pdfjs_require__(8); -const SerializableEmpty = exports.SerializableEmpty = Object.freeze({ - map: null, - hash: "", - transfers: undefined -}); -class AnnotationStorage { - #modified = false; - #storage = new Map(); - constructor() { - this.onSetModified = null; - this.onResetModified = null; - this.onAnnotationEditor = null; - } - getValue(key, defaultValue) { - const value = this.#storage.get(key); - if (value === undefined) { - return defaultValue; - } - return Object.assign(defaultValue, value); - } - getRawValue(key) { - return this.#storage.get(key); - } - remove(key) { - this.#storage.delete(key); - if (this.#storage.size === 0) { - this.resetModified(); - } - if (typeof this.onAnnotationEditor === "function") { - for (const value of this.#storage.values()) { - if (value instanceof _editor.AnnotationEditor) { - return; - } - } - this.onAnnotationEditor(null); - } - } - setValue(key, value) { - const obj = this.#storage.get(key); - let modified = false; - if (obj !== undefined) { - for (const [entry, val] of Object.entries(value)) { - if (obj[entry] !== val) { - modified = true; - obj[entry] = val; - } - } - } else { - modified = true; - this.#storage.set(key, value); - } - if (modified) { - this.#setModified(); - } - if (value instanceof _editor.AnnotationEditor && typeof this.onAnnotationEditor === "function") { - this.onAnnotationEditor(value.constructor._type); - } - } - has(key) { - return this.#storage.has(key); - } - getAll() { - return this.#storage.size > 0 ? (0, _util.objectFromMap)(this.#storage) : null; - } - setAll(obj) { - for (const [key, val] of Object.entries(obj)) { - this.setValue(key, val); - } - } - get size() { - return this.#storage.size; - } - #setModified() { - if (!this.#modified) { - this.#modified = true; - if (typeof this.onSetModified === "function") { - this.onSetModified(); - } - } - } - resetModified() { - if (this.#modified) { - this.#modified = false; - if (typeof this.onResetModified === "function") { - this.onResetModified(); - } - } - } - get print() { - return new PrintAnnotationStorage(this); - } - get serializable() { - if (this.#storage.size === 0) { - return SerializableEmpty; - } - const map = new Map(), - hash = new _murmurhash.MurmurHash3_64(), - transfers = []; - const context = Object.create(null); - let hasBitmap = false; - for (const [key, val] of this.#storage) { - const serialized = val instanceof _editor.AnnotationEditor ? val.serialize(false, context) : val; - if (serialized) { - map.set(key, serialized); - hash.update(`${key}:${JSON.stringify(serialized)}`); - hasBitmap ||= !!serialized.bitmap; - } - } - if (hasBitmap) { - for (const value of map.values()) { - if (value.bitmap) { - transfers.push(value.bitmap); - } - } - } - return map.size > 0 ? { - map, - hash: hash.hexdigest(), - transfers - } : SerializableEmpty; - } -} -exports.AnnotationStorage = AnnotationStorage; -class PrintAnnotationStorage extends AnnotationStorage { - #serializable; - constructor(parent) { - super(); - const { - map, - hash, - transfers - } = parent.serializable; - const clone = structuredClone(map, transfers ? { - transfer: transfers - } : null); - this.#serializable = { - map: clone, - hash, - transfers - }; - } - get print() { - (0, _util.unreachable)("Should not call PrintAnnotationStorage.print"); - } - get serializable() { - return this.#serializable; - } -} -exports.PrintAnnotationStorage = PrintAnnotationStorage; - -/***/ }), -/* 4 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.AnnotationEditor = void 0; -var _tools = __w_pdfjs_require__(5); -var _util = __w_pdfjs_require__(1); -var _display_utils = __w_pdfjs_require__(6); -class AnnotationEditor { - #altText = ""; - #altTextDecorative = false; - #altTextButton = null; - #altTextTooltip = null; - #altTextTooltipTimeout = null; - #keepAspectRatio = false; - #resizersDiv = null; - #boundFocusin = this.focusin.bind(this); - #boundFocusout = this.focusout.bind(this); - #hasBeenClicked = false; - #isEditing = false; - #isInEditMode = false; - _initialOptions = Object.create(null); - _uiManager = null; - _focusEventsAllowed = true; - _l10nPromise = null; - #isDraggable = false; - #zIndex = AnnotationEditor._zIndex++; - static _borderLineWidth = -1; - static _colorManager = new _tools.ColorManager(); - static _zIndex = 1; - static SMALL_EDITOR_SIZE = 0; - constructor(parameters) { - if (this.constructor === AnnotationEditor) { - (0, _util.unreachable)("Cannot initialize AnnotationEditor."); - } - this.parent = parameters.parent; - this.id = parameters.id; - this.width = this.height = null; - this.pageIndex = parameters.parent.pageIndex; - this.name = parameters.name; - this.div = null; - this._uiManager = parameters.uiManager; - this.annotationElementId = null; - this._willKeepAspectRatio = false; - this._initialOptions.isCentered = parameters.isCentered; - this._structTreeParentId = null; - const { - rotation, - rawDims: { - pageWidth, - pageHeight, - pageX, - pageY - } - } = this.parent.viewport; - this.rotation = rotation; - this.pageRotation = (360 + rotation - this._uiManager.viewParameters.rotation) % 360; - this.pageDimensions = [pageWidth, pageHeight]; - this.pageTranslation = [pageX, pageY]; - const [width, height] = this.parentDimensions; - this.x = parameters.x / width; - this.y = parameters.y / height; - this.isAttachedToDOM = false; - this.deleted = false; - } - get editorType() { - return Object.getPrototypeOf(this).constructor._type; - } - static get _defaultLineColor() { - return (0, _util.shadow)(this, "_defaultLineColor", this._colorManager.getHexCode("CanvasText")); - } - static deleteAnnotationElement(editor) { - const fakeEditor = new FakeEditor({ - id: editor.parent.getNextId(), - parent: editor.parent, - uiManager: editor._uiManager - }); - fakeEditor.annotationElementId = editor.annotationElementId; - fakeEditor.deleted = true; - fakeEditor._uiManager.addToAnnotationStorage(fakeEditor); - } - static initialize(l10n, options = null) { - AnnotationEditor._l10nPromise ||= new Map(["editor_alt_text_button_label", "editor_alt_text_edit_button_label", "editor_alt_text_decorative_tooltip"].map(str => [str, l10n.get(str)])); - if (options?.strings) { - for (const str of options.strings) { - AnnotationEditor._l10nPromise.set(str, l10n.get(str)); - } - } - if (AnnotationEditor._borderLineWidth !== -1) { - return; - } - const style = getComputedStyle(document.documentElement); - AnnotationEditor._borderLineWidth = parseFloat(style.getPropertyValue("--outline-width")) || 0; - } - static updateDefaultParams(_type, _value) {} - static get defaultPropertiesToUpdate() { - return []; - } - static isHandlingMimeForPasting(mime) { + protocol + } = baseUrl ? new URL(url, baseUrl) : new URL(url); + return protocol === "http:" || protocol === "https:"; + } catch { return false; } - static paste(item, parent) { - (0, _util.unreachable)("Not implemented"); - } - get propertiesToUpdate() { - return []; - } - get _isDraggable() { - return this.#isDraggable; - } - set _isDraggable(value) { - this.#isDraggable = value; - this.div?.classList.toggle("draggable", value); - } - center() { - const [pageWidth, pageHeight] = this.pageDimensions; - switch (this.parentRotation) { - case 90: - this.x -= this.height * pageHeight / (pageWidth * 2); - this.y += this.width * pageWidth / (pageHeight * 2); - break; - case 180: - this.x += this.width / 2; - this.y += this.height / 2; - break; - case 270: - this.x += this.height * pageHeight / (pageWidth * 2); - this.y -= this.width * pageWidth / (pageHeight * 2); - break; - default: - this.x -= this.width / 2; - this.y -= this.height / 2; - break; +} +function noContextMenu(e) { + e.preventDefault(); +} +function deprecated(details) { + console.log("Deprecated API usage: " + details); +} +let pdfDateStringRegex; +class PDFDateString { + static toDateObject(input) { + if (!input || typeof input !== "string") { + return null; } - this.fixAndSetPosition(); - } - addCommands(params) { - this._uiManager.addCommands(params); - } - get currentLayer() { - return this._uiManager.currentLayer; - } - setInBackground() { - this.div.style.zIndex = 0; - } - setInForeground() { - this.div.style.zIndex = this.#zIndex; - } - setParent(parent) { - if (parent !== null) { - this.pageIndex = parent.pageIndex; - this.pageDimensions = parent.pageDimensions; + pdfDateStringRegex ||= new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?"); + const matches = pdfDateStringRegex.exec(input); + if (!matches) { + return null; } - this.parent = parent; - } - focusin(event) { - if (!this._focusEventsAllowed) { - return; - } - if (!this.#hasBeenClicked) { - this.parent.setSelected(this); - } else { - this.#hasBeenClicked = false; + const year = parseInt(matches[1], 10); + let month = parseInt(matches[2], 10); + month = month >= 1 && month <= 12 ? month - 1 : 0; + let day = parseInt(matches[3], 10); + day = day >= 1 && day <= 31 ? day : 1; + let hour = parseInt(matches[4], 10); + hour = hour >= 0 && hour <= 23 ? hour : 0; + let minute = parseInt(matches[5], 10); + minute = minute >= 0 && minute <= 59 ? minute : 0; + let second = parseInt(matches[6], 10); + second = second >= 0 && second <= 59 ? second : 0; + const universalTimeRelation = matches[7] || "Z"; + let offsetHour = parseInt(matches[8], 10); + offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; + let offsetMinute = parseInt(matches[9], 10) || 0; + offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; + if (universalTimeRelation === "-") { + hour += offsetHour; + minute += offsetMinute; + } else if (universalTimeRelation === "+") { + hour -= offsetHour; + minute -= offsetMinute; } + return new Date(Date.UTC(year, month, day, hour, minute, second)); } - focusout(event) { - if (!this._focusEventsAllowed) { - return; - } - if (!this.isAttachedToDOM) { - return; - } - const target = event.relatedTarget; - if (target?.closest(`#${this.id}`)) { - return; - } - event.preventDefault(); - if (!this.parent?.isMultipleSelection) { - this.commitOrRemove(); - } +} +function getXfaPageViewport(xfaPage, { + scale = 1, + rotation = 0 +}) { + const { + width, + height + } = xfaPage.attributes.style; + const viewBox = [0, 0, parseInt(width), parseInt(height)]; + return new PageViewport({ + viewBox, + scale, + rotation + }); +} +function getRGB(color) { + if (color.startsWith("#")) { + const colorRGB = parseInt(color.slice(1), 16); + return [(colorRGB & 0xff0000) >> 16, (colorRGB & 0x00ff00) >> 8, colorRGB & 0x0000ff]; } - commitOrRemove() { - if (this.isEmpty()) { - this.remove(); - } else { - this.commit(); - } + if (color.startsWith("rgb(")) { + return color.slice(4, -1).split(",").map(x => parseInt(x)); } - commit() { - this.addToAnnotationStorage(); + if (color.startsWith("rgba(")) { + return color.slice(5, -1).split(",").map(x => parseInt(x)).slice(0, 3); } - addToAnnotationStorage() { - this._uiManager.addToAnnotationStorage(this); + warn(`Not a valid color format: "${color}"`); + return [0, 0, 0]; +} +function getColorValues(colors) { + const span = document.createElement("span"); + span.style.visibility = "hidden"; + document.body.append(span); + for (const name of colors.keys()) { + span.style.color = name; + const computedColor = window.getComputedStyle(span).color; + colors.set(name, getRGB(computedColor)); } - setAt(x, y, tx, ty) { - const [width, height] = this.parentDimensions; - [tx, ty] = this.screenToPageTranslation(tx, ty); - this.x = (x + tx) / width; - this.y = (y + ty) / height; - this.fixAndSetPosition(); - } - #translate([width, height], x, y) { - [x, y] = this.screenToPageTranslation(x, y); - this.x += x / width; - this.y += y / height; - this.fixAndSetPosition(); - } - translate(x, y) { - this.#translate(this.parentDimensions, x, y); - } - translateInPage(x, y) { - this.#translate(this.pageDimensions, x, y); - this.div.scrollIntoView({ - block: "nearest" - }); - } - drag(tx, ty) { - const [parentWidth, parentHeight] = this.parentDimensions; - this.x += tx / parentWidth; - this.y += ty / parentHeight; - if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) { - const { - x, - y - } = this.div.getBoundingClientRect(); - if (this.parent.findNewParent(this, x, y)) { - this.x -= Math.floor(this.x); - this.y -= Math.floor(this.y); - } - } - let { - x, - y - } = this; - const [bx, by] = this.#getBaseTranslation(); - x += bx; - y += by; - this.div.style.left = `${(100 * x).toFixed(2)}%`; - this.div.style.top = `${(100 * y).toFixed(2)}%`; - this.div.scrollIntoView({ - block: "nearest" - }); - } - #getBaseTranslation() { - const [parentWidth, parentHeight] = this.parentDimensions; + span.remove(); +} +function getCurrentTransform(ctx) { + const { + a, + b, + c, + d, + e, + f + } = ctx.getTransform(); + return [a, b, c, d, e, f]; +} +function getCurrentTransformInverse(ctx) { + const { + a, + b, + c, + d, + e, + f + } = ctx.getTransform().invertSelf(); + return [a, b, c, d, e, f]; +} +function setLayerDimensions(div, viewport, mustFlip = false, mustRotate = true) { + if (viewport instanceof PageViewport) { const { - _borderLineWidth - } = AnnotationEditor; - const x = _borderLineWidth / parentWidth; - const y = _borderLineWidth / parentHeight; - switch (this.rotation) { - case 90: - return [-x, y]; - case 180: - return [x, y]; - case 270: - return [x, -y]; - default: - return [-x, -y]; - } - } - fixAndSetPosition() { - const [pageWidth, pageHeight] = this.pageDimensions; - let { - x, - y, - width, - height - } = this; - width *= pageWidth; - height *= pageHeight; - x *= pageWidth; - y *= pageHeight; - switch (this.rotation) { - case 0: - x = Math.max(0, Math.min(pageWidth - width, x)); - y = Math.max(0, Math.min(pageHeight - height, y)); - break; - case 90: - x = Math.max(0, Math.min(pageWidth - height, x)); - y = Math.min(pageHeight, Math.max(width, y)); - break; - case 180: - x = Math.min(pageWidth, Math.max(width, x)); - y = Math.min(pageHeight, Math.max(height, y)); - break; - case 270: - x = Math.min(pageWidth, Math.max(height, x)); - y = Math.max(0, Math.min(pageHeight - width, y)); - break; - } - this.x = x /= pageWidth; - this.y = y /= pageHeight; - const [bx, by] = this.#getBaseTranslation(); - x += bx; - y += by; + pageWidth, + pageHeight + } = viewport.rawDims; const { style - } = this.div; - style.left = `${(100 * x).toFixed(2)}%`; - style.top = `${(100 * y).toFixed(2)}%`; - this.moveInDOM(); - } - static #rotatePoint(x, y, angle) { - switch (angle) { - case 90: - return [y, -x]; - case 180: - return [-x, -y]; - case 270: - return [-y, x]; - default: - return [x, y]; - } - } - screenToPageTranslation(x, y) { - return AnnotationEditor.#rotatePoint(x, y, this.parentRotation); - } - pageTranslationToScreen(x, y) { - return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation); - } - #getRotationMatrix(rotation) { - switch (rotation) { - case 90: - { - const [pageWidth, pageHeight] = this.pageDimensions; - return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0]; - } - case 180: - return [-1, 0, 0, -1]; - case 270: - { - const [pageWidth, pageHeight] = this.pageDimensions; - return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0]; - } - default: - return [1, 0, 0, 1]; - } - } - get parentScale() { - return this._uiManager.viewParameters.realScale; - } - get parentRotation() { - return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360; - } - get parentDimensions() { - const { - parentScale, - pageDimensions: [pageWidth, pageHeight] - } = this; - const scaledWidth = pageWidth * parentScale; - const scaledHeight = pageHeight * parentScale; - return _util.FeatureTest.isCSSRoundSupported ? [Math.round(scaledWidth), Math.round(scaledHeight)] : [scaledWidth, scaledHeight]; - } - setDims(width, height) { - const [parentWidth, parentHeight] = this.parentDimensions; - this.div.style.width = `${(100 * width / parentWidth).toFixed(2)}%`; - if (!this.#keepAspectRatio) { - this.div.style.height = `${(100 * height / parentHeight).toFixed(2)}%`; - } - this.#altTextButton?.classList.toggle("small", width < AnnotationEditor.SMALL_EDITOR_SIZE || height < AnnotationEditor.SMALL_EDITOR_SIZE); - } - fixDims() { - const { - style - } = this.div; - const { - height, - width - } = style; - const widthPercent = width.endsWith("%"); - const heightPercent = !this.#keepAspectRatio && height.endsWith("%"); - if (widthPercent && heightPercent) { - return; - } - const [parentWidth, parentHeight] = this.parentDimensions; - if (!widthPercent) { - style.width = `${(100 * parseFloat(width) / parentWidth).toFixed(2)}%`; - } - if (!this.#keepAspectRatio && !heightPercent) { - style.height = `${(100 * parseFloat(height) / parentHeight).toFixed(2)}%`; - } - } - getInitialTranslation() { - return [0, 0]; - } - #createResizers() { - if (this.#resizersDiv) { - return; - } - this.#resizersDiv = document.createElement("div"); - this.#resizersDiv.classList.add("resizers"); - const classes = ["topLeft", "topRight", "bottomRight", "bottomLeft"]; - if (!this._willKeepAspectRatio) { - classes.push("topMiddle", "middleRight", "bottomMiddle", "middleLeft"); - } - for (const name of classes) { - const div = document.createElement("div"); - this.#resizersDiv.append(div); - div.classList.add("resizer", name); - div.addEventListener("pointerdown", this.#resizerPointerdown.bind(this, name)); - div.addEventListener("contextmenu", _display_utils.noContextMenu); - } - this.div.prepend(this.#resizersDiv); - } - #resizerPointerdown(name, event) { - event.preventDefault(); - const { - isMac - } = _util.FeatureTest.platform; - if (event.button !== 0 || event.ctrlKey && isMac) { - return; - } - const boundResizerPointermove = this.#resizerPointermove.bind(this, name); - const savedDraggable = this._isDraggable; - this._isDraggable = false; - const pointerMoveOptions = { - passive: true, - capture: true - }; - window.addEventListener("pointermove", boundResizerPointermove, pointerMoveOptions); - const savedX = this.x; - const savedY = this.y; - const savedWidth = this.width; - const savedHeight = this.height; - const savedParentCursor = this.parent.div.style.cursor; - const savedCursor = this.div.style.cursor; - this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(event.target).cursor; - const pointerUpCallback = () => { - this._isDraggable = savedDraggable; - window.removeEventListener("pointerup", pointerUpCallback); - window.removeEventListener("blur", pointerUpCallback); - window.removeEventListener("pointermove", boundResizerPointermove, pointerMoveOptions); - this.parent.div.style.cursor = savedParentCursor; - this.div.style.cursor = savedCursor; - const newX = this.x; - const newY = this.y; - const newWidth = this.width; - const newHeight = this.height; - if (newX === savedX && newY === savedY && newWidth === savedWidth && newHeight === savedHeight) { - return; - } - this.addCommands({ - cmd: () => { - this.width = newWidth; - this.height = newHeight; - this.x = newX; - this.y = newY; - const [parentWidth, parentHeight] = this.parentDimensions; - this.setDims(parentWidth * newWidth, parentHeight * newHeight); - this.fixAndSetPosition(); - }, - undo: () => { - this.width = savedWidth; - this.height = savedHeight; - this.x = savedX; - this.y = savedY; - const [parentWidth, parentHeight] = this.parentDimensions; - this.setDims(parentWidth * savedWidth, parentHeight * savedHeight); - this.fixAndSetPosition(); - }, - mustExec: true - }); - }; - window.addEventListener("pointerup", pointerUpCallback); - window.addEventListener("blur", pointerUpCallback); - } - #resizerPointermove(name, event) { - const [parentWidth, parentHeight] = this.parentDimensions; - const savedX = this.x; - const savedY = this.y; - const savedWidth = this.width; - const savedHeight = this.height; - const minWidth = AnnotationEditor.MIN_SIZE / parentWidth; - const minHeight = AnnotationEditor.MIN_SIZE / parentHeight; - const round = x => Math.round(x * 10000) / 10000; - const rotationMatrix = this.#getRotationMatrix(this.rotation); - const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y]; - const invRotationMatrix = this.#getRotationMatrix(360 - this.rotation); - const invTransf = (x, y) => [invRotationMatrix[0] * x + invRotationMatrix[2] * y, invRotationMatrix[1] * x + invRotationMatrix[3] * y]; - let getPoint; - let getOpposite; - let isDiagonal = false; - let isHorizontal = false; - switch (name) { - case "topLeft": - isDiagonal = true; - getPoint = (w, h) => [0, 0]; - getOpposite = (w, h) => [w, h]; - break; - case "topMiddle": - getPoint = (w, h) => [w / 2, 0]; - getOpposite = (w, h) => [w / 2, h]; - break; - case "topRight": - isDiagonal = true; - getPoint = (w, h) => [w, 0]; - getOpposite = (w, h) => [0, h]; - break; - case "middleRight": - isHorizontal = true; - getPoint = (w, h) => [w, h / 2]; - getOpposite = (w, h) => [0, h / 2]; - break; - case "bottomRight": - isDiagonal = true; - getPoint = (w, h) => [w, h]; - getOpposite = (w, h) => [0, 0]; - break; - case "bottomMiddle": - getPoint = (w, h) => [w / 2, h]; - getOpposite = (w, h) => [w / 2, 0]; - break; - case "bottomLeft": - isDiagonal = true; - getPoint = (w, h) => [0, h]; - getOpposite = (w, h) => [w, 0]; - break; - case "middleLeft": - isHorizontal = true; - getPoint = (w, h) => [0, h / 2]; - getOpposite = (w, h) => [w, h / 2]; - break; - } - const point = getPoint(savedWidth, savedHeight); - const oppositePoint = getOpposite(savedWidth, savedHeight); - let transfOppositePoint = transf(...oppositePoint); - const oppositeX = round(savedX + transfOppositePoint[0]); - const oppositeY = round(savedY + transfOppositePoint[1]); - let ratioX = 1; - let ratioY = 1; - let [deltaX, deltaY] = this.screenToPageTranslation(event.movementX, event.movementY); - [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight); - if (isDiagonal) { - const oldDiag = Math.hypot(savedWidth, savedHeight); - ratioX = ratioY = Math.max(Math.min(Math.hypot(oppositePoint[0] - point[0] - deltaX, oppositePoint[1] - point[1] - deltaY) / oldDiag, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight); - } else if (isHorizontal) { - ratioX = Math.max(minWidth, Math.min(1, Math.abs(oppositePoint[0] - point[0] - deltaX))) / savedWidth; + } = div; + const useRound = util_FeatureTest.isCSSRoundSupported; + const w = `var(--scale-factor) * ${pageWidth}px`, + h = `var(--scale-factor) * ${pageHeight}px`; + const widthStr = useRound ? `round(${w}, 1px)` : `calc(${w})`, + heightStr = useRound ? `round(${h}, 1px)` : `calc(${h})`; + if (!mustFlip || viewport.rotation % 180 === 0) { + style.width = widthStr; + style.height = heightStr; } else { - ratioY = Math.max(minHeight, Math.min(1, Math.abs(oppositePoint[1] - point[1] - deltaY))) / savedHeight; - } - const newWidth = round(savedWidth * ratioX); - const newHeight = round(savedHeight * ratioY); - transfOppositePoint = transf(...getOpposite(newWidth, newHeight)); - const newX = oppositeX - transfOppositePoint[0]; - const newY = oppositeY - transfOppositePoint[1]; - this.width = newWidth; - this.height = newHeight; - this.x = newX; - this.y = newY; - this.setDims(parentWidth * newWidth, parentHeight * newHeight); - this.fixAndSetPosition(); - } - async addAltTextButton() { - if (this.#altTextButton) { - return; - } - const altText = this.#altTextButton = document.createElement("button"); - altText.className = "altText"; - const msg = await AnnotationEditor._l10nPromise.get("editor_alt_text_button_label"); - altText.textContent = msg; - altText.setAttribute("aria-label", msg); - altText.tabIndex = "0"; - altText.addEventListener("contextmenu", _display_utils.noContextMenu); - altText.addEventListener("pointerdown", event => event.stopPropagation()); - altText.addEventListener("click", event => { - event.preventDefault(); - this._uiManager.editAltText(this); - }, { - capture: true - }); - altText.addEventListener("keydown", event => { - if (event.target === altText && event.key === "Enter") { - event.preventDefault(); - this._uiManager.editAltText(this); - } - }); - this.#setAltTextButtonState(); - this.div.append(altText); - if (!AnnotationEditor.SMALL_EDITOR_SIZE) { - const PERCENT = 40; - AnnotationEditor.SMALL_EDITOR_SIZE = Math.min(128, Math.round(altText.getBoundingClientRect().width * (1 + PERCENT / 100))); + style.width = heightStr; + style.height = widthStr; } } - async #setAltTextButtonState() { - const button = this.#altTextButton; - if (!button) { - return; - } - if (!this.#altText && !this.#altTextDecorative) { - button.classList.remove("done"); - this.#altTextTooltip?.remove(); - return; - } - AnnotationEditor._l10nPromise.get("editor_alt_text_edit_button_label").then(msg => { - button.setAttribute("aria-label", msg); - }); - let tooltip = this.#altTextTooltip; - if (!tooltip) { - this.#altTextTooltip = tooltip = document.createElement("span"); - tooltip.className = "tooltip"; - tooltip.setAttribute("role", "tooltip"); - const id = tooltip.id = `alt-text-tooltip-${this.id}`; - button.setAttribute("aria-describedby", id); - const DELAY_TO_SHOW_TOOLTIP = 100; - button.addEventListener("mouseenter", () => { - this.#altTextTooltipTimeout = setTimeout(() => { - this.#altTextTooltipTimeout = null; - this.#altTextTooltip.classList.add("show"); - this._uiManager._eventBus.dispatch("reporttelemetry", { - source: this, - details: { - type: "editing", - subtype: this.editorType, - data: { - action: "alt_text_tooltip" - } - } - }); - }, DELAY_TO_SHOW_TOOLTIP); - }); - button.addEventListener("mouseleave", () => { - clearTimeout(this.#altTextTooltipTimeout); - this.#altTextTooltipTimeout = null; - this.#altTextTooltip?.classList.remove("show"); - }); - } - button.classList.add("done"); - tooltip.innerText = this.#altTextDecorative ? await AnnotationEditor._l10nPromise.get("editor_alt_text_decorative_tooltip") : this.#altText; - if (!tooltip.parentNode) { - button.append(tooltip); - } + if (mustRotate) { + div.setAttribute("data-main-rotation", viewport.rotation); } - getClientDimensions() { - return this.div.getBoundingClientRect(); - } - get altTextData() { - return { - altText: this.#altText, - decorative: this.#altTextDecorative - }; - } - set altTextData({ - altText, - decorative - }) { - if (this.#altText === altText && this.#altTextDecorative === decorative) { - return; - } - this.#altText = altText; - this.#altTextDecorative = decorative; - this.#setAltTextButtonState(); +} + +;// CONCATENATED MODULE: ./src/display/editor/toolbar.js + +class EditorToolbar { + #toolbar = null; + #colorPicker = null; + #editor; + #buttons = null; + constructor(editor) { + this.#editor = editor; } render() { - this.div = document.createElement("div"); - this.div.setAttribute("data-editor-rotation", (360 - this.rotation) % 360); - this.div.className = this.name; - this.div.setAttribute("id", this.id); - this.div.setAttribute("tabIndex", 0); - this.setInForeground(); - this.div.addEventListener("focusin", this.#boundFocusin); - this.div.addEventListener("focusout", this.#boundFocusout); - const [parentWidth, parentHeight] = this.parentDimensions; - if (this.parentRotation % 180 !== 0) { - this.div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`; - this.div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`; + const editToolbar = this.#toolbar = document.createElement("div"); + editToolbar.className = "editToolbar"; + editToolbar.setAttribute("role", "toolbar"); + editToolbar.addEventListener("contextmenu", noContextMenu); + editToolbar.addEventListener("pointerdown", EditorToolbar.#pointerDown); + const buttons = this.#buttons = document.createElement("div"); + buttons.className = "buttons"; + editToolbar.append(buttons); + const position = this.#editor.toolbarPosition; + if (position) { + const { + style + } = editToolbar; + const x = this.#editor._uiManager.direction === "ltr" ? 1 - position[0] : position[0]; + style.insetInlineEnd = `${100 * x}%`; + style.top = `calc(${100 * position[1]}% + var(--editor-toolbar-vert-offset))`; } - const [tx, ty] = this.getInitialTranslation(); - this.translate(tx, ty); - (0, _tools.bindEvents)(this, this.div, ["pointerdown"]); - return this.div; + this.#addDeleteButton(); + return editToolbar; } - pointerdown(event) { - const { - isMac - } = _util.FeatureTest.platform; - if (event.button !== 0 || event.ctrlKey && isMac) { - event.preventDefault(); - return; - } - this.#hasBeenClicked = true; - this.#setUpDragSession(event); + static #pointerDown(e) { + e.stopPropagation(); } - #setUpDragSession(event) { - if (!this._isDraggable) { - return; - } - const isSelected = this._uiManager.isSelected(this); - this._uiManager.setUpDragSession(); - let pointerMoveOptions, pointerMoveCallback; - if (isSelected) { - pointerMoveOptions = { - passive: true, - capture: true - }; - pointerMoveCallback = e => { - const [tx, ty] = this.screenToPageTranslation(e.movementX, e.movementY); - this._uiManager.dragSelectedEditors(tx, ty); - }; - window.addEventListener("pointermove", pointerMoveCallback, pointerMoveOptions); - } - const pointerUpCallback = () => { - window.removeEventListener("pointerup", pointerUpCallback); - window.removeEventListener("blur", pointerUpCallback); - if (isSelected) { - window.removeEventListener("pointermove", pointerMoveCallback, pointerMoveOptions); - } - this.#hasBeenClicked = false; - if (!this._uiManager.endDragSession()) { - const { - isMac - } = _util.FeatureTest.platform; - if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) { - this.parent.toggleSelected(this); - } else { - this.parent.setSelected(this); - } - } - }; - window.addEventListener("pointerup", pointerUpCallback); - window.addEventListener("blur", pointerUpCallback); + #focusIn(e) { + this.#editor._focusEventsAllowed = false; + e.preventDefault(); + e.stopPropagation(); } - moveInDOM() { - this.parent?.moveEditorInDOM(this); + #focusOut(e) { + this.#editor._focusEventsAllowed = true; + e.preventDefault(); + e.stopPropagation(); } - _setParentAndPosition(parent, x, y) { - parent.changeParent(this); - this.x = x; - this.y = y; - this.fixAndSetPosition(); - } - getRect(tx, ty) { - const scale = this.parentScale; - const [pageWidth, pageHeight] = this.pageDimensions; - const [pageX, pageY] = this.pageTranslation; - const shiftX = tx / scale; - const shiftY = ty / scale; - const x = this.x * pageWidth; - const y = this.y * pageHeight; - const width = this.width * pageWidth; - const height = this.height * pageHeight; - switch (this.rotation) { - case 0: - return [x + shiftX + pageX, pageHeight - y - shiftY - height + pageY, x + shiftX + width + pageX, pageHeight - y - shiftY + pageY]; - case 90: - return [x + shiftY + pageX, pageHeight - y + shiftX + pageY, x + shiftY + height + pageX, pageHeight - y + shiftX + width + pageY]; - case 180: - return [x - shiftX - width + pageX, pageHeight - y + shiftY + pageY, x - shiftX + pageX, pageHeight - y + shiftY + height + pageY]; - case 270: - return [x - shiftY - height + pageX, pageHeight - y - shiftX - width + pageY, x - shiftY + pageX, pageHeight - y - shiftX + pageY]; - default: - throw new Error("Invalid rotation"); - } - } - getRectInCurrentCoords(rect, pageHeight) { - const [x1, y1, x2, y2] = rect; - const width = x2 - x1; - const height = y2 - y1; - switch (this.rotation) { - case 0: - return [x1, pageHeight - y2, width, height]; - case 90: - return [x1, pageHeight - y1, height, width]; - case 180: - return [x2, pageHeight - y1, width, height]; - case 270: - return [x2, pageHeight - y2, height, width]; - default: - throw new Error("Invalid rotation"); - } - } - onceAdded() {} - isEmpty() { - return false; - } - enableEditMode() { - this.#isInEditMode = true; - } - disableEditMode() { - this.#isInEditMode = false; - } - isInEditMode() { - return this.#isInEditMode; - } - shouldGetKeyboardEvents() { - return false; - } - needsToBeRebuilt() { - return this.div && !this.isAttachedToDOM; - } - rebuild() { - this.div?.addEventListener("focusin", this.#boundFocusin); - this.div?.addEventListener("focusout", this.#boundFocusout); - } - serialize(isForCopying = false, context = null) { - (0, _util.unreachable)("An editor must be serializable"); - } - static deserialize(data, parent, uiManager) { - const editor = new this.prototype.constructor({ - parent, - id: parent.getNextId(), - uiManager + #addListenersToElement(element) { + element.addEventListener("focusin", this.#focusIn.bind(this), { + capture: true }); - editor.rotation = data.rotation; - const [pageWidth, pageHeight] = editor.pageDimensions; - const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight); - editor.x = x / pageWidth; - editor.y = y / pageHeight; - editor.width = width / pageWidth; - editor.height = height / pageHeight; - return editor; + element.addEventListener("focusout", this.#focusOut.bind(this), { + capture: true + }); + element.addEventListener("contextmenu", noContextMenu); + } + hide() { + this.#toolbar.classList.add("hidden"); + this.#colorPicker?.hideDropdown(); + } + show() { + this.#toolbar.classList.remove("hidden"); + } + #addDeleteButton() { + const button = document.createElement("button"); + button.className = "delete"; + button.tabIndex = 0; + button.setAttribute("data-l10n-id", `pdfjs-editor-remove-${this.#editor.editorType}-button`); + this.#addListenersToElement(button); + button.addEventListener("click", e => { + this.#editor._uiManager.delete(); + }); + this.#buttons.append(button); + } + get #divider() { + const divider = document.createElement("div"); + divider.className = "divider"; + return divider; + } + addAltTextButton(button) { + this.#addListenersToElement(button); + this.#buttons.prepend(button, this.#divider); + } + addColorPicker(colorPicker) { + this.#colorPicker = colorPicker; + const button = colorPicker.renderButton(); + this.#addListenersToElement(button); + this.#buttons.prepend(button, this.#divider); } remove() { - this.div.removeEventListener("focusin", this.#boundFocusin); - this.div.removeEventListener("focusout", this.#boundFocusout); - if (!this.isEmpty()) { - this.commit(); + this.#toolbar.remove(); + this.#colorPicker?.destroy(); + this.#colorPicker = null; + } +} +class HighlightToolbar { + #buttons = null; + #toolbar = null; + #uiManager; + constructor(uiManager) { + this.#uiManager = uiManager; + } + #render() { + const editToolbar = this.#toolbar = document.createElement("div"); + editToolbar.className = "editToolbar"; + editToolbar.setAttribute("role", "toolbar"); + editToolbar.addEventListener("contextmenu", noContextMenu); + const buttons = this.#buttons = document.createElement("div"); + buttons.className = "buttons"; + editToolbar.append(buttons); + this.#addHighlightButton(); + return editToolbar; + } + #getLastPoint(boxes, isLTR) { + let lastY = 0; + let lastX = 0; + for (const box of boxes) { + const y = box.y + box.height; + if (y < lastY) { + continue; + } + const x = box.x + (isLTR ? box.width : 0); + if (y > lastY) { + lastX = x; + lastY = y; + continue; + } + if (isLTR) { + if (x > lastX) { + lastX = x; + } + } else if (x < lastX) { + lastX = x; + } } - if (this.parent) { - this.parent.remove(this); - } else { - this._uiManager.removeEditor(this); - } - this.#altTextButton?.remove(); - this.#altTextButton = null; - this.#altTextTooltip = null; + return [isLTR ? 1 - lastX : lastX, lastY]; } - get isResizable() { - return false; - } - makeResizable() { - if (this.isResizable) { - this.#createResizers(); - this.#resizersDiv.classList.remove("hidden"); - } - } - select() { - this.makeResizable(); - this.div?.classList.add("selectedEditor"); - } - unselect() { - this.#resizersDiv?.classList.add("hidden"); - this.div?.classList.remove("selectedEditor"); - if (this.div?.contains(document.activeElement)) { - this._uiManager.currentLayer.div.focus(); - } - } - updateParams(type, value) {} - disableEditing() { - if (this.#altTextButton) { - this.#altTextButton.hidden = true; - } - } - enableEditing() { - if (this.#altTextButton) { - this.#altTextButton.hidden = false; - } - } - enterInEditMode() {} - get contentDiv() { - return this.div; - } - get isEditing() { - return this.#isEditing; - } - set isEditing(value) { - this.#isEditing = value; - if (!this.parent) { - return; - } - if (value) { - this.parent.setSelected(this); - this.parent.setActiveEditor(this); - } else { - this.parent.setActiveEditor(null); - } - } - setAspectRatio(width, height) { - this.#keepAspectRatio = true; - const aspectRatio = width / height; + show(parent, boxes, isLTR) { + const [x, y] = this.#getLastPoint(boxes, isLTR); const { style - } = this.div; - style.aspectRatio = aspectRatio; - style.height = "auto"; + } = this.#toolbar ||= this.#render(); + parent.append(this.#toolbar); + style.insetInlineEnd = `${100 * x}%`; + style.top = `calc(${100 * y}% + var(--editor-toolbar-vert-offset))`; } - static get MIN_SIZE() { - return 16; + hide() { + this.#toolbar.remove(); } -} -exports.AnnotationEditor = AnnotationEditor; -class FakeEditor extends AnnotationEditor { - constructor(params) { - super(params); - this.annotationElementId = params.annotationElementId; - this.deleted = true; - } - serialize() { - return { - id: this.annotationElementId, - deleted: true, - pageIndex: this.pageIndex - }; + #addHighlightButton() { + const button = document.createElement("button"); + button.className = "highlightButton"; + button.tabIndex = 0; + button.setAttribute("data-l10n-id", `pdfjs-highlight-floating-button1`); + const span = document.createElement("span"); + button.append(span); + span.className = "visuallyHidden"; + span.setAttribute("data-l10n-id", "pdfjs-highlight-floating-button-label"); + button.addEventListener("contextmenu", noContextMenu); + button.addEventListener("click", () => { + this.#uiManager.highlightSelection("floating_button"); + }); + this.#buttons.append(button); } } -/***/ }), -/* 5 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +;// CONCATENATED MODULE: ./src/display/editor/tools.js -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.KeyboardManager = exports.CommandManager = exports.ColorManager = exports.AnnotationEditorUIManager = void 0; -exports.bindEvents = bindEvents; -exports.opacityToHex = opacityToHex; -var _util = __w_pdfjs_require__(1); -var _display_utils = __w_pdfjs_require__(6); function bindEvents(obj, element, names) { for (const name of names) { element.addEventListener(name, obj[name].bind(obj)); @@ -3800,12 +1873,12 @@ function opacityToHex(opacity) { } class IdManager { #id = 0; - getId() { - return `${_util.AnnotationEditorPrefix}${this.#id++}`; + get id() { + return `${AnnotationEditorPrefix}${this.#id++}`; } } class ImageManager { - #baseId = (0, _util.getUuid)(); + #baseId = getUuid(); #id = 0; #cache = null; static get _isSVGFittingCanvas() { @@ -3818,7 +1891,7 @@ class ImageManager { ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3); return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0; }); - return (0, _util.shadow)(this, "_isSVGFittingCanvas", promise); + return shadow(this, "_isSVGFittingCanvas", promise); } async #get(key, rawData) { this.#cache ||= new Map(); @@ -3840,11 +1913,7 @@ class ImageManager { let image; if (typeof rawData === "string") { data.url = rawData; - const response = await fetch(rawData); - if (!response.ok) { - throw new Error(response.statusText); - } - image = await response.blob(); + image = await fetchData(rawData, "blob"); } else { image = data.file = rawData; } @@ -3941,6 +2010,7 @@ class CommandManager { add({ cmd, undo, + post, mustExec, type = NaN, overwriteIfSameType = false, @@ -3955,6 +2025,7 @@ class CommandManager { const save = { cmd, undo, + post, type }; if (this.#position === -1) { @@ -3988,7 +2059,12 @@ class CommandManager { return; } this.#locked = true; - this.#commands[this.#position].undo(); + const { + undo, + post + } = this.#commands[this.#position]; + undo(); + post?.(); this.#locked = false; this.#position -= 1; } @@ -3996,7 +2072,12 @@ class CommandManager { if (this.#position < this.#commands.length - 1) { this.#position += 1; this.#locked = true; - this.#commands[this.#position].cmd(); + const { + cmd, + post + } = this.#commands[this.#position]; + cmd(); + post?.(); this.#locked = false; } } @@ -4010,7 +2091,6 @@ class CommandManager { this.#commands = null; } } -exports.CommandManager = CommandManager; class KeyboardManager { constructor(callbacks) { this.buffer = []; @@ -4018,7 +2098,7 @@ class KeyboardManager { this.allKeys = new Set(); const { isMac - } = _util.FeatureTest.platform; + } = util_FeatureTest.platform; for (const [keys, callback, options = {}] of callbacks) { for (const key of keys) { const isMacKey = key.startsWith("mac+"); @@ -4075,23 +2155,22 @@ class KeyboardManager { if (checker && !checker(self, event)) { return; } - callback.bind(self, ...args)(); + callback.bind(self, ...args, event)(); if (!bubbles) { event.stopPropagation(); event.preventDefault(); } } } -exports.KeyboardManager = KeyboardManager; class ColorManager { static _colorsMapping = new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]]); get _colors() { const colors = new Map([["CanvasText", null], ["Canvas", null]]); - (0, _display_utils.getColorValues)(colors); - return (0, _util.shadow)(this, "_colors", colors); + getColorValues(colors); + return shadow(this, "_colors", colors); } convert(color) { - const rgb = (0, _display_utils.getRGB)(color); + const rgb = getRGB(color); if (!window.matchMedia("(forced-colors: active)").matches) { return rgb; } @@ -4107,46 +2186,58 @@ class ColorManager { if (!rgb) { return name; } - return _util.Util.makeHexColor(...rgb); + return Util.makeHexColor(...rgb); } } -exports.ColorManager = ColorManager; class AnnotationEditorUIManager { #activeEditor = null; #allEditors = new Map(); #allLayers = new Map(); #altTextManager = null; #annotationStorage = null; + #changedExistingAnnotations = null; #commandManager = new CommandManager(); #currentPageIndex = 0; #deletedAnnotationsElementIds = new Set(); #draggingEditors = null; #editorTypes = null; #editorsToRescale = new Set(); + #enableHighlightFloatingButton = false; #filterFactory = null; + #focusMainContainerTimeoutId = null; + #highlightColors = null; + #highlightWhenShiftUp = false; + #highlightToolbar = null; #idManager = new IdManager(); #isEnabled = false; #isWaiting = false; #lastActiveElement = null; - #mode = _util.AnnotationEditorType.NONE; + #mainHighlightColorPicker = null; + #mlManager = null; + #mode = AnnotationEditorType.NONE; #selectedEditors = new Set(); + #selectedTextNode = null; #pageColors = null; + #showAllStates = null; #boundBlur = this.blur.bind(this); #boundFocus = this.focus.bind(this); #boundCopy = this.copy.bind(this); #boundCut = this.cut.bind(this); #boundPaste = this.paste.bind(this); #boundKeydown = this.keydown.bind(this); + #boundKeyup = this.keyup.bind(this); #boundOnEditingAction = this.onEditingAction.bind(this); #boundOnPageChanging = this.onPageChanging.bind(this); #boundOnScaleChanging = this.onScaleChanging.bind(this); + #boundSelectionChange = this.#selectionChange.bind(this); #boundOnRotationChanging = this.onRotationChanging.bind(this); #previousStates = { isEditing: false, isEmpty: true, hasSomethingToUndo: false, hasSomethingToRedo: false, - hasSelectedEditor: false + hasSelectedEditor: false, + hasSelectedText: false }; #translation = [0, 0]; #translationTimeoutId = null; @@ -4156,15 +2247,37 @@ class AnnotationEditorUIManager { static TRANSLATE_BIG = 10; static get _keyboardManager() { const proto = AnnotationEditorUIManager.prototype; - const arrowChecker = self => { - const { - activeElement - } = document; - return activeElement && self.#container.contains(activeElement) && self.hasSomethingToControl(); + const arrowChecker = self => self.#container.contains(document.activeElement) && document.activeElement.tagName !== "BUTTON" && self.hasSomethingToControl(); + const textInputChecker = (_self, { + target: el + }) => { + if (el instanceof HTMLInputElement) { + const { + type + } = el; + return type !== "text" && type !== "number"; + } + return true; }; const small = this.TRANSLATE_SMALL; const big = this.TRANSLATE_BIG; - return (0, _util.shadow)(this, "_keyboardManager", new KeyboardManager([[["ctrl+a", "mac+meta+a"], proto.selectAll], [["ctrl+z", "mac+meta+z"], proto.undo], [["ctrl+y", "ctrl+shift+z", "mac+meta+shift+z", "ctrl+shift+Z", "mac+meta+shift+Z"], proto.redo], [["Backspace", "alt+Backspace", "ctrl+Backspace", "shift+Backspace", "mac+Backspace", "mac+alt+Backspace", "mac+ctrl+Backspace", "Delete", "ctrl+Delete", "shift+Delete", "mac+Delete"], proto.delete], [["Escape", "mac+Escape"], proto.unselectAll], [["ArrowLeft", "mac+ArrowLeft"], proto.translateSelectedEditors, { + return shadow(this, "_keyboardManager", new KeyboardManager([[["ctrl+a", "mac+meta+a"], proto.selectAll, { + checker: textInputChecker + }], [["ctrl+z", "mac+meta+z"], proto.undo, { + checker: textInputChecker + }], [["ctrl+y", "ctrl+shift+z", "mac+meta+shift+z", "ctrl+shift+Z", "mac+meta+shift+Z"], proto.redo, { + checker: textInputChecker + }], [["Backspace", "alt+Backspace", "ctrl+Backspace", "shift+Backspace", "mac+Backspace", "mac+alt+Backspace", "mac+ctrl+Backspace", "Delete", "ctrl+Delete", "shift+Delete", "mac+Delete"], proto.delete, { + checker: textInputChecker + }], [["Enter", "mac+Enter"], proto.addNewEditorFromKeyboard, { + checker: (self, { + target: el + }) => !(el instanceof HTMLButtonElement) && self.#container.contains(el) && !self.isEnterHandled + }], [[" ", "mac+ "], proto.addNewEditorFromKeyboard, { + checker: (self, { + target: el + }) => !(el instanceof HTMLButtonElement) && self.#container.contains(document.activeElement) + }], [["Escape", "mac+Escape"], proto.unselectAll], [["ArrowLeft", "mac+ArrowLeft"], proto.translateSelectedEditors, { args: [-small, 0], checker: arrowChecker }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto.translateSelectedEditors, { @@ -4190,7 +2303,7 @@ class AnnotationEditorUIManager { checker: arrowChecker }]])); } - constructor(container, viewer, altTextManager, eventBus, pdfDocument, pageColors) { + constructor(container, viewer, altTextManager, eventBus, pdfDocument, pageColors, highlightColors, enableHighlightFloatingButton, mlManager) { this.#container = container; this.#viewer = viewer; this.#altTextManager = altTextManager; @@ -4199,13 +2312,19 @@ class AnnotationEditorUIManager { this._eventBus._on("pagechanging", this.#boundOnPageChanging); this._eventBus._on("scalechanging", this.#boundOnScaleChanging); this._eventBus._on("rotationchanging", this.#boundOnRotationChanging); + this.#addSelectionListener(); + this.#addKeyboardManager(); this.#annotationStorage = pdfDocument.annotationStorage; this.#filterFactory = pdfDocument.filterFactory; this.#pageColors = pageColors; + this.#highlightColors = highlightColors || null; + this.#enableHighlightFloatingButton = enableHighlightFloatingButton; + this.#mlManager = mlManager || null; this.viewParameters = { - realScale: _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS, + realScale: PixelsPerInch.PDF_TO_CSS_UNITS, rotation: 0 }; + this.isShiftKeyDown = false; } destroy() { this.#removeKeyboardManager(); @@ -4223,13 +2342,39 @@ class AnnotationEditorUIManager { this.#activeEditor = null; this.#selectedEditors.clear(); this.#commandManager.destroy(); - this.#altTextManager.destroy(); + this.#altTextManager?.destroy(); + this.#highlightToolbar?.hide(); + this.#highlightToolbar = null; + if (this.#focusMainContainerTimeoutId) { + clearTimeout(this.#focusMainContainerTimeoutId); + this.#focusMainContainerTimeoutId = null; + } + if (this.#translationTimeoutId) { + clearTimeout(this.#translationTimeoutId); + this.#translationTimeoutId = null; + } + this.#removeSelectionListener(); + } + async mlGuess(data) { + return this.#mlManager?.guess(data) || null; + } + get hasMLManager() { + return !!this.#mlManager; } get hcmFilter() { - return (0, _util.shadow)(this, "hcmFilter", this.#pageColors ? this.#filterFactory.addHCMFilter(this.#pageColors.foreground, this.#pageColors.background) : "none"); + return shadow(this, "hcmFilter", this.#pageColors ? this.#filterFactory.addHCMFilter(this.#pageColors.foreground, this.#pageColors.background) : "none"); } get direction() { - return (0, _util.shadow)(this, "direction", getComputedStyle(this.#container).direction); + return shadow(this, "direction", getComputedStyle(this.#container).direction); + } + get highlightColors() { + return shadow(this, "highlightColors", this.#highlightColors ? new Map(this.#highlightColors.split(",").map(pair => pair.split("=").map(x => x.trim()))) : null); + } + get highlightColorNames() { + return shadow(this, "highlightColorNames", this.highlightColors ? new Map(Array.from(this.highlightColors, e => e.reverse())) : null); + } + setMainHighlightColorPicker(colorPicker) { + this.#mainHighlightColorPicker = colorPicker; } editAltText(editor) { this.#altTextManager?.editAltText(this, editor); @@ -4269,7 +2414,7 @@ class AnnotationEditorUIManager { scale }) { this.commitOrRemove(); - this.viewParameters.realScale = scale * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS; + this.viewParameters.realScale = scale * PixelsPerInch.PDF_TO_CSS_UNITS; for (const editor of this.#editorsToRescale) { editor.onScaleChanging(); } @@ -4280,11 +2425,144 @@ class AnnotationEditorUIManager { this.commitOrRemove(); this.viewParameters.rotation = pagesRotation; } + #getAnchorElementForSelection({ + anchorNode + }) { + return anchorNode.nodeType === Node.TEXT_NODE ? anchorNode.parentElement : anchorNode; + } + highlightSelection(methodOfCreation = "") { + const selection = document.getSelection(); + if (!selection || selection.isCollapsed) { + return; + } + const { + anchorNode, + anchorOffset, + focusNode, + focusOffset + } = selection; + const text = selection.toString(); + const anchorElement = this.#getAnchorElementForSelection(selection); + const textLayer = anchorElement.closest(".textLayer"); + const boxes = this.getSelectionBoxes(textLayer); + if (!boxes) { + return; + } + selection.empty(); + if (this.#mode === AnnotationEditorType.NONE) { + this._eventBus.dispatch("showannotationeditorui", { + source: this, + mode: AnnotationEditorType.HIGHLIGHT + }); + this.showAllEditors("highlight", true, true); + } + for (const layer of this.#allLayers.values()) { + if (layer.hasTextLayer(textLayer)) { + layer.createAndAddNewEditor({ + x: 0, + y: 0 + }, false, { + methodOfCreation, + boxes, + anchorNode, + anchorOffset, + focusNode, + focusOffset, + text + }); + break; + } + } + } + #displayHighlightToolbar() { + const selection = document.getSelection(); + if (!selection || selection.isCollapsed) { + return; + } + const anchorElement = this.#getAnchorElementForSelection(selection); + const textLayer = anchorElement.closest(".textLayer"); + const boxes = this.getSelectionBoxes(textLayer); + if (!boxes) { + return; + } + this.#highlightToolbar ||= new HighlightToolbar(this); + this.#highlightToolbar.show(textLayer, boxes, this.direction === "ltr"); + } addToAnnotationStorage(editor) { if (!editor.isEmpty() && this.#annotationStorage && !this.#annotationStorage.has(editor.id)) { this.#annotationStorage.setValue(editor.id, editor); } } + #selectionChange() { + const selection = document.getSelection(); + if (!selection || selection.isCollapsed) { + if (this.#selectedTextNode) { + this.#highlightToolbar?.hide(); + this.#selectedTextNode = null; + this.#dispatchUpdateStates({ + hasSelectedText: false + }); + } + return; + } + const { + anchorNode + } = selection; + if (anchorNode === this.#selectedTextNode) { + return; + } + const anchorElement = this.#getAnchorElementForSelection(selection); + const textLayer = anchorElement.closest(".textLayer"); + if (!textLayer) { + if (this.#selectedTextNode) { + this.#highlightToolbar?.hide(); + this.#selectedTextNode = null; + this.#dispatchUpdateStates({ + hasSelectedText: false + }); + } + return; + } + this.#highlightToolbar?.hide(); + this.#selectedTextNode = anchorNode; + this.#dispatchUpdateStates({ + hasSelectedText: true + }); + if (this.#mode !== AnnotationEditorType.HIGHLIGHT && this.#mode !== AnnotationEditorType.NONE) { + return; + } + if (this.#mode === AnnotationEditorType.HIGHLIGHT) { + this.showAllEditors("highlight", true, true); + } + this.#highlightWhenShiftUp = this.isShiftKeyDown; + if (!this.isShiftKeyDown) { + const pointerup = e => { + if (e.type === "pointerup" && e.button !== 0) { + return; + } + window.removeEventListener("pointerup", pointerup); + window.removeEventListener("blur", pointerup); + if (e.type === "pointerup") { + this.#onSelectEnd("main_toolbar"); + } + }; + window.addEventListener("pointerup", pointerup); + window.addEventListener("blur", pointerup); + } + } + #onSelectEnd(methodOfCreation = "") { + if (this.#mode === AnnotationEditorType.HIGHLIGHT) { + this.highlightSelection(methodOfCreation); + } else if (this.#enableHighlightFloatingButton) { + this.#displayHighlightToolbar(); + } + } + #addSelectionListener() { + document.addEventListener("selectionchange", this.#boundSelectionChange); + } + #removeSelectionListener() { + document.removeEventListener("selectionchange", this.#boundSelectionChange); + } #addFocusManager() { window.addEventListener("focus", this.#boundFocus); window.addEventListener("blur", this.#boundBlur); @@ -4294,6 +2572,11 @@ class AnnotationEditorUIManager { window.removeEventListener("blur", this.#boundBlur); } blur() { + this.isShiftKeyDown = false; + if (this.#highlightWhenShiftUp) { + this.#highlightWhenShiftUp = false; + this.#onSelectEnd("main_toolbar"); + } if (!this.hasSelection) { return; } @@ -4322,14 +2605,12 @@ class AnnotationEditorUIManager { lastActiveElement.focus(); } #addKeyboardManager() { - window.addEventListener("keydown", this.#boundKeydown, { - capture: true - }); + window.addEventListener("keydown", this.#boundKeydown); + window.addEventListener("keyup", this.#boundKeyup); } #removeKeyboardManager() { - window.removeEventListener("keydown", this.#boundKeydown, { - capture: true - }); + window.removeEventListener("keydown", this.#boundKeydown); + window.removeEventListener("keyup", this.#boundKeyup); } #addCopyPasteListeners() { document.addEventListener("copy", this.#boundCopy); @@ -4391,7 +2672,7 @@ class AnnotationEditorUIManager { try { data = JSON.parse(data); } catch (ex) { - (0, _util.warn)(`paste: "${ex.message}".`); + warn(`paste: "${ex.message}".`); return; } if (!Array.isArray(data)) { @@ -4425,17 +2706,39 @@ class AnnotationEditorUIManager { mustExec: true }); } catch (ex) { - (0, _util.warn)(`paste: "${ex.message}".`); + warn(`paste: "${ex.message}".`); } } keydown(event) { - if (!this.getActive()?.shouldGetKeyboardEvents()) { + if (!this.isShiftKeyDown && event.key === "Shift") { + this.isShiftKeyDown = true; + } + if (this.#mode !== AnnotationEditorType.NONE && !this.isEditorHandlingKeyboard) { AnnotationEditorUIManager._keyboardManager.exec(this, event); } } - onEditingAction(details) { - if (["undo", "redo", "delete", "selectAll"].includes(details.name)) { - this[details.name](); + keyup(event) { + if (this.isShiftKeyDown && event.key === "Shift") { + this.isShiftKeyDown = false; + if (this.#highlightWhenShiftUp) { + this.#highlightWhenShiftUp = false; + this.#onSelectEnd("main_toolbar"); + } + } + } + onEditingAction({ + name + }) { + switch (name) { + case "undo": + case "redo": + case "delete": + case "selectAll": + this[name](); + break; + case "highlightSelection": + this.highlightSelection("context_menu"); + break; } } #dispatchUpdateStates(details) { @@ -4445,6 +2748,9 @@ class AnnotationEditorUIManager { source: this, details: Object.assign(this.#previousStates, details) }); + if (this.#mode === AnnotationEditorType.HIGHLIGHT && details.hasSelectedEditor === false) { + this.#dispatchUpdateUI([[AnnotationEditorParamsType.HIGHLIGHT_FREE, true]]); + } } } #dispatchUpdateUI(details) { @@ -4456,10 +2762,9 @@ class AnnotationEditorUIManager { setEditingState(isEditing) { if (isEditing) { this.#addFocusManager(); - this.#addKeyboardManager(); this.#addCopyPasteListeners(); this.#dispatchUpdateStates({ - isEditing: this.#mode !== _util.AnnotationEditorType.NONE, + isEditing: this.#mode !== AnnotationEditorType.NONE, isEmpty: this.#isEmpty(), hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(), hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(), @@ -4467,7 +2772,6 @@ class AnnotationEditorUIManager { }); } else { this.#removeFocusManager(); - this.#removeKeyboardManager(); this.#removeCopyPasteListeners(); this.#dispatchUpdateStates({ isEditing: false @@ -4485,7 +2789,7 @@ class AnnotationEditorUIManager { } } getId() { - return this.#idManager.getId(); + return this.#idManager.id; } get currentLayer() { return this.#allLayers.get(this.#currentPageIndex); @@ -4507,12 +2811,12 @@ class AnnotationEditorUIManager { removeLayer(layer) { this.#allLayers.delete(layer.pageIndex); } - updateMode(mode, editId = null) { + updateMode(mode, editId = null, isFromKeyboard = false) { if (this.#mode === mode) { return; } this.#mode = mode; - if (mode === _util.AnnotationEditorType.NONE) { + if (mode === AnnotationEditorType.NONE) { this.setEditingState(false); this.#disableAll(); return; @@ -4523,6 +2827,10 @@ class AnnotationEditorUIManager { for (const layer of this.#allLayers.values()) { layer.updateMode(mode); } + if (!editId && isFromKeyboard) { + this.addNewEditorFromKeyboard(); + return; + } if (!editId) { return; } @@ -4534,6 +2842,11 @@ class AnnotationEditorUIManager { } } } + addNewEditorFromKeyboard() { + if (this.currentLayer.canCreateNewEmptyEditor()) { + this.currentLayer.addNewEditor(); + } + } updateToolbar(mode) { if (mode === this.#mode) { return; @@ -4547,9 +2860,27 @@ class AnnotationEditorUIManager { if (!this.#editorTypes) { return; } - if (type === _util.AnnotationEditorParamsType.CREATE) { - this.currentLayer.addNewEditor(type); - return; + switch (type) { + case AnnotationEditorParamsType.CREATE: + this.currentLayer.addNewEditor(); + return; + case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR: + this.#mainHighlightColorPicker?.updateColor(value); + break; + case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL: + this._eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + data: { + type: "highlight", + action: "toggle_visibility" + } + } + }); + (this.#showAllStates ||= new Map()).set(type, value); + this.showAllEditors("highlight", value); + break; } for (const editor of this.#selectedEditors) { editor.updateParams(type, value); @@ -4558,6 +2889,17 @@ class AnnotationEditorUIManager { editorType.updateDefaultParams(type, value); } } + showAllEditors(type, visible, updateButton = false) { + for (const editor of this.#allEditors.values()) { + if (editor.editorType === type) { + editor.show(visible); + } + } + const state = this.#showAllStates?.get(AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL) ?? true; + if (state !== visible) { + this.#dispatchUpdateUI([[AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL, visible]]); + } + } enableWaiting(mustWait = false) { if (this.#isWaiting === mustWait) { return; @@ -4578,6 +2920,9 @@ class AnnotationEditorUIManager { for (const layer of this.#allLayers.values()) { layer.enable(); } + for (const editor of this.#allEditors.values()) { + editor.enable(); + } } } #disableAll() { @@ -4587,6 +2932,9 @@ class AnnotationEditorUIManager { for (const layer of this.#allLayers.values()) { layer.disable(); } + for (const editor of this.#allEditors.values()) { + editor.disable(); + } } } getEditors(pageIndex) { @@ -4605,6 +2953,15 @@ class AnnotationEditorUIManager { this.#allEditors.set(editor.id, editor); } removeEditor(editor) { + if (editor.div.contains(document.activeElement)) { + if (this.#focusMainContainerTimeoutId) { + clearTimeout(this.#focusMainContainerTimeoutId); + } + this.#focusMainContainerTimeoutId = setTimeout(() => { + this.focusMainContainer(); + this.#focusMainContainerTimeoutId = null; + }, 0); + } this.#allEditors.delete(editor.id); this.unselect(editor); if (!editor.annotationElementId || !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)) { @@ -4613,6 +2970,7 @@ class AnnotationEditorUIManager { } addDeletedAnnotationElement(editor) { this.#deletedAnnotationsElementIds.add(editor.annotationElementId); + this.addChangedExistingAnnotation(editor); editor.deleted = true; } isDeletedAnnotationElement(annotationElementId) { @@ -4620,6 +2978,7 @@ class AnnotationEditorUIManager { } removeDeletedAnnotationElement(editor) { this.#deletedAnnotationsElementIds.delete(editor.annotationElementId); + this.removeChangedExistingAnnotation(editor); editor.deleted = false; } #addEditorToLayer(editor) { @@ -4628,6 +2987,7 @@ class AnnotationEditorUIManager { layer.addOrRebuild(editor); } else { this.addEditor(editor); + this.addToAnnotationStorage(editor); } } setActiveEditor(editor) { @@ -4639,6 +2999,16 @@ class AnnotationEditorUIManager { this.#dispatchUpdateUI(editor.propertiesToUpdate); } } + get #lastSelectedEditor() { + let ed = null; + for (ed of this.#selectedEditors) {} + return ed; + } + updateUI(editor) { + if (this.#lastSelectedEditor === editor) { + this.#dispatchUpdateUI(editor.propertiesToUpdate); + } + } toggleSelected(editor) { if (this.#selectedEditors.has(editor)) { this.#selectedEditors.delete(editor); @@ -4672,6 +3042,9 @@ class AnnotationEditorUIManager { isSelected(editor) { return this.#selectedEditors.has(editor); } + get firstSelectedEditor() { + return this.#selectedEditors.values().next().value; + } unselect(editor) { editor.unselect(); this.#selectedEditors.delete(editor); @@ -4682,6 +3055,9 @@ class AnnotationEditorUIManager { get hasSelection() { return this.#selectedEditors.size !== 0; } + get isEnterHandled() { + return this.#selectedEditors.size === 1 && this.firstSelectedEditor.isEnterHandled; + } undo() { this.#commandManager.undo(); this.#dispatchUpdateStates({ @@ -4746,6 +3122,9 @@ class AnnotationEditorUIManager { return this.#activeEditor || this.hasSelection; } #selectEditors(editors) { + for (const editor of this.#selectedEditors) { + editor.unselect(); + } this.#selectedEditors.clear(); for (const editor of editors) { if (editor.isEmpty()) { @@ -4755,7 +3134,7 @@ class AnnotationEditorUIManager { editor.select(); } this.#dispatchUpdateStates({ - hasSelectedEditor: true + hasSelectedEditor: this.hasSelection }); } selectAll() { @@ -4767,7 +3146,9 @@ class AnnotationEditorUIManager { unselectAll() { if (this.#activeEditor) { this.#activeEditor.commitOrRemove(); - return; + if (this.#mode !== AnnotationEditorType.NONE) { + return; + } } if (!this.hasSelection) { return; @@ -4916,6 +3297,9 @@ class AnnotationEditorUIManager { editor.parent.addOrRebuild(editor); } } + get isEditorHandlingKeyboard() { + return this.getActive()?.shouldGetKeyboardEvents() || this.#selectedEditors.size === 1 && this.firstSelectedEditor.shouldGetKeyboardEvents(); + } isActive(editor) { return this.#activeEditor === editor; } @@ -4926,864 +3310,1372 @@ class AnnotationEditorUIManager { return this.#mode; } get imageManager() { - return (0, _util.shadow)(this, "imageManager", new ImageManager()); + return shadow(this, "imageManager", new ImageManager()); } -} -exports.AnnotationEditorUIManager = AnnotationEditorUIManager; - -/***/ }), -/* 6 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.StatTimer = exports.RenderingCancelledException = exports.PixelsPerInch = exports.PageViewport = exports.PDFDateString = exports.DOMStandardFontDataFactory = exports.DOMSVGFactory = exports.DOMFilterFactory = exports.DOMCanvasFactory = exports.DOMCMapReaderFactory = void 0; -exports.deprecated = deprecated; -exports.getColorValues = getColorValues; -exports.getCurrentTransform = getCurrentTransform; -exports.getCurrentTransformInverse = getCurrentTransformInverse; -exports.getFilenameFromUrl = getFilenameFromUrl; -exports.getPdfFilenameFromUrl = getPdfFilenameFromUrl; -exports.getRGB = getRGB; -exports.getXfaPageViewport = getXfaPageViewport; -exports.isDataScheme = isDataScheme; -exports.isPdfFile = isPdfFile; -exports.isValidFetchUrl = isValidFetchUrl; -exports.loadScript = loadScript; -exports.noContextMenu = noContextMenu; -exports.setLayerDimensions = setLayerDimensions; -var _base_factory = __w_pdfjs_require__(7); -var _util = __w_pdfjs_require__(1); -const SVG_NS = "http://www.w3.org/2000/svg"; -class PixelsPerInch { - static CSS = 96.0; - static PDF = 72.0; - static PDF_TO_CSS_UNITS = this.CSS / this.PDF; -} -exports.PixelsPerInch = PixelsPerInch; -class DOMFilterFactory extends _base_factory.BaseFilterFactory { - #_cache; - #_defs; - #docId; - #document; - #hcmFilter; - #hcmKey; - #hcmUrl; - #hcmHighlightFilter; - #hcmHighlightKey; - #hcmHighlightUrl; - #id = 0; - constructor({ - docId, - ownerDocument = globalThis.document - } = {}) { - super(); - this.#docId = docId; - this.#document = ownerDocument; - } - get #cache() { - return this.#_cache ||= new Map(); - } - get #defs() { - if (!this.#_defs) { - const div = this.#document.createElement("div"); - const { - style - } = div; - style.visibility = "hidden"; - style.contain = "strict"; - style.width = style.height = 0; - style.position = "absolute"; - style.top = style.left = 0; - style.zIndex = -1; - const svg = this.#document.createElementNS(SVG_NS, "svg"); - svg.setAttribute("width", 0); - svg.setAttribute("height", 0); - this.#_defs = this.#document.createElementNS(SVG_NS, "defs"); - div.append(svg); - svg.append(this.#_defs); - this.#document.body.append(div); + getSelectionBoxes(textLayer) { + if (!textLayer) { + return null; } - return this.#_defs; - } - addFilter(maps) { - if (!maps) { - return "none"; - } - let value = this.#cache.get(maps); - if (value) { - return value; - } - let tableR, tableG, tableB, key; - if (maps.length === 1) { - const mapR = maps[0]; - const buffer = new Array(256); - for (let i = 0; i < 256; i++) { - buffer[i] = mapR[i] / 255; + const selection = document.getSelection(); + for (let i = 0, ii = selection.rangeCount; i < ii; i++) { + if (!textLayer.contains(selection.getRangeAt(i).commonAncestorContainer)) { + return null; } - key = tableR = tableG = tableB = buffer.join(","); - } else { - const [mapR, mapG, mapB] = maps; - const bufferR = new Array(256); - const bufferG = new Array(256); - const bufferB = new Array(256); - for (let i = 0; i < 256; i++) { - bufferR[i] = mapR[i] / 255; - bufferG[i] = mapG[i] / 255; - bufferB[i] = mapB[i] / 255; - } - tableR = bufferR.join(","); - tableG = bufferG.join(","); - tableB = bufferB.join(","); - key = `${tableR}${tableG}${tableB}`; } - value = this.#cache.get(key); - if (value) { - this.#cache.set(maps, value); - return value; - } - const id = `g_${this.#docId}_transfer_map_${this.#id++}`; - const url = `url(#${id})`; - this.#cache.set(maps, url); - this.#cache.set(key, url); - const filter = this.#createFilter(id); - this.#addTransferMapConversion(tableR, tableG, tableB, filter); - return url; - } - addHCMFilter(fgColor, bgColor) { - const key = `${fgColor}-${bgColor}`; - if (this.#hcmKey === key) { - return this.#hcmUrl; - } - this.#hcmKey = key; - this.#hcmUrl = "none"; - this.#hcmFilter?.remove(); - if (!fgColor || !bgColor) { - return this.#hcmUrl; - } - const fgRGB = this.#getRGB(fgColor); - fgColor = _util.Util.makeHexColor(...fgRGB); - const bgRGB = this.#getRGB(bgColor); - bgColor = _util.Util.makeHexColor(...bgRGB); - this.#defs.style.color = ""; - if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) { - return this.#hcmUrl; - } - const map = new Array(256); - for (let i = 0; i <= 255; i++) { - const x = i / 255; - map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4; - } - const table = map.join(","); - const id = `g_${this.#docId}_hcm_filter`; - const filter = this.#hcmHighlightFilter = this.#createFilter(id); - this.#addTransferMapConversion(table, table, table, filter); - this.#addGrayConversion(filter); - const getSteps = (c, n) => { - const start = fgRGB[c] / 255; - const end = bgRGB[c] / 255; - const arr = new Array(n + 1); - for (let i = 0; i <= n; i++) { - arr[i] = start + i / n * (end - start); - } - return arr.join(","); - }; - this.#addTransferMapConversion(getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter); - this.#hcmUrl = `url(#${id})`; - return this.#hcmUrl; - } - addHighlightHCMFilter(fgColor, bgColor, newFgColor, newBgColor) { - const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`; - if (this.#hcmHighlightKey === key) { - return this.#hcmHighlightUrl; - } - this.#hcmHighlightKey = key; - this.#hcmHighlightUrl = "none"; - this.#hcmHighlightFilter?.remove(); - if (!fgColor || !bgColor) { - return this.#hcmHighlightUrl; - } - const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this)); - let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]); - let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]); - let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(this.#getRGB.bind(this)); - if (bgGray < fgGray) { - [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB]; - } - this.#defs.style.color = ""; - const getSteps = (fg, bg, n) => { - const arr = new Array(256); - const step = (bgGray - fgGray) / n; - const newStart = fg / 255; - const newStep = (bg - fg) / (255 * n); - let prev = 0; - for (let i = 0; i <= n; i++) { - const k = Math.round(fgGray + i * step); - const value = newStart + i * newStep; - for (let j = prev; j <= k; j++) { - arr[j] = value; - } - prev = k + 1; - } - for (let i = prev; i < 256; i++) { - arr[i] = arr[prev - 1]; - } - return arr.join(","); - }; - const id = `g_${this.#docId}_hcm_highlight_filter`; - const filter = this.#hcmHighlightFilter = this.#createFilter(id); - this.#addGrayConversion(filter); - this.#addTransferMapConversion(getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter); - this.#hcmHighlightUrl = `url(#${id})`; - return this.#hcmHighlightUrl; - } - destroy(keepHCM = false) { - if (keepHCM && (this.#hcmUrl || this.#hcmHighlightUrl)) { - return; - } - if (this.#_defs) { - this.#_defs.parentNode.parentNode.remove(); - this.#_defs = null; - } - if (this.#_cache) { - this.#_cache.clear(); - this.#_cache = null; - } - this.#id = 0; - } - #addGrayConversion(filter) { - const feColorMatrix = this.#document.createElementNS(SVG_NS, "feColorMatrix"); - feColorMatrix.setAttribute("type", "matrix"); - feColorMatrix.setAttribute("values", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"); - filter.append(feColorMatrix); - } - #createFilter(id) { - const filter = this.#document.createElementNS(SVG_NS, "filter"); - filter.setAttribute("color-interpolation-filters", "sRGB"); - filter.setAttribute("id", id); - this.#defs.append(filter); - return filter; - } - #appendFeFunc(feComponentTransfer, func, table) { - const feFunc = this.#document.createElementNS(SVG_NS, func); - feFunc.setAttribute("type", "discrete"); - feFunc.setAttribute("tableValues", table); - feComponentTransfer.append(feFunc); - } - #addTransferMapConversion(rTable, gTable, bTable, filter) { - const feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer"); - filter.append(feComponentTransfer); - this.#appendFeFunc(feComponentTransfer, "feFuncR", rTable); - this.#appendFeFunc(feComponentTransfer, "feFuncG", gTable); - this.#appendFeFunc(feComponentTransfer, "feFuncB", bTable); - } - #getRGB(color) { - this.#defs.style.color = color; - return getRGB(getComputedStyle(this.#defs).getPropertyValue("color")); - } -} -exports.DOMFilterFactory = DOMFilterFactory; -class DOMCanvasFactory extends _base_factory.BaseCanvasFactory { - constructor({ - ownerDocument = globalThis.document - } = {}) { - super(); - this._document = ownerDocument; - } - _createCanvas(width, height) { - const canvas = this._document.createElement("canvas"); - canvas.width = width; - canvas.height = height; - return canvas; - } -} -exports.DOMCanvasFactory = DOMCanvasFactory; -async function fetchData(url, asTypedArray = false) { - if (isValidFetchUrl(url, document.baseURI)) { - const response = await fetch(url); - if (!response.ok) { - throw new Error(response.statusText); - } - return asTypedArray ? new Uint8Array(await response.arrayBuffer()) : (0, _util.stringToBytes)(await response.text()); - } - return new Promise((resolve, reject) => { - const request = new XMLHttpRequest(); - request.open("GET", url, true); - if (asTypedArray) { - request.responseType = "arraybuffer"; - } - request.onreadystatechange = () => { - if (request.readyState !== XMLHttpRequest.DONE) { - return; - } - if (request.status === 200 || request.status === 0) { - let data; - if (asTypedArray && request.response) { - data = new Uint8Array(request.response); - } else if (!asTypedArray && request.responseText) { - data = (0, _util.stringToBytes)(request.responseText); - } - if (data) { - resolve(data); - return; - } - } - reject(new Error(request.statusText)); - }; - request.send(null); - }); -} -class DOMCMapReaderFactory extends _base_factory.BaseCMapReaderFactory { - _fetchData(url, compressionType) { - return fetchData(url, this.isCompressed).then(data => { - return { - cMapData: data, - compressionType - }; - }); - } -} -exports.DOMCMapReaderFactory = DOMCMapReaderFactory; -class DOMStandardFontDataFactory extends _base_factory.BaseStandardFontDataFactory { - _fetchData(url) { - return fetchData(url, true); - } -} -exports.DOMStandardFontDataFactory = DOMStandardFontDataFactory; -class DOMSVGFactory extends _base_factory.BaseSVGFactory { - _createSVG(type) { - return document.createElementNS(SVG_NS, type); - } -} -exports.DOMSVGFactory = DOMSVGFactory; -class PageViewport { - constructor({ - viewBox, - scale, - rotation, - offsetX = 0, - offsetY = 0, - dontFlip = false - }) { - this.viewBox = viewBox; - this.scale = scale; - this.rotation = rotation; - this.offsetX = offsetX; - this.offsetY = offsetY; - const centerX = (viewBox[2] + viewBox[0]) / 2; - const centerY = (viewBox[3] + viewBox[1]) / 2; - let rotateA, rotateB, rotateC, rotateD; - rotation %= 360; - if (rotation < 0) { - rotation += 360; - } - switch (rotation) { - case 180: - rotateA = -1; - rotateB = 0; - rotateC = 0; - rotateD = 1; + const { + x: layerX, + y: layerY, + width: parentWidth, + height: parentHeight + } = textLayer.getBoundingClientRect(); + let rotator; + switch (textLayer.getAttribute("data-main-rotation")) { + case "90": + rotator = (x, y, w, h) => ({ + x: (y - layerY) / parentHeight, + y: 1 - (x + w - layerX) / parentWidth, + width: h / parentHeight, + height: w / parentWidth + }); break; - case 90: - rotateA = 0; - rotateB = 1; - rotateC = 1; - rotateD = 0; + case "180": + rotator = (x, y, w, h) => ({ + x: 1 - (x + w - layerX) / parentWidth, + y: 1 - (y + h - layerY) / parentHeight, + width: w / parentWidth, + height: h / parentHeight + }); break; - case 270: - rotateA = 0; - rotateB = -1; - rotateC = -1; - rotateD = 0; - break; - case 0: - rotateA = 1; - rotateB = 0; - rotateC = 0; - rotateD = -1; + case "270": + rotator = (x, y, w, h) => ({ + x: 1 - (y + h - layerY) / parentHeight, + y: (x - layerX) / parentWidth, + width: h / parentHeight, + height: w / parentWidth + }); break; default: - throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); + rotator = (x, y, w, h) => ({ + x: (x - layerX) / parentWidth, + y: (y - layerY) / parentHeight, + width: w / parentWidth, + height: h / parentHeight + }); + break; } - if (dontFlip) { - rotateC = -rotateC; - rotateD = -rotateD; + const boxes = []; + for (let i = 0, ii = selection.rangeCount; i < ii; i++) { + const range = selection.getRangeAt(i); + if (range.collapsed) { + continue; + } + for (const { + x, + y, + width, + height + } of range.getClientRects()) { + if (width === 0 || height === 0) { + continue; + } + boxes.push(rotator(x, y, width, height)); + } } - let offsetCanvasX, offsetCanvasY; - let width, height; - if (rotateA === 0) { - offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; - offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; - width = (viewBox[3] - viewBox[1]) * scale; - height = (viewBox[2] - viewBox[0]) * scale; - } else { - offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; - offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; - width = (viewBox[2] - viewBox[0]) * scale; - height = (viewBox[3] - viewBox[1]) * scale; - } - this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; - this.width = width; - this.height = height; + return boxes.length === 0 ? null : boxes; } - get rawDims() { - const { - viewBox - } = this; - return (0, _util.shadow)(this, "rawDims", { - pageWidth: viewBox[2] - viewBox[0], - pageHeight: viewBox[3] - viewBox[1], - pageX: viewBox[0], - pageY: viewBox[1] + addChangedExistingAnnotation({ + annotationElementId, + id + }) { + (this.#changedExistingAnnotations ||= new Map()).set(annotationElementId, id); + } + removeChangedExistingAnnotation({ + annotationElementId + }) { + this.#changedExistingAnnotations?.delete(annotationElementId); + } + renderAnnotationElement(annotation) { + const editorId = this.#changedExistingAnnotations?.get(annotation.data.id); + if (!editorId) { + return; + } + const editor = this.#annotationStorage.getRawValue(editorId); + if (!editor) { + return; + } + if (this.#mode === AnnotationEditorType.NONE && !editor.hasBeenModified) { + return; + } + editor.renderAnnotationElement(annotation); + } +} + +;// CONCATENATED MODULE: ./src/display/editor/alt_text.js + +class AltText { + #altText = ""; + #altTextDecorative = false; + #altTextButton = null; + #altTextTooltip = null; + #altTextTooltipTimeout = null; + #altTextWasFromKeyBoard = false; + #editor = null; + static _l10nPromise = null; + constructor(editor) { + this.#editor = editor; + } + static initialize(l10nPromise) { + AltText._l10nPromise ||= l10nPromise; + } + async render() { + const altText = this.#altTextButton = document.createElement("button"); + altText.className = "altText"; + const msg = await AltText._l10nPromise.get("pdfjs-editor-alt-text-button-label"); + altText.textContent = msg; + altText.setAttribute("aria-label", msg); + altText.tabIndex = "0"; + altText.addEventListener("contextmenu", noContextMenu); + altText.addEventListener("pointerdown", event => event.stopPropagation()); + const onClick = event => { + event.preventDefault(); + this.#editor._uiManager.editAltText(this.#editor); + }; + altText.addEventListener("click", onClick, { + capture: true }); + altText.addEventListener("keydown", event => { + if (event.target === altText && event.key === "Enter") { + this.#altTextWasFromKeyBoard = true; + onClick(event); + } + }); + await this.#setState(); + return altText; } - clone({ - scale = this.scale, - rotation = this.rotation, - offsetX = this.offsetX, - offsetY = this.offsetY, - dontFlip = false - } = {}) { - return new PageViewport({ - viewBox: this.viewBox.slice(), - scale, + finish() { + if (!this.#altTextButton) { + return; + } + this.#altTextButton.focus({ + focusVisible: this.#altTextWasFromKeyBoard + }); + this.#altTextWasFromKeyBoard = false; + } + isEmpty() { + return !this.#altText && !this.#altTextDecorative; + } + get data() { + return { + altText: this.#altText, + decorative: this.#altTextDecorative + }; + } + set data({ + altText, + decorative + }) { + if (this.#altText === altText && this.#altTextDecorative === decorative) { + return; + } + this.#altText = altText; + this.#altTextDecorative = decorative; + this.#setState(); + } + toggle(enabled = false) { + if (!this.#altTextButton) { + return; + } + if (!enabled && this.#altTextTooltipTimeout) { + clearTimeout(this.#altTextTooltipTimeout); + this.#altTextTooltipTimeout = null; + } + this.#altTextButton.disabled = !enabled; + } + destroy() { + this.#altTextButton?.remove(); + this.#altTextButton = null; + this.#altTextTooltip = null; + } + async #setState() { + const button = this.#altTextButton; + if (!button) { + return; + } + if (!this.#altText && !this.#altTextDecorative) { + button.classList.remove("done"); + this.#altTextTooltip?.remove(); + return; + } + button.classList.add("done"); + AltText._l10nPromise.get("pdfjs-editor-alt-text-edit-button-label").then(msg => { + button.setAttribute("aria-label", msg); + }); + let tooltip = this.#altTextTooltip; + if (!tooltip) { + this.#altTextTooltip = tooltip = document.createElement("span"); + tooltip.className = "tooltip"; + tooltip.setAttribute("role", "tooltip"); + const id = tooltip.id = `alt-text-tooltip-${this.#editor.id}`; + button.setAttribute("aria-describedby", id); + const DELAY_TO_SHOW_TOOLTIP = 100; + button.addEventListener("mouseenter", () => { + this.#altTextTooltipTimeout = setTimeout(() => { + this.#altTextTooltipTimeout = null; + this.#altTextTooltip.classList.add("show"); + this.#editor._reportTelemetry({ + action: "alt_text_tooltip" + }); + }, DELAY_TO_SHOW_TOOLTIP); + }); + button.addEventListener("mouseleave", () => { + if (this.#altTextTooltipTimeout) { + clearTimeout(this.#altTextTooltipTimeout); + this.#altTextTooltipTimeout = null; + } + this.#altTextTooltip?.classList.remove("show"); + }); + } + tooltip.innerText = this.#altTextDecorative ? await AltText._l10nPromise.get("pdfjs-editor-alt-text-decorative-tooltip") : this.#altText; + if (!tooltip.parentNode) { + button.append(tooltip); + } + const element = this.#editor.getImageForAltText(); + element?.setAttribute("aria-describedby", tooltip.id); + } +} + +;// CONCATENATED MODULE: ./src/display/editor/editor.js + + + + + +class AnnotationEditor { + #allResizerDivs = null; + #altText = null; + #disabled = false; + #keepAspectRatio = false; + #resizersDiv = null; + #savedDimensions = null; + #boundFocusin = this.focusin.bind(this); + #boundFocusout = this.focusout.bind(this); + #editToolbar = null; + #focusedResizerName = ""; + #hasBeenClicked = false; + #initialPosition = null; + #isEditing = false; + #isInEditMode = false; + #isResizerEnabledForKeyboard = false; + #moveInDOMTimeout = null; + #prevDragX = 0; + #prevDragY = 0; + #telemetryTimeouts = null; + _initialOptions = Object.create(null); + _isVisible = true; + _uiManager = null; + _focusEventsAllowed = true; + _l10nPromise = null; + #isDraggable = false; + #zIndex = AnnotationEditor._zIndex++; + static _borderLineWidth = -1; + static _colorManager = new ColorManager(); + static _zIndex = 1; + static _telemetryTimeout = 1000; + static get _resizerKeyboardManager() { + const resize = AnnotationEditor.prototype._resizeWithKeyboard; + const small = AnnotationEditorUIManager.TRANSLATE_SMALL; + const big = AnnotationEditorUIManager.TRANSLATE_BIG; + return shadow(this, "_resizerKeyboardManager", new KeyboardManager([[["ArrowLeft", "mac+ArrowLeft"], resize, { + args: [-small, 0] + }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], resize, { + args: [-big, 0] + }], [["ArrowRight", "mac+ArrowRight"], resize, { + args: [small, 0] + }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], resize, { + args: [big, 0] + }], [["ArrowUp", "mac+ArrowUp"], resize, { + args: [0, -small] + }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], resize, { + args: [0, -big] + }], [["ArrowDown", "mac+ArrowDown"], resize, { + args: [0, small] + }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], resize, { + args: [0, big] + }], [["Escape", "mac+Escape"], AnnotationEditor.prototype._stopResizingWithKeyboard]])); + } + constructor(parameters) { + if (this.constructor === AnnotationEditor) { + unreachable("Cannot initialize AnnotationEditor."); + } + this.parent = parameters.parent; + this.id = parameters.id; + this.width = this.height = null; + this.pageIndex = parameters.parent.pageIndex; + this.name = parameters.name; + this.div = null; + this._uiManager = parameters.uiManager; + this.annotationElementId = null; + this._willKeepAspectRatio = false; + this._initialOptions.isCentered = parameters.isCentered; + this._structTreeParentId = null; + const { rotation, - offsetX, - offsetY, - dontFlip + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } = this.parent.viewport; + this.rotation = rotation; + this.pageRotation = (360 + rotation - this._uiManager.viewParameters.rotation) % 360; + this.pageDimensions = [pageWidth, pageHeight]; + this.pageTranslation = [pageX, pageY]; + const [width, height] = this.parentDimensions; + this.x = parameters.x / width; + this.y = parameters.y / height; + this.isAttachedToDOM = false; + this.deleted = false; + } + get editorType() { + return Object.getPrototypeOf(this).constructor._type; + } + static get _defaultLineColor() { + return shadow(this, "_defaultLineColor", this._colorManager.getHexCode("CanvasText")); + } + static deleteAnnotationElement(editor) { + const fakeEditor = new FakeEditor({ + id: editor.parent.getNextId(), + parent: editor.parent, + uiManager: editor._uiManager }); + fakeEditor.annotationElementId = editor.annotationElementId; + fakeEditor.deleted = true; + fakeEditor._uiManager.addToAnnotationStorage(fakeEditor); } - convertToViewportPoint(x, y) { - return _util.Util.applyTransform([x, y], this.transform); - } - convertToViewportRectangle(rect) { - const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform); - const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform); - return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; - } - convertToPdfPoint(x, y) { - return _util.Util.applyInverseTransform([x, y], this.transform); - } -} -exports.PageViewport = PageViewport; -class RenderingCancelledException extends _util.BaseException { - constructor(msg, extraDelay = 0) { - super(msg, "RenderingCancelledException"); - this.extraDelay = extraDelay; - } -} -exports.RenderingCancelledException = RenderingCancelledException; -function isDataScheme(url) { - const ii = url.length; - let i = 0; - while (i < ii && url[i].trim() === "") { - i++; - } - return url.substring(i, i + 5).toLowerCase() === "data:"; -} -function isPdfFile(filename) { - return typeof filename === "string" && /\.pdf$/i.test(filename); -} -function getFilenameFromUrl(url, onlyStripPath = false) { - if (!onlyStripPath) { - [url] = url.split(/[#?]/, 1); - } - return url.substring(url.lastIndexOf("/") + 1); -} -function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") { - if (typeof url !== "string") { - return defaultFilename; - } - if (isDataScheme(url)) { - (0, _util.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'); - return defaultFilename; - } - const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; - const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i; - const splitURI = reURI.exec(url); - let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]); - if (suggestedFilename) { - suggestedFilename = suggestedFilename[0]; - if (suggestedFilename.includes("%")) { - try { - suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; - } catch {} + static initialize(l10n, _uiManager, options) { + AnnotationEditor._l10nPromise ||= new Map(["pdfjs-editor-alt-text-button-label", "pdfjs-editor-alt-text-edit-button-label", "pdfjs-editor-alt-text-decorative-tooltip", "pdfjs-editor-resizer-label-topLeft", "pdfjs-editor-resizer-label-topMiddle", "pdfjs-editor-resizer-label-topRight", "pdfjs-editor-resizer-label-middleRight", "pdfjs-editor-resizer-label-bottomRight", "pdfjs-editor-resizer-label-bottomMiddle", "pdfjs-editor-resizer-label-bottomLeft", "pdfjs-editor-resizer-label-middleLeft"].map(str => [str, l10n.get(str.replaceAll(/([A-Z])/g, c => `-${c.toLowerCase()}`))])); + if (options?.strings) { + for (const str of options.strings) { + AnnotationEditor._l10nPromise.set(str, l10n.get(str)); + } } - } - return suggestedFilename || defaultFilename; -} -class StatTimer { - started = Object.create(null); - times = []; - time(name) { - if (name in this.started) { - (0, _util.warn)(`Timer is already running for ${name}`); + if (AnnotationEditor._borderLineWidth !== -1) { + return; } - this.started[name] = Date.now(); + const style = getComputedStyle(document.documentElement); + AnnotationEditor._borderLineWidth = parseFloat(style.getPropertyValue("--outline-width")) || 0; } - timeEnd(name) { - if (!(name in this.started)) { - (0, _util.warn)(`Timer has not been started for ${name}`); - } - this.times.push({ - name, - start: this.started[name], - end: Date.now() - }); - delete this.started[name]; + static updateDefaultParams(_type, _value) {} + static get defaultPropertiesToUpdate() { + return []; } - toString() { - const outBuf = []; - let longest = 0; - for (const { - name - } of this.times) { - longest = Math.max(name.length, longest); - } - for (const { - name, - start, - end - } of this.times) { - outBuf.push(`${name.padEnd(longest)} ${end - start}ms\n`); - } - return outBuf.join(""); - } -} -exports.StatTimer = StatTimer; -function isValidFetchUrl(url, baseUrl) { - try { - const { - protocol - } = baseUrl ? new URL(url, baseUrl) : new URL(url); - return protocol === "http:" || protocol === "https:"; - } catch { + static isHandlingMimeForPasting(mime) { return false; } -} -function noContextMenu(e) { - e.preventDefault(); -} -function loadScript(src, removeScriptElement = false) { - return new Promise((resolve, reject) => { - const script = document.createElement("script"); - script.src = src; - script.onload = function (evt) { - if (removeScriptElement) { - script.remove(); + static paste(item, parent) { + unreachable("Not implemented"); + } + get propertiesToUpdate() { + return []; + } + get _isDraggable() { + return this.#isDraggable; + } + set _isDraggable(value) { + this.#isDraggable = value; + this.div?.classList.toggle("draggable", value); + } + get isEnterHandled() { + return true; + } + center() { + const [pageWidth, pageHeight] = this.pageDimensions; + switch (this.parentRotation) { + case 90: + this.x -= this.height * pageHeight / (pageWidth * 2); + this.y += this.width * pageWidth / (pageHeight * 2); + break; + case 180: + this.x += this.width / 2; + this.y += this.height / 2; + break; + case 270: + this.x += this.height * pageHeight / (pageWidth * 2); + this.y -= this.width * pageWidth / (pageHeight * 2); + break; + default: + this.x -= this.width / 2; + this.y -= this.height / 2; + break; + } + this.fixAndSetPosition(); + } + addCommands(params) { + this._uiManager.addCommands(params); + } + get currentLayer() { + return this._uiManager.currentLayer; + } + setInBackground() { + this.div.style.zIndex = 0; + } + setInForeground() { + this.div.style.zIndex = this.#zIndex; + } + setParent(parent) { + if (parent !== null) { + this.pageIndex = parent.pageIndex; + this.pageDimensions = parent.pageDimensions; + } else { + this.#stopResizing(); + } + this.parent = parent; + } + focusin(event) { + if (!this._focusEventsAllowed) { + return; + } + if (!this.#hasBeenClicked) { + this.parent.setSelected(this); + } else { + this.#hasBeenClicked = false; + } + } + focusout(event) { + if (!this._focusEventsAllowed) { + return; + } + if (!this.isAttachedToDOM) { + return; + } + const target = event.relatedTarget; + if (target?.closest(`#${this.id}`)) { + return; + } + event.preventDefault(); + if (!this.parent?.isMultipleSelection) { + this.commitOrRemove(); + } + } + commitOrRemove() { + if (this.isEmpty()) { + this.remove(); + } else { + this.commit(); + } + } + commit() { + this.addToAnnotationStorage(); + } + addToAnnotationStorage() { + this._uiManager.addToAnnotationStorage(this); + } + setAt(x, y, tx, ty) { + const [width, height] = this.parentDimensions; + [tx, ty] = this.screenToPageTranslation(tx, ty); + this.x = (x + tx) / width; + this.y = (y + ty) / height; + this.fixAndSetPosition(); + } + #translate([width, height], x, y) { + [x, y] = this.screenToPageTranslation(x, y); + this.x += x / width; + this.y += y / height; + this.fixAndSetPosition(); + } + translate(x, y) { + this.#translate(this.parentDimensions, x, y); + } + translateInPage(x, y) { + this.#initialPosition ||= [this.x, this.y]; + this.#translate(this.pageDimensions, x, y); + this.div.scrollIntoView({ + block: "nearest" + }); + } + drag(tx, ty) { + this.#initialPosition ||= [this.x, this.y]; + const [parentWidth, parentHeight] = this.parentDimensions; + this.x += tx / parentWidth; + this.y += ty / parentHeight; + if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) { + const { + x, + y + } = this.div.getBoundingClientRect(); + if (this.parent.findNewParent(this, x, y)) { + this.x -= Math.floor(this.x); + this.y -= Math.floor(this.y); } - resolve(evt); - }; - script.onerror = function () { - reject(new Error(`Cannot load script at: ${script.src}`)); - }; - (document.head || document.documentElement).append(script); - }); -} -function deprecated(details) { - console.log("Deprecated API usage: " + details); -} -let pdfDateStringRegex; -class PDFDateString { - static toDateObject(input) { - if (!input || typeof input !== "string") { - return null; } - pdfDateStringRegex ||= new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?"); - const matches = pdfDateStringRegex.exec(input); - if (!matches) { - return null; - } - const year = parseInt(matches[1], 10); - let month = parseInt(matches[2], 10); - month = month >= 1 && month <= 12 ? month - 1 : 0; - let day = parseInt(matches[3], 10); - day = day >= 1 && day <= 31 ? day : 1; - let hour = parseInt(matches[4], 10); - hour = hour >= 0 && hour <= 23 ? hour : 0; - let minute = parseInt(matches[5], 10); - minute = minute >= 0 && minute <= 59 ? minute : 0; - let second = parseInt(matches[6], 10); - second = second >= 0 && second <= 59 ? second : 0; - const universalTimeRelation = matches[7] || "Z"; - let offsetHour = parseInt(matches[8], 10); - offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; - let offsetMinute = parseInt(matches[9], 10) || 0; - offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; - if (universalTimeRelation === "-") { - hour += offsetHour; - minute += offsetMinute; - } else if (universalTimeRelation === "+") { - hour -= offsetHour; - minute -= offsetMinute; - } - return new Date(Date.UTC(year, month, day, hour, minute, second)); + let { + x, + y + } = this; + const [bx, by] = this.getBaseTranslation(); + x += bx; + y += by; + this.div.style.left = `${(100 * x).toFixed(2)}%`; + this.div.style.top = `${(100 * y).toFixed(2)}%`; + this.div.scrollIntoView({ + block: "nearest" + }); } -} -exports.PDFDateString = PDFDateString; -function getXfaPageViewport(xfaPage, { - scale = 1, - rotation = 0 -}) { - const { - width, - height - } = xfaPage.attributes.style; - const viewBox = [0, 0, parseInt(width), parseInt(height)]; - return new PageViewport({ - viewBox, - scale, - rotation - }); -} -function getRGB(color) { - if (color.startsWith("#")) { - const colorRGB = parseInt(color.slice(1), 16); - return [(colorRGB & 0xff0000) >> 16, (colorRGB & 0x00ff00) >> 8, colorRGB & 0x0000ff]; + get _hasBeenMoved() { + return !!this.#initialPosition && (this.#initialPosition[0] !== this.x || this.#initialPosition[1] !== this.y); } - if (color.startsWith("rgb(")) { - return color.slice(4, -1).split(",").map(x => parseInt(x)); - } - if (color.startsWith("rgba(")) { - return color.slice(5, -1).split(",").map(x => parseInt(x)).slice(0, 3); - } - (0, _util.warn)(`Not a valid color format: "${color}"`); - return [0, 0, 0]; -} -function getColorValues(colors) { - const span = document.createElement("span"); - span.style.visibility = "hidden"; - document.body.append(span); - for (const name of colors.keys()) { - span.style.color = name; - const computedColor = window.getComputedStyle(span).color; - colors.set(name, getRGB(computedColor)); - } - span.remove(); -} -function getCurrentTransform(ctx) { - const { - a, - b, - c, - d, - e, - f - } = ctx.getTransform(); - return [a, b, c, d, e, f]; -} -function getCurrentTransformInverse(ctx) { - const { - a, - b, - c, - d, - e, - f - } = ctx.getTransform().invertSelf(); - return [a, b, c, d, e, f]; -} -function setLayerDimensions(div, viewport, mustFlip = false, mustRotate = true) { - if (viewport instanceof PageViewport) { + getBaseTranslation() { + const [parentWidth, parentHeight] = this.parentDimensions; const { - pageWidth, - pageHeight - } = viewport.rawDims; + _borderLineWidth + } = AnnotationEditor; + const x = _borderLineWidth / parentWidth; + const y = _borderLineWidth / parentHeight; + switch (this.rotation) { + case 90: + return [-x, y]; + case 180: + return [x, y]; + case 270: + return [x, -y]; + default: + return [-x, -y]; + } + } + get _mustFixPosition() { + return true; + } + fixAndSetPosition(rotation = this.rotation) { + const [pageWidth, pageHeight] = this.pageDimensions; + let { + x, + y, + width, + height + } = this; + width *= pageWidth; + height *= pageHeight; + x *= pageWidth; + y *= pageHeight; + if (this._mustFixPosition) { + switch (rotation) { + case 0: + x = Math.max(0, Math.min(pageWidth - width, x)); + y = Math.max(0, Math.min(pageHeight - height, y)); + break; + case 90: + x = Math.max(0, Math.min(pageWidth - height, x)); + y = Math.min(pageHeight, Math.max(width, y)); + break; + case 180: + x = Math.min(pageWidth, Math.max(width, x)); + y = Math.min(pageHeight, Math.max(height, y)); + break; + case 270: + x = Math.min(pageWidth, Math.max(height, x)); + y = Math.max(0, Math.min(pageHeight - width, y)); + break; + } + } + this.x = x /= pageWidth; + this.y = y /= pageHeight; + const [bx, by] = this.getBaseTranslation(); + x += bx; + y += by; const { style - } = div; - const useRound = _util.FeatureTest.isCSSRoundSupported; - const w = `var(--scale-factor) * ${pageWidth}px`, - h = `var(--scale-factor) * ${pageHeight}px`; - const widthStr = useRound ? `round(${w}, 1px)` : `calc(${w})`, - heightStr = useRound ? `round(${h}, 1px)` : `calc(${h})`; - if (!mustFlip || viewport.rotation % 180 === 0) { - style.width = widthStr; - style.height = heightStr; + } = this.div; + style.left = `${(100 * x).toFixed(2)}%`; + style.top = `${(100 * y).toFixed(2)}%`; + this.moveInDOM(); + } + static #rotatePoint(x, y, angle) { + switch (angle) { + case 90: + return [y, -x]; + case 180: + return [-x, -y]; + case 270: + return [-y, x]; + default: + return [x, y]; + } + } + screenToPageTranslation(x, y) { + return AnnotationEditor.#rotatePoint(x, y, this.parentRotation); + } + pageTranslationToScreen(x, y) { + return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation); + } + #getRotationMatrix(rotation) { + switch (rotation) { + case 90: + { + const [pageWidth, pageHeight] = this.pageDimensions; + return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0]; + } + case 180: + return [-1, 0, 0, -1]; + case 270: + { + const [pageWidth, pageHeight] = this.pageDimensions; + return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0]; + } + default: + return [1, 0, 0, 1]; + } + } + get parentScale() { + return this._uiManager.viewParameters.realScale; + } + get parentRotation() { + return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360; + } + get parentDimensions() { + const { + parentScale, + pageDimensions: [pageWidth, pageHeight] + } = this; + const scaledWidth = pageWidth * parentScale; + const scaledHeight = pageHeight * parentScale; + return util_FeatureTest.isCSSRoundSupported ? [Math.round(scaledWidth), Math.round(scaledHeight)] : [scaledWidth, scaledHeight]; + } + setDims(width, height) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.div.style.width = `${(100 * width / parentWidth).toFixed(2)}%`; + if (!this.#keepAspectRatio) { + this.div.style.height = `${(100 * height / parentHeight).toFixed(2)}%`; + } + } + fixDims() { + const { + style + } = this.div; + const { + height, + width + } = style; + const widthPercent = width.endsWith("%"); + const heightPercent = !this.#keepAspectRatio && height.endsWith("%"); + if (widthPercent && heightPercent) { + return; + } + const [parentWidth, parentHeight] = this.parentDimensions; + if (!widthPercent) { + style.width = `${(100 * parseFloat(width) / parentWidth).toFixed(2)}%`; + } + if (!this.#keepAspectRatio && !heightPercent) { + style.height = `${(100 * parseFloat(height) / parentHeight).toFixed(2)}%`; + } + } + getInitialTranslation() { + return [0, 0]; + } + #createResizers() { + if (this.#resizersDiv) { + return; + } + this.#resizersDiv = document.createElement("div"); + this.#resizersDiv.classList.add("resizers"); + const classes = this._willKeepAspectRatio ? ["topLeft", "topRight", "bottomRight", "bottomLeft"] : ["topLeft", "topMiddle", "topRight", "middleRight", "bottomRight", "bottomMiddle", "bottomLeft", "middleLeft"]; + for (const name of classes) { + const div = document.createElement("div"); + this.#resizersDiv.append(div); + div.classList.add("resizer", name); + div.setAttribute("data-resizer-name", name); + div.addEventListener("pointerdown", this.#resizerPointerdown.bind(this, name)); + div.addEventListener("contextmenu", noContextMenu); + div.tabIndex = -1; + } + this.div.prepend(this.#resizersDiv); + } + #resizerPointerdown(name, event) { + event.preventDefault(); + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + this.#altText?.toggle(false); + const boundResizerPointermove = this.#resizerPointermove.bind(this, name); + const savedDraggable = this._isDraggable; + this._isDraggable = false; + const pointerMoveOptions = { + passive: true, + capture: true + }; + this.parent.togglePointerEvents(false); + window.addEventListener("pointermove", boundResizerPointermove, pointerMoveOptions); + window.addEventListener("contextmenu", noContextMenu); + const savedX = this.x; + const savedY = this.y; + const savedWidth = this.width; + const savedHeight = this.height; + const savedParentCursor = this.parent.div.style.cursor; + const savedCursor = this.div.style.cursor; + this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(event.target).cursor; + const pointerUpCallback = () => { + this.parent.togglePointerEvents(true); + this.#altText?.toggle(true); + this._isDraggable = savedDraggable; + window.removeEventListener("pointerup", pointerUpCallback); + window.removeEventListener("blur", pointerUpCallback); + window.removeEventListener("pointermove", boundResizerPointermove, pointerMoveOptions); + window.removeEventListener("contextmenu", noContextMenu); + this.parent.div.style.cursor = savedParentCursor; + this.div.style.cursor = savedCursor; + this.#addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight); + }; + window.addEventListener("pointerup", pointerUpCallback); + window.addEventListener("blur", pointerUpCallback); + } + #addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight) { + const newX = this.x; + const newY = this.y; + const newWidth = this.width; + const newHeight = this.height; + if (newX === savedX && newY === savedY && newWidth === savedWidth && newHeight === savedHeight) { + return; + } + this.addCommands({ + cmd: () => { + this.width = newWidth; + this.height = newHeight; + this.x = newX; + this.y = newY; + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(parentWidth * newWidth, parentHeight * newHeight); + this.fixAndSetPosition(); + }, + undo: () => { + this.width = savedWidth; + this.height = savedHeight; + this.x = savedX; + this.y = savedY; + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(parentWidth * savedWidth, parentHeight * savedHeight); + this.fixAndSetPosition(); + }, + mustExec: true + }); + } + #resizerPointermove(name, event) { + const [parentWidth, parentHeight] = this.parentDimensions; + const savedX = this.x; + const savedY = this.y; + const savedWidth = this.width; + const savedHeight = this.height; + const minWidth = AnnotationEditor.MIN_SIZE / parentWidth; + const minHeight = AnnotationEditor.MIN_SIZE / parentHeight; + const round = x => Math.round(x * 10000) / 10000; + const rotationMatrix = this.#getRotationMatrix(this.rotation); + const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y]; + const invRotationMatrix = this.#getRotationMatrix(360 - this.rotation); + const invTransf = (x, y) => [invRotationMatrix[0] * x + invRotationMatrix[2] * y, invRotationMatrix[1] * x + invRotationMatrix[3] * y]; + let getPoint; + let getOpposite; + let isDiagonal = false; + let isHorizontal = false; + switch (name) { + case "topLeft": + isDiagonal = true; + getPoint = (w, h) => [0, 0]; + getOpposite = (w, h) => [w, h]; + break; + case "topMiddle": + getPoint = (w, h) => [w / 2, 0]; + getOpposite = (w, h) => [w / 2, h]; + break; + case "topRight": + isDiagonal = true; + getPoint = (w, h) => [w, 0]; + getOpposite = (w, h) => [0, h]; + break; + case "middleRight": + isHorizontal = true; + getPoint = (w, h) => [w, h / 2]; + getOpposite = (w, h) => [0, h / 2]; + break; + case "bottomRight": + isDiagonal = true; + getPoint = (w, h) => [w, h]; + getOpposite = (w, h) => [0, 0]; + break; + case "bottomMiddle": + getPoint = (w, h) => [w / 2, h]; + getOpposite = (w, h) => [w / 2, 0]; + break; + case "bottomLeft": + isDiagonal = true; + getPoint = (w, h) => [0, h]; + getOpposite = (w, h) => [w, 0]; + break; + case "middleLeft": + isHorizontal = true; + getPoint = (w, h) => [0, h / 2]; + getOpposite = (w, h) => [w, h / 2]; + break; + } + const point = getPoint(savedWidth, savedHeight); + const oppositePoint = getOpposite(savedWidth, savedHeight); + let transfOppositePoint = transf(...oppositePoint); + const oppositeX = round(savedX + transfOppositePoint[0]); + const oppositeY = round(savedY + transfOppositePoint[1]); + let ratioX = 1; + let ratioY = 1; + let [deltaX, deltaY] = this.screenToPageTranslation(event.movementX, event.movementY); + [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight); + if (isDiagonal) { + const oldDiag = Math.hypot(savedWidth, savedHeight); + ratioX = ratioY = Math.max(Math.min(Math.hypot(oppositePoint[0] - point[0] - deltaX, oppositePoint[1] - point[1] - deltaY) / oldDiag, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight); + } else if (isHorizontal) { + ratioX = Math.max(minWidth, Math.min(1, Math.abs(oppositePoint[0] - point[0] - deltaX))) / savedWidth; } else { - style.width = heightStr; - style.height = widthStr; + ratioY = Math.max(minHeight, Math.min(1, Math.abs(oppositePoint[1] - point[1] - deltaY))) / savedHeight; + } + const newWidth = round(savedWidth * ratioX); + const newHeight = round(savedHeight * ratioY); + transfOppositePoint = transf(...getOpposite(newWidth, newHeight)); + const newX = oppositeX - transfOppositePoint[0]; + const newY = oppositeY - transfOppositePoint[1]; + this.width = newWidth; + this.height = newHeight; + this.x = newX; + this.y = newY; + this.setDims(parentWidth * newWidth, parentHeight * newHeight); + this.fixAndSetPosition(); + } + altTextFinish() { + this.#altText?.finish(); + } + async addEditToolbar() { + if (this.#editToolbar || this.#isInEditMode) { + return this.#editToolbar; + } + this.#editToolbar = new EditorToolbar(this); + this.div.append(this.#editToolbar.render()); + if (this.#altText) { + this.#editToolbar.addAltTextButton(await this.#altText.render()); + } + return this.#editToolbar; + } + removeEditToolbar() { + if (!this.#editToolbar) { + return; + } + this.#editToolbar.remove(); + this.#editToolbar = null; + this.#altText?.destroy(); + } + getClientDimensions() { + return this.div.getBoundingClientRect(); + } + async addAltTextButton() { + if (this.#altText) { + return; + } + AltText.initialize(AnnotationEditor._l10nPromise); + this.#altText = new AltText(this); + await this.addEditToolbar(); + } + get altTextData() { + return this.#altText?.data; + } + set altTextData(data) { + if (!this.#altText) { + return; + } + this.#altText.data = data; + } + hasAltText() { + return !this.#altText?.isEmpty(); + } + render() { + this.div = document.createElement("div"); + this.div.setAttribute("data-editor-rotation", (360 - this.rotation) % 360); + this.div.className = this.name; + this.div.setAttribute("id", this.id); + this.div.tabIndex = this.#disabled ? -1 : 0; + if (!this._isVisible) { + this.div.classList.add("hidden"); + } + this.setInForeground(); + this.div.addEventListener("focusin", this.#boundFocusin); + this.div.addEventListener("focusout", this.#boundFocusout); + const [parentWidth, parentHeight] = this.parentDimensions; + if (this.parentRotation % 180 !== 0) { + this.div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`; + this.div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`; + } + const [tx, ty] = this.getInitialTranslation(); + this.translate(tx, ty); + bindEvents(this, this.div, ["pointerdown"]); + return this.div; + } + pointerdown(event) { + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + event.preventDefault(); + return; + } + this.#hasBeenClicked = true; + if (this._isDraggable) { + this.#setUpDragSession(event); + return; + } + this.#selectOnPointerEvent(event); + } + #selectOnPointerEvent(event) { + const { + isMac + } = util_FeatureTest.platform; + if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) { + this.parent.toggleSelected(this); + } else { + this.parent.setSelected(this); } } - if (mustRotate) { - div.setAttribute("data-main-rotation", viewport.rotation); + #setUpDragSession(event) { + const isSelected = this._uiManager.isSelected(this); + this._uiManager.setUpDragSession(); + let pointerMoveOptions, pointerMoveCallback; + if (isSelected) { + this.div.classList.add("moving"); + pointerMoveOptions = { + passive: true, + capture: true + }; + this.#prevDragX = event.clientX; + this.#prevDragY = event.clientY; + pointerMoveCallback = e => { + const { + clientX: x, + clientY: y + } = e; + const [tx, ty] = this.screenToPageTranslation(x - this.#prevDragX, y - this.#prevDragY); + this.#prevDragX = x; + this.#prevDragY = y; + this._uiManager.dragSelectedEditors(tx, ty); + }; + window.addEventListener("pointermove", pointerMoveCallback, pointerMoveOptions); + } + const pointerUpCallback = () => { + window.removeEventListener("pointerup", pointerUpCallback); + window.removeEventListener("blur", pointerUpCallback); + if (isSelected) { + this.div.classList.remove("moving"); + window.removeEventListener("pointermove", pointerMoveCallback, pointerMoveOptions); + } + this.#hasBeenClicked = false; + if (!this._uiManager.endDragSession()) { + this.#selectOnPointerEvent(event); + } + }; + window.addEventListener("pointerup", pointerUpCallback); + window.addEventListener("blur", pointerUpCallback); } -} - -/***/ }), -/* 7 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.BaseStandardFontDataFactory = exports.BaseSVGFactory = exports.BaseFilterFactory = exports.BaseCanvasFactory = exports.BaseCMapReaderFactory = void 0; -var _util = __w_pdfjs_require__(1); -class BaseFilterFactory { - constructor() { - if (this.constructor === BaseFilterFactory) { - (0, _util.unreachable)("Cannot initialize BaseFilterFactory."); + moveInDOM() { + if (this.#moveInDOMTimeout) { + clearTimeout(this.#moveInDOMTimeout); + } + this.#moveInDOMTimeout = setTimeout(() => { + this.#moveInDOMTimeout = null; + this.parent?.moveEditorInDOM(this); + }, 0); + } + _setParentAndPosition(parent, x, y) { + parent.changeParent(this); + this.x = x; + this.y = y; + this.fixAndSetPosition(); + } + getRect(tx, ty, rotation = this.rotation) { + const scale = this.parentScale; + const [pageWidth, pageHeight] = this.pageDimensions; + const [pageX, pageY] = this.pageTranslation; + const shiftX = tx / scale; + const shiftY = ty / scale; + const x = this.x * pageWidth; + const y = this.y * pageHeight; + const width = this.width * pageWidth; + const height = this.height * pageHeight; + switch (rotation) { + case 0: + return [x + shiftX + pageX, pageHeight - y - shiftY - height + pageY, x + shiftX + width + pageX, pageHeight - y - shiftY + pageY]; + case 90: + return [x + shiftY + pageX, pageHeight - y + shiftX + pageY, x + shiftY + height + pageX, pageHeight - y + shiftX + width + pageY]; + case 180: + return [x - shiftX - width + pageX, pageHeight - y + shiftY + pageY, x - shiftX + pageX, pageHeight - y + shiftY + height + pageY]; + case 270: + return [x - shiftY - height + pageX, pageHeight - y - shiftX - width + pageY, x - shiftY + pageX, pageHeight - y - shiftX + pageY]; + default: + throw new Error("Invalid rotation"); } } - addFilter(maps) { - return "none"; - } - addHCMFilter(fgColor, bgColor) { - return "none"; - } - addHighlightHCMFilter(fgColor, bgColor, newFgColor, newBgColor) { - return "none"; - } - destroy(keepHCM = false) {} -} -exports.BaseFilterFactory = BaseFilterFactory; -class BaseCanvasFactory { - constructor() { - if (this.constructor === BaseCanvasFactory) { - (0, _util.unreachable)("Cannot initialize BaseCanvasFactory."); + getRectInCurrentCoords(rect, pageHeight) { + const [x1, y1, x2, y2] = rect; + const width = x2 - x1; + const height = y2 - y1; + switch (this.rotation) { + case 0: + return [x1, pageHeight - y2, width, height]; + case 90: + return [x1, pageHeight - y1, height, width]; + case 180: + return [x2, pageHeight - y1, width, height]; + case 270: + return [x2, pageHeight - y2, height, width]; + default: + throw new Error("Invalid rotation"); } } - create(width, height) { - if (width <= 0 || height <= 0) { - throw new Error("Invalid canvas size"); + onceAdded() {} + isEmpty() { + return false; + } + enableEditMode() { + this.#isInEditMode = true; + } + disableEditMode() { + this.#isInEditMode = false; + } + isInEditMode() { + return this.#isInEditMode; + } + shouldGetKeyboardEvents() { + return this.#isResizerEnabledForKeyboard; + } + needsToBeRebuilt() { + return this.div && !this.isAttachedToDOM; + } + rebuild() { + this.div?.addEventListener("focusin", this.#boundFocusin); + this.div?.addEventListener("focusout", this.#boundFocusout); + } + rotate(_angle) {} + serialize(isForCopying = false, context = null) { + unreachable("An editor must be serializable"); + } + static deserialize(data, parent, uiManager) { + const editor = new this.prototype.constructor({ + parent, + id: parent.getNextId(), + uiManager + }); + editor.rotation = data.rotation; + const [pageWidth, pageHeight] = editor.pageDimensions; + const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight); + editor.x = x / pageWidth; + editor.y = y / pageHeight; + editor.width = width / pageWidth; + editor.height = height / pageHeight; + return editor; + } + get hasBeenModified() { + return !!this.annotationElementId && (this.deleted || this.serialize() !== null); + } + remove() { + this.div.removeEventListener("focusin", this.#boundFocusin); + this.div.removeEventListener("focusout", this.#boundFocusout); + if (!this.isEmpty()) { + this.commit(); } - const canvas = this._createCanvas(width, height); + if (this.parent) { + this.parent.remove(this); + } else { + this._uiManager.removeEditor(this); + } + if (this.#moveInDOMTimeout) { + clearTimeout(this.#moveInDOMTimeout); + this.#moveInDOMTimeout = null; + } + this.#stopResizing(); + this.removeEditToolbar(); + if (this.#telemetryTimeouts) { + for (const timeout of this.#telemetryTimeouts.values()) { + clearTimeout(timeout); + } + this.#telemetryTimeouts = null; + } + this.parent = null; + } + get isResizable() { + return false; + } + makeResizable() { + if (this.isResizable) { + this.#createResizers(); + this.#resizersDiv.classList.remove("hidden"); + bindEvents(this, this.div, ["keydown"]); + } + } + get toolbarPosition() { + return null; + } + keydown(event) { + if (!this.isResizable || event.target !== this.div || event.key !== "Enter") { + return; + } + this._uiManager.setSelected(this); + this.#savedDimensions = { + savedX: this.x, + savedY: this.y, + savedWidth: this.width, + savedHeight: this.height + }; + const children = this.#resizersDiv.children; + if (!this.#allResizerDivs) { + this.#allResizerDivs = Array.from(children); + const boundResizerKeydown = this.#resizerKeydown.bind(this); + const boundResizerBlur = this.#resizerBlur.bind(this); + for (const div of this.#allResizerDivs) { + const name = div.getAttribute("data-resizer-name"); + div.setAttribute("role", "spinbutton"); + div.addEventListener("keydown", boundResizerKeydown); + div.addEventListener("blur", boundResizerBlur); + div.addEventListener("focus", this.#resizerFocus.bind(this, name)); + AnnotationEditor._l10nPromise.get(`pdfjs-editor-resizer-label-${name}`).then(msg => div.setAttribute("aria-label", msg)); + } + } + const first = this.#allResizerDivs[0]; + let firstPosition = 0; + for (const div of children) { + if (div === first) { + break; + } + firstPosition++; + } + const nextFirstPosition = (360 - this.rotation + this.parentRotation) % 360 / 90 * (this.#allResizerDivs.length / 4); + if (nextFirstPosition !== firstPosition) { + if (nextFirstPosition < firstPosition) { + for (let i = 0; i < firstPosition - nextFirstPosition; i++) { + this.#resizersDiv.append(this.#resizersDiv.firstChild); + } + } else if (nextFirstPosition > firstPosition) { + for (let i = 0; i < nextFirstPosition - firstPosition; i++) { + this.#resizersDiv.firstChild.before(this.#resizersDiv.lastChild); + } + } + let i = 0; + for (const child of children) { + const div = this.#allResizerDivs[i++]; + const name = div.getAttribute("data-resizer-name"); + AnnotationEditor._l10nPromise.get(`pdfjs-editor-resizer-label-${name}`).then(msg => child.setAttribute("aria-label", msg)); + } + } + this.#setResizerTabIndex(0); + this.#isResizerEnabledForKeyboard = true; + this.#resizersDiv.firstChild.focus({ + focusVisible: true + }); + event.preventDefault(); + event.stopImmediatePropagation(); + } + #resizerKeydown(event) { + AnnotationEditor._resizerKeyboardManager.exec(this, event); + } + #resizerBlur(event) { + if (this.#isResizerEnabledForKeyboard && event.relatedTarget?.parentNode !== this.#resizersDiv) { + this.#stopResizing(); + } + } + #resizerFocus(name) { + this.#focusedResizerName = this.#isResizerEnabledForKeyboard ? name : ""; + } + #setResizerTabIndex(value) { + if (!this.#allResizerDivs) { + return; + } + for (const div of this.#allResizerDivs) { + div.tabIndex = value; + } + } + _resizeWithKeyboard(x, y) { + if (!this.#isResizerEnabledForKeyboard) { + return; + } + this.#resizerPointermove(this.#focusedResizerName, { + movementX: x, + movementY: y + }); + } + #stopResizing() { + this.#isResizerEnabledForKeyboard = false; + this.#setResizerTabIndex(-1); + if (this.#savedDimensions) { + const { + savedX, + savedY, + savedWidth, + savedHeight + } = this.#savedDimensions; + this.#addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight); + this.#savedDimensions = null; + } + } + _stopResizingWithKeyboard() { + this.#stopResizing(); + this.div.focus(); + } + select() { + this.makeResizable(); + this.div?.classList.add("selectedEditor"); + if (!this.#editToolbar) { + this.addEditToolbar().then(() => { + if (this.div?.classList.contains("selectedEditor")) { + this.#editToolbar?.show(); + } + }); + return; + } + this.#editToolbar?.show(); + } + unselect() { + this.#resizersDiv?.classList.add("hidden"); + this.div?.classList.remove("selectedEditor"); + if (this.div?.contains(document.activeElement)) { + this._uiManager.currentLayer.div.focus({ + preventScroll: true + }); + } + this.#editToolbar?.hide(); + } + updateParams(type, value) {} + disableEditing() {} + enableEditing() {} + enterInEditMode() {} + getImageForAltText() { + return null; + } + get contentDiv() { + return this.div; + } + get isEditing() { + return this.#isEditing; + } + set isEditing(value) { + this.#isEditing = value; + if (!this.parent) { + return; + } + if (value) { + this.parent.setSelected(this); + this.parent.setActiveEditor(this); + } else { + this.parent.setActiveEditor(null); + } + } + setAspectRatio(width, height) { + this.#keepAspectRatio = true; + const aspectRatio = width / height; + const { + style + } = this.div; + style.aspectRatio = aspectRatio; + style.height = "auto"; + } + static get MIN_SIZE() { + return 16; + } + static canCreateNewEmptyEditor() { + return true; + } + get telemetryInitialData() { return { - canvas, - context: canvas.getContext("2d") + action: "added" }; } - reset(canvasAndContext, width, height) { - if (!canvasAndContext.canvas) { - throw new Error("Canvas is not specified"); - } - if (width <= 0 || height <= 0) { - throw new Error("Invalid canvas size"); - } - canvasAndContext.canvas.width = width; - canvasAndContext.canvas.height = height; + get telemetryFinalData() { + return null; } - destroy(canvasAndContext) { - if (!canvasAndContext.canvas) { - throw new Error("Canvas is not specified"); + _reportTelemetry(data, mustWait = false) { + if (mustWait) { + this.#telemetryTimeouts ||= new Map(); + const { + action + } = data; + let timeout = this.#telemetryTimeouts.get(action); + if (timeout) { + clearTimeout(timeout); + } + timeout = setTimeout(() => { + this._reportTelemetry(data); + this.#telemetryTimeouts.delete(action); + if (this.#telemetryTimeouts.size === 0) { + this.#telemetryTimeouts = null; + } + }, AnnotationEditor._telemetryTimeout); + this.#telemetryTimeouts.set(action, timeout); + return; } - canvasAndContext.canvas.width = 0; - canvasAndContext.canvas.height = 0; - canvasAndContext.canvas = null; - canvasAndContext.context = null; - } - _createCanvas(width, height) { - (0, _util.unreachable)("Abstract method `_createCanvas` called."); - } -} -exports.BaseCanvasFactory = BaseCanvasFactory; -class BaseCMapReaderFactory { - constructor({ - baseUrl = null, - isCompressed = true - }) { - if (this.constructor === BaseCMapReaderFactory) { - (0, _util.unreachable)("Cannot initialize BaseCMapReaderFactory."); - } - this.baseUrl = baseUrl; - this.isCompressed = isCompressed; - } - async fetch({ - name - }) { - if (!this.baseUrl) { - throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'); - } - if (!name) { - throw new Error("CMap name must be specified."); - } - const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); - const compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE; - return this._fetchData(url, compressionType).catch(reason => { - throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); + data.type ||= this.editorType; + this._uiManager._eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + data + } }); } - _fetchData(url, compressionType) { - (0, _util.unreachable)("Abstract method `_fetchData` called."); + show(visible = this._isVisible) { + this.div.classList.toggle("hidden", !visible); + this._isVisible = visible; + } + enable() { + if (this.div) { + this.div.tabIndex = 0; + } + this.#disabled = false; + } + disable() { + if (this.div) { + this.div.tabIndex = -1; + } + this.#disabled = true; + } + renderAnnotationElement(annotation) { + let content = annotation.container.querySelector(".annotationContent"); + if (!content) { + content = document.createElement("div"); + content.classList.add("annotationContent", this.editorType); + annotation.container.prepend(content); + } else if (content.nodeName === "CANVAS") { + const canvas = content; + content = document.createElement("div"); + content.classList.add("annotationContent", this.editorType); + canvas.before(content); + } + return content; + } + resetAnnotationElement(annotation) { + const { + firstChild + } = annotation.container; + if (firstChild.nodeName === "DIV" && firstChild.classList.contains("annotationContent")) { + firstChild.remove(); + } } } -exports.BaseCMapReaderFactory = BaseCMapReaderFactory; -class BaseStandardFontDataFactory { - constructor({ - baseUrl = null - }) { - if (this.constructor === BaseStandardFontDataFactory) { - (0, _util.unreachable)("Cannot initialize BaseStandardFontDataFactory."); - } - this.baseUrl = baseUrl; +class FakeEditor extends AnnotationEditor { + constructor(params) { + super(params); + this.annotationElementId = params.annotationElementId; + this.deleted = true; } - async fetch({ - filename - }) { - if (!this.baseUrl) { - throw new Error('The standard font "baseUrl" parameter must be specified, ensure that ' + 'the "standardFontDataUrl" API parameter is provided.'); - } - if (!filename) { - throw new Error("Font filename must be specified."); - } - const url = `${this.baseUrl}${filename}`; - return this._fetchData(url).catch(reason => { - throw new Error(`Unable to load font data at: ${url}`); - }); - } - _fetchData(url) { - (0, _util.unreachable)("Abstract method `_fetchData` called."); + serialize() { + return { + id: this.annotationElementId, + deleted: true, + pageIndex: this.pageIndex + }; } } -exports.BaseStandardFontDataFactory = BaseStandardFontDataFactory; -class BaseSVGFactory { - constructor() { - if (this.constructor === BaseSVGFactory) { - (0, _util.unreachable)("Cannot initialize BaseSVGFactory."); - } - } - create(width, height, skipDimensions = false) { - if (width <= 0 || height <= 0) { - throw new Error("Invalid SVG dimensions"); - } - const svg = this._createSVG("svg:svg"); - svg.setAttribute("version", "1.1"); - if (!skipDimensions) { - svg.setAttribute("width", `${width}px`); - svg.setAttribute("height", `${height}px`); - } - svg.setAttribute("preserveAspectRatio", "none"); - svg.setAttribute("viewBox", `0 0 ${width} ${height}`); - return svg; - } - createElement(type) { - if (typeof type !== "string") { - throw new Error("Invalid SVG element type"); - } - return this._createSVG(type); - } - _createSVG(type) { - (0, _util.unreachable)("Abstract method `_createSVG` called."); - } -} -exports.BaseSVGFactory = BaseSVGFactory; -/***/ }), -/* 8 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.MurmurHash3_64 = void 0; -var _util = __w_pdfjs_require__(1); +;// CONCATENATED MODULE: ./src/shared/murmurhash3.js const SEED = 0xc3d2e1f0; const MASK_HIGH = 0xffff0000; const MASK_LOW = 0xffff; @@ -5806,11 +4698,11 @@ class MurmurHash3_64 { data[length++] = code & 0xff; } } - } else if ((0, _util.isArrayBuffer)(input)) { + } else if (ArrayBuffer.isView(input)) { data = input.slice(); length = data.byteLength; } else { - throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array."); + throw new Error("Invalid data format, must be a string or TypedArray."); } const blockCounts = length >> 2; const tailLength = length - blockCounts * 4; @@ -5875,19 +4767,198 @@ class MurmurHash3_64 { return (h1 >>> 0).toString(16).padStart(8, "0") + (h2 >>> 0).toString(16).padStart(8, "0"); } } -exports.MurmurHash3_64 = MurmurHash3_64; -/***/ }), -/* 9 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +;// CONCATENATED MODULE: ./src/display/annotation_storage.js -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.FontLoader = exports.FontFaceObject = void 0; -var _util = __w_pdfjs_require__(1); +const SerializableEmpty = Object.freeze({ + map: null, + hash: "", + transfer: undefined +}); +class AnnotationStorage { + #modified = false; + #storage = new Map(); + constructor() { + this.onSetModified = null; + this.onResetModified = null; + this.onAnnotationEditor = null; + } + getValue(key, defaultValue) { + const value = this.#storage.get(key); + if (value === undefined) { + return defaultValue; + } + return Object.assign(defaultValue, value); + } + getRawValue(key) { + return this.#storage.get(key); + } + remove(key) { + this.#storage.delete(key); + if (this.#storage.size === 0) { + this.resetModified(); + } + if (typeof this.onAnnotationEditor === "function") { + for (const value of this.#storage.values()) { + if (value instanceof AnnotationEditor) { + return; + } + } + this.onAnnotationEditor(null); + } + } + setValue(key, value) { + const obj = this.#storage.get(key); + let modified = false; + if (obj !== undefined) { + for (const [entry, val] of Object.entries(value)) { + if (obj[entry] !== val) { + modified = true; + obj[entry] = val; + } + } + } else { + modified = true; + this.#storage.set(key, value); + } + if (modified) { + this.#setModified(); + } + if (value instanceof AnnotationEditor && typeof this.onAnnotationEditor === "function") { + this.onAnnotationEditor(value.constructor._type); + } + } + has(key) { + return this.#storage.has(key); + } + getAll() { + return this.#storage.size > 0 ? objectFromMap(this.#storage) : null; + } + setAll(obj) { + for (const [key, val] of Object.entries(obj)) { + this.setValue(key, val); + } + } + get size() { + return this.#storage.size; + } + #setModified() { + if (!this.#modified) { + this.#modified = true; + if (typeof this.onSetModified === "function") { + this.onSetModified(); + } + } + } + resetModified() { + if (this.#modified) { + this.#modified = false; + if (typeof this.onResetModified === "function") { + this.onResetModified(); + } + } + } + get print() { + return new PrintAnnotationStorage(this); + } + get serializable() { + if (this.#storage.size === 0) { + return SerializableEmpty; + } + const map = new Map(), + hash = new MurmurHash3_64(), + transfer = []; + const context = Object.create(null); + let hasBitmap = false; + for (const [key, val] of this.#storage) { + const serialized = val instanceof AnnotationEditor ? val.serialize(false, context) : val; + if (serialized) { + map.set(key, serialized); + hash.update(`${key}:${JSON.stringify(serialized)}`); + hasBitmap ||= !!serialized.bitmap; + } + } + if (hasBitmap) { + for (const value of map.values()) { + if (value.bitmap) { + transfer.push(value.bitmap); + } + } + } + return map.size > 0 ? { + map, + hash: hash.hexdigest(), + transfer + } : SerializableEmpty; + } + get editorStats() { + let stats = null; + const typeToEditor = new Map(); + for (const value of this.#storage.values()) { + if (!(value instanceof AnnotationEditor)) { + continue; + } + const editorStats = value.telemetryFinalData; + if (!editorStats) { + continue; + } + const { + type + } = editorStats; + if (!typeToEditor.has(type)) { + typeToEditor.set(type, Object.getPrototypeOf(value).constructor); + } + stats ||= Object.create(null); + const map = stats[type] ||= new Map(); + for (const [key, val] of Object.entries(editorStats)) { + if (key === "type") { + continue; + } + let counters = map.get(key); + if (!counters) { + counters = new Map(); + map.set(key, counters); + } + const count = counters.get(val) ?? 0; + counters.set(val, count + 1); + } + } + for (const [type, editor] of typeToEditor) { + stats[type] = editor.computeTelemetryFinalData(stats[type]); + } + return stats; + } +} +class PrintAnnotationStorage extends AnnotationStorage { + #serializable; + constructor(parent) { + super(); + const { + map, + hash, + transfer + } = parent.serializable; + const clone = structuredClone(map, transfer ? { + transfer + } : null); + this.#serializable = { + map: clone, + hash, + transfer + }; + } + get print() { + unreachable("Should not call PrintAnnotationStorage.print"); + } + get serializable() { + return this.#serializable; + } +} + +;// CONCATENATED MODULE: ./src/display/font_loader.js + class FontLoader { #systemFonts = new Set(); constructor({ @@ -5927,11 +4998,14 @@ class FontLoader { this.styleElement = null; } } - async loadSystemFont(info) { + async loadSystemFont({ + systemFontInfo: info, + _inspectFont + }) { if (!info || this.#systemFonts.has(info.loadedName)) { return; } - (0, _util.assert)(!this.disableFontFace, "loadSystemFont shouldn't be called when `disableFontFace` is set."); + assert(!this.disableFontFace, "loadSystemFont shouldn't be called when `disableFontFace` is set."); if (this.isFontLoadingAPISupported) { const { loadedName, @@ -5943,13 +5017,14 @@ class FontLoader { try { await fontFace.load(); this.#systemFonts.add(loadedName); + _inspectFont?.(info); } catch { - (0, _util.warn)(`Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`); + warn(`Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`); this.removeNativeFontFace(fontFace); } return; } - (0, _util.unreachable)("Not implemented: loadSystemFont without the Font Loading API."); + unreachable("Not implemented: loadSystemFont without the Font Loading API."); } async bind(font) { if (font.attached || font.missingFile && !font.systemFontInfo) { @@ -5957,7 +5032,7 @@ class FontLoader { } font.attached = true; if (font.systemFontInfo) { - await this.loadSystemFont(font.systemFontInfo); + await this.loadSystemFont(font); return; } if (this.isFontLoadingAPISupported) { @@ -5967,7 +5042,7 @@ class FontLoader { try { await nativeFontFace.loaded; } catch (ex) { - (0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`); + warn(`Failed to load font '${nativeFontFace.family}': '${ex}'.`); font.disableFontFace = true; throw ex; } @@ -5988,20 +5063,20 @@ class FontLoader { } get isFontLoadingAPISupported() { const hasFonts = !!this._document?.fonts; - return (0, _util.shadow)(this, "isFontLoadingAPISupported", hasFonts); + return shadow(this, "isFontLoadingAPISupported", hasFonts); } get isSyncFontLoadingSupported() { let supported = false; - if (_util.isNodeJS) { + if (isNodeJS) { supported = true; - } else if (typeof navigator !== "undefined" && /Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent)) { + } else if (typeof navigator !== "undefined" && typeof navigator?.userAgent === "string" && /Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent)) { supported = true; } - return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported); + return shadow(this, "isSyncFontLoadingSupported", supported); } _queueLoadingCallback(callback) { function completeRequest() { - (0, _util.assert)(!request.done, "completeRequest() cannot be called twice."); + assert(!request.done, "completeRequest() cannot be called twice."); request.done = true; while (loadingRequests.length > 0 && loadingRequests[0].done) { const otherRequest = loadingRequests.shift(); @@ -6021,7 +5096,7 @@ class FontLoader { } get _loadTestFont() { const testFont = atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA=="); - return (0, _util.shadow)(this, "_loadTestFont", testFont); + return shadow(this, "_loadTestFont", testFont); } _prepareFontLoadEvent(font, request) { function int32(data, offset) { @@ -6040,7 +5115,7 @@ class FontLoader { let called = 0; function isFontReady(name, callback) { if (++called > 30) { - (0, _util.warn)("Load test font never loaded."); + warn("Load test font never loaded."); callback(); return; } @@ -6066,7 +5141,7 @@ class FontLoader { if (i < loadTestFontId.length) { checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0; } - data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum)); + data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum)); const url = `url(data:font/opentype;base64,${btoa(data)});`; const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`; this.insertRule(rule); @@ -6088,21 +5163,16 @@ class FontLoader { }); } } -exports.FontLoader = FontLoader; class FontFaceObject { constructor(translatedData, { - isEvalSupported = true, disableFontFace = false, - ignoreErrors = false, inspectFont = null }) { this.compiledGlyphs = Object.create(null); for (const i in translatedData) { this[i] = translatedData[i]; } - this.isEvalSupported = isEvalSupported !== false; this.disableFontFace = disableFontFace === true; - this.ignoreErrors = ignoreErrors === true; this._inspectFont = inspectFont; } createNativeFontFace() { @@ -6128,7 +5198,7 @@ class FontFaceObject { if (!this.data || this.disableFontFace) { return null; } - const data = (0, _util.bytesToString)(this.data); + const data = bytesToString(this.data); const url = `url(data:${this.mimetype};base64,${btoa(data)});`; let rule; if (!this.cssFontInfo) { @@ -6151,2312 +5221,145 @@ class FontFaceObject { try { cmds = objs.get(this.loadedName + "_path_" + character); } catch (ex) { - if (!this.ignoreErrors) { - throw ex; - } - (0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`); + warn(`getPathGenerator - ignoring character: "${ex}".`); + } + if (!Array.isArray(cmds) || cmds.length === 0) { return this.compiledGlyphs[character] = function (c, size) {}; } - if (this.isEvalSupported && _util.FeatureTest.isEvalSupported) { - const jsBuf = []; - for (const current of cmds) { - const args = current.args !== undefined ? current.args.join(",") : ""; - jsBuf.push("c.", current.cmd, "(", args, ");\n"); + const commands = []; + for (let i = 0, ii = cmds.length; i < ii;) { + switch (cmds[i++]) { + case FontRenderOps.BEZIER_CURVE_TO: + { + const [a, b, c, d, e, f] = cmds.slice(i, i + 6); + commands.push(ctx => ctx.bezierCurveTo(a, b, c, d, e, f)); + i += 6; + } + break; + case FontRenderOps.MOVE_TO: + { + const [a, b] = cmds.slice(i, i + 2); + commands.push(ctx => ctx.moveTo(a, b)); + i += 2; + } + break; + case FontRenderOps.LINE_TO: + { + const [a, b] = cmds.slice(i, i + 2); + commands.push(ctx => ctx.lineTo(a, b)); + i += 2; + } + break; + case FontRenderOps.QUADRATIC_CURVE_TO: + { + const [a, b, c, d] = cmds.slice(i, i + 4); + commands.push(ctx => ctx.quadraticCurveTo(a, b, c, d)); + i += 4; + } + break; + case FontRenderOps.RESTORE: + commands.push(ctx => ctx.restore()); + break; + case FontRenderOps.SAVE: + commands.push(ctx => ctx.save()); + break; + case FontRenderOps.SCALE: + assert(commands.length === 2, "Scale command is only valid at the third position."); + break; + case FontRenderOps.TRANSFORM: + { + const [a, b, c, d, e, f] = cmds.slice(i, i + 6); + commands.push(ctx => ctx.transform(a, b, c, d, e, f)); + i += 6; + } + break; + case FontRenderOps.TRANSLATE: + { + const [a, b] = cmds.slice(i, i + 2); + commands.push(ctx => ctx.translate(a, b)); + i += 2; + } + break; } - return this.compiledGlyphs[character] = new Function("c", "size", jsBuf.join("")); } - return this.compiledGlyphs[character] = function (c, size) { - for (const current of cmds) { - if (current.cmd === "scale") { - current.args = [size, -size]; - } - c[current.cmd].apply(c, current.args); + return this.compiledGlyphs[character] = function glyphDrawer(ctx, size) { + commands[0](ctx); + commands[1](ctx); + ctx.scale(size, -size); + for (let i = 2, ii = commands.length; i < ii; i++) { + commands[i](ctx); } }; } } -exports.FontFaceObject = FontFaceObject; -/***/ }), -/* 10 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +;// CONCATENATED MODULE: ./src/display/node_utils.js - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.NodeStandardFontDataFactory = exports.NodeFilterFactory = exports.NodeCanvasFactory = exports.NodeCMapReaderFactory = void 0; -var _base_factory = __w_pdfjs_require__(7); -var _util = __w_pdfjs_require__(1); -; -; -const fetchData = function (url) { - return new Promise((resolve, reject) => { - const fs = require("fs"); - fs.readFile(url, (error, data) => { - if (error || !data) { - reject(new Error(error)); - return; - } - resolve(new Uint8Array(data)); - }); - }); -}; -class NodeFilterFactory extends _base_factory.BaseFilterFactory {} -exports.NodeFilterFactory = NodeFilterFactory; -class NodeCanvasFactory extends _base_factory.BaseCanvasFactory { - _createCanvas(width, height) { - const Canvas = require("canvas"); - return Canvas.createCanvas(width, height); - } -} -exports.NodeCanvasFactory = NodeCanvasFactory; -class NodeCMapReaderFactory extends _base_factory.BaseCMapReaderFactory { - _fetchData(url, compressionType) { - return fetchData(url).then(data => { - return { - cMapData: data, - compressionType - }; - }); - } -} -exports.NodeCMapReaderFactory = NodeCMapReaderFactory; -class NodeStandardFontDataFactory extends _base_factory.BaseStandardFontDataFactory { - _fetchData(url) { - return fetchData(url); - } -} -exports.NodeStandardFontDataFactory = NodeStandardFontDataFactory; - -/***/ }), -/* 11 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.CanvasGraphics = void 0; -var _util = __w_pdfjs_require__(1); -var _display_utils = __w_pdfjs_require__(6); -var _pattern_helper = __w_pdfjs_require__(12); -var _image_utils = __w_pdfjs_require__(13); -const MIN_FONT_SIZE = 16; -const MAX_FONT_SIZE = 100; -const MAX_GROUP_SIZE = 4096; -const EXECUTION_TIME = 15; -const EXECUTION_STEPS = 10; -const MAX_SIZE_TO_COMPILE = 1000; -const FULL_CHUNK_HEIGHT = 16; -function mirrorContextOperations(ctx, destCtx) { - if (ctx._removeMirroring) { - throw new Error("Context is already forwarding operations."); - } - ctx.__originalSave = ctx.save; - ctx.__originalRestore = ctx.restore; - ctx.__originalRotate = ctx.rotate; - ctx.__originalScale = ctx.scale; - ctx.__originalTranslate = ctx.translate; - ctx.__originalTransform = ctx.transform; - ctx.__originalSetTransform = ctx.setTransform; - ctx.__originalResetTransform = ctx.resetTransform; - ctx.__originalClip = ctx.clip; - ctx.__originalMoveTo = ctx.moveTo; - ctx.__originalLineTo = ctx.lineTo; - ctx.__originalBezierCurveTo = ctx.bezierCurveTo; - ctx.__originalRect = ctx.rect; - ctx.__originalClosePath = ctx.closePath; - ctx.__originalBeginPath = ctx.beginPath; - ctx._removeMirroring = () => { - ctx.save = ctx.__originalSave; - ctx.restore = ctx.__originalRestore; - ctx.rotate = ctx.__originalRotate; - ctx.scale = ctx.__originalScale; - ctx.translate = ctx.__originalTranslate; - ctx.transform = ctx.__originalTransform; - ctx.setTransform = ctx.__originalSetTransform; - ctx.resetTransform = ctx.__originalResetTransform; - ctx.clip = ctx.__originalClip; - ctx.moveTo = ctx.__originalMoveTo; - ctx.lineTo = ctx.__originalLineTo; - ctx.bezierCurveTo = ctx.__originalBezierCurveTo; - ctx.rect = ctx.__originalRect; - ctx.closePath = ctx.__originalClosePath; - ctx.beginPath = ctx.__originalBeginPath; - delete ctx._removeMirroring; - }; - ctx.save = function ctxSave() { - destCtx.save(); - this.__originalSave(); - }; - ctx.restore = function ctxRestore() { - destCtx.restore(); - this.__originalRestore(); - }; - ctx.translate = function ctxTranslate(x, y) { - destCtx.translate(x, y); - this.__originalTranslate(x, y); - }; - ctx.scale = function ctxScale(x, y) { - destCtx.scale(x, y); - this.__originalScale(x, y); - }; - ctx.transform = function ctxTransform(a, b, c, d, e, f) { - destCtx.transform(a, b, c, d, e, f); - this.__originalTransform(a, b, c, d, e, f); - }; - ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { - destCtx.setTransform(a, b, c, d, e, f); - this.__originalSetTransform(a, b, c, d, e, f); - }; - ctx.resetTransform = function ctxResetTransform() { - destCtx.resetTransform(); - this.__originalResetTransform(); - }; - ctx.rotate = function ctxRotate(angle) { - destCtx.rotate(angle); - this.__originalRotate(angle); - }; - ctx.clip = function ctxRotate(rule) { - destCtx.clip(rule); - this.__originalClip(rule); - }; - ctx.moveTo = function (x, y) { - destCtx.moveTo(x, y); - this.__originalMoveTo(x, y); - }; - ctx.lineTo = function (x, y) { - destCtx.lineTo(x, y); - this.__originalLineTo(x, y); - }; - ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) { - destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); - this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); - }; - ctx.rect = function (x, y, width, height) { - destCtx.rect(x, y, width, height); - this.__originalRect(x, y, width, height); - }; - ctx.closePath = function () { - destCtx.closePath(); - this.__originalClosePath(); - }; - ctx.beginPath = function () { - destCtx.beginPath(); - this.__originalBeginPath(); - }; -} -class CachedCanvases { - constructor(canvasFactory) { - this.canvasFactory = canvasFactory; - this.cache = Object.create(null); - } - getCanvas(id, width, height) { - let canvasEntry; - if (this.cache[id] !== undefined) { - canvasEntry = this.cache[id]; - this.canvasFactory.reset(canvasEntry, width, height); - } else { - canvasEntry = this.canvasFactory.create(width, height); - this.cache[id] = canvasEntry; - } - return canvasEntry; - } - delete(id) { - delete this.cache[id]; - } - clear() { - for (const id in this.cache) { - const canvasEntry = this.cache[id]; - this.canvasFactory.destroy(canvasEntry); - delete this.cache[id]; - } - } -} -function drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) { - const [a, b, c, d, tx, ty] = (0, _display_utils.getCurrentTransform)(ctx); - if (b === 0 && c === 0) { - const tlX = destX * a + tx; - const rTlX = Math.round(tlX); - const tlY = destY * d + ty; - const rTlY = Math.round(tlY); - const brX = (destX + destW) * a + tx; - const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; - const brY = (destY + destH) * d + ty; - const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; - ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY); - ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight); - ctx.setTransform(a, b, c, d, tx, ty); - return [rWidth, rHeight]; - } - if (a === 0 && d === 0) { - const tlX = destY * c + tx; - const rTlX = Math.round(tlX); - const tlY = destX * b + ty; - const rTlY = Math.round(tlY); - const brX = (destY + destH) * c + tx; - const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; - const brY = (destX + destW) * b + ty; - const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; - ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY); - ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth); - ctx.setTransform(a, b, c, d, tx, ty); - return [rHeight, rWidth]; - } - ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH); - const scaleX = Math.hypot(a, b); - const scaleY = Math.hypot(c, d); - return [scaleX * destW, scaleY * destH]; -} -function compileType3Glyph(imgData) { - const { - width, - height - } = imgData; - if (width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) { - return null; - } - const POINT_TO_PROCESS_LIMIT = 1000; - const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); - const width1 = width + 1; - let points = new Uint8Array(width1 * (height + 1)); - let i, j, j0; - const lineSize = width + 7 & ~7; - let data = new Uint8Array(lineSize * height), - pos = 0; - for (const elem of imgData.data) { - let mask = 128; - while (mask > 0) { - data[pos++] = elem & mask ? 0 : 255; - mask >>= 1; - } - } - let count = 0; - pos = 0; - if (data[pos] !== 0) { - points[0] = 1; - ++count; - } - for (j = 1; j < width; j++) { - if (data[pos] !== data[pos + 1]) { - points[j] = data[pos] ? 2 : 1; - ++count; - } - pos++; - } - if (data[pos] !== 0) { - points[j] = 2; - ++count; - } - for (i = 1; i < height; i++) { - pos = i * lineSize; - j0 = i * width1; - if (data[pos - lineSize] !== data[pos]) { - points[j0] = data[pos] ? 1 : 8; - ++count; - } - let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); - for (j = 1; j < width; j++) { - sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); - if (POINT_TYPES[sum]) { - points[j0 + j] = POINT_TYPES[sum]; - ++count; - } - pos++; - } - if (data[pos - lineSize] !== data[pos]) { - points[j0 + j] = data[pos] ? 2 : 4; - ++count; - } - if (count > POINT_TO_PROCESS_LIMIT) { - return null; - } - } - pos = lineSize * (height - 1); - j0 = i * width1; - if (data[pos] !== 0) { - points[j0] = 8; - ++count; - } - for (j = 1; j < width; j++) { - if (data[pos] !== data[pos + 1]) { - points[j0 + j] = data[pos] ? 4 : 8; - ++count; - } - pos++; - } - if (data[pos] !== 0) { - points[j0 + j] = 4; - ++count; - } - if (count > POINT_TO_PROCESS_LIMIT) { - return null; - } - const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); - const path = new Path2D(); - for (i = 0; count && i <= height; i++) { - let p = i * width1; - const end = p + width; - while (p < end && !points[p]) { - p++; - } - if (p === end) { - continue; - } - path.moveTo(p % width1, i); - const p0 = p; - let type = points[p]; - do { - const step = steps[type]; - do { - p += step; - } while (!points[p]); - const pp = points[p]; - if (pp !== 5 && pp !== 10) { - type = pp; - points[p] = 0; - } else { - type = pp & 0x33 * type >> 4; - points[p] &= type >> 2 | type << 2; - } - path.lineTo(p % width1, p / width1 | 0); - if (!points[p]) { - --count; - } - } while (p0 !== p); - --i; - } - data = null; - points = null; - const drawOutline = function (c) { - c.save(); - c.scale(1 / width, -1 / height); - c.translate(0, -height); - c.fill(path); - c.beginPath(); - c.restore(); - }; - return drawOutline; -} -class CanvasExtraState { - constructor(width, height) { - this.alphaIsShape = false; - this.fontSize = 0; - this.fontSizeScale = 1; - this.textMatrix = _util.IDENTITY_MATRIX; - this.textMatrixScale = 1; - this.fontMatrix = _util.FONT_IDENTITY_MATRIX; - this.leading = 0; - this.x = 0; - this.y = 0; - this.lineX = 0; - this.lineY = 0; - this.charSpacing = 0; - this.wordSpacing = 0; - this.textHScale = 1; - this.textRenderingMode = _util.TextRenderingMode.FILL; - this.textRise = 0; - this.fillColor = "#000000"; - this.strokeColor = "#000000"; - this.patternFill = false; - this.fillAlpha = 1; - this.strokeAlpha = 1; - this.lineWidth = 1; - this.activeSMask = null; - this.transferMaps = "none"; - this.startNewPathAndClipBox([0, 0, width, height]); - } - clone() { - const clone = Object.create(this); - clone.clipBox = this.clipBox.slice(); - return clone; - } - setCurrentPoint(x, y) { - this.x = x; - this.y = y; - } - updatePathMinMax(transform, x, y) { - [x, y] = _util.Util.applyTransform([x, y], transform); - this.minX = Math.min(this.minX, x); - this.minY = Math.min(this.minY, y); - this.maxX = Math.max(this.maxX, x); - this.maxY = Math.max(this.maxY, y); - } - updateRectMinMax(transform, rect) { - const p1 = _util.Util.applyTransform(rect, transform); - const p2 = _util.Util.applyTransform(rect.slice(2), transform); - this.minX = Math.min(this.minX, p1[0], p2[0]); - this.minY = Math.min(this.minY, p1[1], p2[1]); - this.maxX = Math.max(this.maxX, p1[0], p2[0]); - this.maxY = Math.max(this.maxY, p1[1], p2[1]); - } - updateScalingPathMinMax(transform, minMax) { - _util.Util.scaleMinMax(transform, minMax); - this.minX = Math.min(this.minX, minMax[0]); - this.maxX = Math.max(this.maxX, minMax[1]); - this.minY = Math.min(this.minY, minMax[2]); - this.maxY = Math.max(this.maxY, minMax[3]); - } - updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) { - const box = _util.Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3); - if (minMax) { - minMax[0] = Math.min(minMax[0], box[0], box[2]); - minMax[1] = Math.max(minMax[1], box[0], box[2]); - minMax[2] = Math.min(minMax[2], box[1], box[3]); - minMax[3] = Math.max(minMax[3], box[1], box[3]); - return; - } - this.updateRectMinMax(transform, box); - } - getPathBoundingBox(pathType = _pattern_helper.PathType.FILL, transform = null) { - const box = [this.minX, this.minY, this.maxX, this.maxY]; - if (pathType === _pattern_helper.PathType.STROKE) { - if (!transform) { - (0, _util.unreachable)("Stroke bounding box must include transform."); - } - const scale = _util.Util.singularValueDecompose2dScale(transform); - const xStrokePad = scale[0] * this.lineWidth / 2; - const yStrokePad = scale[1] * this.lineWidth / 2; - box[0] -= xStrokePad; - box[1] -= yStrokePad; - box[2] += xStrokePad; - box[3] += yStrokePad; - } - return box; - } - updateClipFromPath() { - const intersect = _util.Util.intersect(this.clipBox, this.getPathBoundingBox()); - this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]); - } - isEmptyClip() { - return this.minX === Infinity; - } - startNewPathAndClipBox(box) { - this.clipBox = box; - this.minX = Infinity; - this.minY = Infinity; - this.maxX = 0; - this.maxY = 0; - } - getClippedPathBoundingBox(pathType = _pattern_helper.PathType.FILL, transform = null) { - return _util.Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform)); - } -} -function putBinaryImageData(ctx, imgData) { - if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { - ctx.putImageData(imgData, 0, 0); - return; - } - const height = imgData.height, - width = imgData.width; - const partialChunkHeight = height % FULL_CHUNK_HEIGHT; - const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; - const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; - const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); - let srcPos = 0, - destPos; - const src = imgData.data; - const dest = chunkImgData.data; - let i, j, thisChunkHeight, elemsInThisChunk; - if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) { - const srcLength = src.byteLength; - const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); - const dest32DataLength = dest32.length; - const fullSrcDiff = width + 7 >> 3; - const white = 0xffffffff; - const black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; - for (i = 0; i < totalChunks; i++) { - thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; - destPos = 0; - for (j = 0; j < thisChunkHeight; j++) { - const srcDiff = srcLength - srcPos; - let k = 0; - const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; - const kEndUnrolled = kEnd & ~7; - let mask = 0; - let srcByte = 0; - for (; k < kEndUnrolled; k += 8) { - srcByte = src[srcPos++]; - dest32[destPos++] = srcByte & 128 ? white : black; - dest32[destPos++] = srcByte & 64 ? white : black; - dest32[destPos++] = srcByte & 32 ? white : black; - dest32[destPos++] = srcByte & 16 ? white : black; - dest32[destPos++] = srcByte & 8 ? white : black; - dest32[destPos++] = srcByte & 4 ? white : black; - dest32[destPos++] = srcByte & 2 ? white : black; - dest32[destPos++] = srcByte & 1 ? white : black; - } - for (; k < kEnd; k++) { - if (mask === 0) { - srcByte = src[srcPos++]; - mask = 128; - } - dest32[destPos++] = srcByte & mask ? white : black; - mask >>= 1; - } - } - while (destPos < dest32DataLength) { - dest32[destPos++] = 0; - } - ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); - } - } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) { - j = 0; - elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; - for (i = 0; i < fullChunks; i++) { - dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); - srcPos += elemsInThisChunk; - ctx.putImageData(chunkImgData, 0, j); - j += FULL_CHUNK_HEIGHT; - } - if (i < totalChunks) { - elemsInThisChunk = width * partialChunkHeight * 4; - dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); - ctx.putImageData(chunkImgData, 0, j); - } - } else if (imgData.kind === _util.ImageKind.RGB_24BPP) { - thisChunkHeight = FULL_CHUNK_HEIGHT; - elemsInThisChunk = width * thisChunkHeight; - for (i = 0; i < totalChunks; i++) { - if (i >= fullChunks) { - thisChunkHeight = partialChunkHeight; - elemsInThisChunk = width * thisChunkHeight; - } - destPos = 0; - for (j = elemsInThisChunk; j--;) { - dest[destPos++] = src[srcPos++]; - dest[destPos++] = src[srcPos++]; - dest[destPos++] = src[srcPos++]; - dest[destPos++] = 255; - } - ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); - } - } else { - throw new Error(`bad image kind: ${imgData.kind}`); - } -} -function putBinaryImageMask(ctx, imgData) { - if (imgData.bitmap) { - ctx.drawImage(imgData.bitmap, 0, 0); - return; - } - const height = imgData.height, - width = imgData.width; - const partialChunkHeight = height % FULL_CHUNK_HEIGHT; - const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; - const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; - const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); - let srcPos = 0; - const src = imgData.data; - const dest = chunkImgData.data; - for (let i = 0; i < totalChunks; i++) { - const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; - ({ - srcPos - } = (0, _image_utils.convertBlackAndWhiteToRGBA)({ - src, - srcPos, - dest, - width, - height: thisChunkHeight, - nonBlackColor: 0 +if (isNodeJS) { + var packageCapability = Promise.withResolvers(); + var packageMap = null; + const loadPackages = async () => { + const fs = await import( /*webpackIgnore: true*/"fs"), + http = await import( /*webpackIgnore: true*/"http"), + https = await import( /*webpackIgnore: true*/"https"), + url = await import( /*webpackIgnore: true*/"url"); + let canvas, path2d; + return new Map(Object.entries({ + fs, + http, + https, + url, + canvas, + path2d })); - ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + }; + loadPackages().then(map => { + packageMap = map; + packageCapability.resolve(); + }, reason => { + warn(`loadPackages: ${reason}`); + packageMap = new Map(); + packageCapability.resolve(); + }); +} +class NodePackages { + static get promise() { + return packageCapability.promise; + } + static get(name) { + return packageMap?.get(name); } } -function copyCtxState(sourceCtx, destCtx) { - const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"]; - for (const property of properties) { - if (sourceCtx[property] !== undefined) { - destCtx[property] = sourceCtx[property]; - } - } - if (sourceCtx.setLineDash !== undefined) { - destCtx.setLineDash(sourceCtx.getLineDash()); - destCtx.lineDashOffset = sourceCtx.lineDashOffset; +const node_utils_fetchData = function (url) { + const fs = NodePackages.get("fs"); + return fs.promises.readFile(url).then(data => new Uint8Array(data)); +}; +class NodeFilterFactory extends BaseFilterFactory {} +class NodeCanvasFactory extends BaseCanvasFactory { + _createCanvas(width, height) { + const canvas = NodePackages.get("canvas"); + return canvas.createCanvas(width, height); } } -function resetCtxToDefault(ctx) { - ctx.strokeStyle = ctx.fillStyle = "#000000"; - ctx.fillRule = "nonzero"; - ctx.globalAlpha = 1; - ctx.lineWidth = 1; - ctx.lineCap = "butt"; - ctx.lineJoin = "miter"; - ctx.miterLimit = 10; - ctx.globalCompositeOperation = "source-over"; - ctx.font = "10px sans-serif"; - if (ctx.setLineDash !== undefined) { - ctx.setLineDash([]); - ctx.lineDashOffset = 0; - } - if (!_util.isNodeJS) { - const { - filter - } = ctx; - if (filter !== "none" && filter !== "") { - ctx.filter = "none"; - } +class NodeCMapReaderFactory extends BaseCMapReaderFactory { + _fetchData(url, compressionType) { + return node_utils_fetchData(url).then(data => ({ + cMapData: data, + compressionType + })); } } -function composeSMaskBackdrop(bytes, r0, g0, b0) { - const length = bytes.length; - for (let i = 3; i < length; i += 4) { - const alpha = bytes[i]; - if (alpha === 0) { - bytes[i - 3] = r0; - bytes[i - 2] = g0; - bytes[i - 1] = b0; - } else if (alpha < 255) { - const alpha_ = 255 - alpha; - bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8; - bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8; - bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8; - } - } -} -function composeSMaskAlpha(maskData, layerData, transferMap) { - const length = maskData.length; - const scale = 1 / 255; - for (let i = 3; i < length; i += 4) { - const alpha = transferMap ? transferMap[maskData[i]] : maskData[i]; - layerData[i] = layerData[i] * alpha * scale | 0; - } -} -function composeSMaskLuminosity(maskData, layerData, transferMap) { - const length = maskData.length; - for (let i = 3; i < length; i += 4) { - const y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28; - layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16; - } -} -function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) { - const hasBackdrop = !!backdrop; - const r0 = hasBackdrop ? backdrop[0] : 0; - const g0 = hasBackdrop ? backdrop[1] : 0; - const b0 = hasBackdrop ? backdrop[2] : 0; - const composeFn = subtype === "Luminosity" ? composeSMaskLuminosity : composeSMaskAlpha; - const PIXELS_TO_PROCESS = 1048576; - const chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); - for (let row = 0; row < height; row += chunkSize) { - const chunkHeight = Math.min(chunkSize, height - row); - const maskData = maskCtx.getImageData(layerOffsetX - maskOffsetX, row + (layerOffsetY - maskOffsetY), width, chunkHeight); - const layerData = layerCtx.getImageData(layerOffsetX, row + layerOffsetY, width, chunkHeight); - if (hasBackdrop) { - composeSMaskBackdrop(maskData.data, r0, g0, b0); - } - composeFn(maskData.data, layerData.data, transferMap); - layerCtx.putImageData(layerData, layerOffsetX, row + layerOffsetY); - } -} -function composeSMask(ctx, smask, layerCtx, layerBox) { - const layerOffsetX = layerBox[0]; - const layerOffsetY = layerBox[1]; - const layerWidth = layerBox[2] - layerOffsetX; - const layerHeight = layerBox[3] - layerOffsetY; - if (layerWidth === 0 || layerHeight === 0) { - return; - } - genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY); - ctx.save(); - ctx.globalAlpha = 1; - ctx.globalCompositeOperation = "source-over"; - ctx.setTransform(1, 0, 0, 1, 0, 0); - ctx.drawImage(layerCtx.canvas, 0, 0); - ctx.restore(); -} -function getImageSmoothingEnabled(transform, interpolate) { - const scale = _util.Util.singularValueDecompose2dScale(transform); - scale[0] = Math.fround(scale[0]); - scale[1] = Math.fround(scale[1]); - const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); - if (interpolate !== undefined) { - return interpolate; - } else if (scale[0] <= actualScale || scale[1] <= actualScale) { - return true; - } - return false; -} -const LINE_CAP_STYLES = ["butt", "round", "square"]; -const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; -const NORMAL_CLIP = {}; -const EO_CLIP = {}; -class CanvasGraphics { - constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, { - optionalContentConfig, - markedContentStack = null - }, annotationCanvasMap, pageColors) { - this.ctx = canvasCtx; - this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); - this.stateStack = []; - this.pendingClip = null; - this.pendingEOFill = false; - this.res = null; - this.xobjs = null; - this.commonObjs = commonObjs; - this.objs = objs; - this.canvasFactory = canvasFactory; - this.filterFactory = filterFactory; - this.groupStack = []; - this.processingType3 = null; - this.baseTransform = null; - this.baseTransformStack = []; - this.groupLevel = 0; - this.smaskStack = []; - this.smaskCounter = 0; - this.tempSMask = null; - this.suspendedCtx = null; - this.contentVisible = true; - this.markedContentStack = markedContentStack || []; - this.optionalContentConfig = optionalContentConfig; - this.cachedCanvases = new CachedCanvases(this.canvasFactory); - this.cachedPatterns = new Map(); - this.annotationCanvasMap = annotationCanvasMap; - this.viewportScale = 1; - this.outputScaleX = 1; - this.outputScaleY = 1; - this.pageColors = pageColors; - this._cachedScaleForStroking = [-1, 0]; - this._cachedGetSinglePixelWidth = null; - this._cachedBitmapsMap = new Map(); - } - getObject(data, fallback = null) { - if (typeof data === "string") { - return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); - } - return fallback; - } - beginDrawing({ - transform, - viewport, - transparency = false, - background = null - }) { - const width = this.ctx.canvas.width; - const height = this.ctx.canvas.height; - const savedFillStyle = this.ctx.fillStyle; - this.ctx.fillStyle = background || "#ffffff"; - this.ctx.fillRect(0, 0, width, height); - this.ctx.fillStyle = savedFillStyle; - if (transparency) { - const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height); - this.compositeCtx = this.ctx; - this.transparentCanvas = transparentCanvas.canvas; - this.ctx = transparentCanvas.context; - this.ctx.save(); - this.ctx.transform(...(0, _display_utils.getCurrentTransform)(this.compositeCtx)); - } - this.ctx.save(); - resetCtxToDefault(this.ctx); - if (transform) { - this.ctx.transform(...transform); - this.outputScaleX = transform[0]; - this.outputScaleY = transform[0]; - } - this.ctx.transform(...viewport.transform); - this.viewportScale = viewport.scale; - this.baseTransform = (0, _display_utils.getCurrentTransform)(this.ctx); - } - executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { - const argsArray = operatorList.argsArray; - const fnArray = operatorList.fnArray; - let i = executionStartIdx || 0; - const argsArrayLen = argsArray.length; - if (argsArrayLen === i) { - return i; - } - const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; - const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; - let steps = 0; - const commonObjs = this.commonObjs; - const objs = this.objs; - let fnId; - while (true) { - if (stepper !== undefined && i === stepper.nextBreakPoint) { - stepper.breakIt(i, continueCallback); - return i; - } - fnId = fnArray[i]; - if (fnId !== _util.OPS.dependency) { - this[fnId].apply(this, argsArray[i]); - } else { - for (const depObjId of argsArray[i]) { - const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; - if (!objsPool.has(depObjId)) { - objsPool.get(depObjId, continueCallback); - return i; - } - } - } - i++; - if (i === argsArrayLen) { - return i; - } - if (chunkOperations && ++steps > EXECUTION_STEPS) { - if (Date.now() > endTime) { - continueCallback(); - return i; - } - steps = 0; - } - } - } - #restoreInitialState() { - while (this.stateStack.length || this.inSMaskMode) { - this.restore(); - } - this.ctx.restore(); - if (this.transparentCanvas) { - this.ctx = this.compositeCtx; - this.ctx.save(); - this.ctx.setTransform(1, 0, 0, 1, 0, 0); - this.ctx.drawImage(this.transparentCanvas, 0, 0); - this.ctx.restore(); - this.transparentCanvas = null; - } - } - endDrawing() { - this.#restoreInitialState(); - this.cachedCanvases.clear(); - this.cachedPatterns.clear(); - for (const cache of this._cachedBitmapsMap.values()) { - for (const canvas of cache.values()) { - if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) { - canvas.width = canvas.height = 0; - } - } - cache.clear(); - } - this._cachedBitmapsMap.clear(); - this.#drawFilter(); - } - #drawFilter() { - if (this.pageColors) { - const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background); - if (hcmFilterId !== "none") { - const savedFilter = this.ctx.filter; - this.ctx.filter = hcmFilterId; - this.ctx.drawImage(this.ctx.canvas, 0, 0); - this.ctx.filter = savedFilter; - } - } - } - _scaleImage(img, inverseTransform) { - const width = img.width; - const height = img.height; - let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1); - let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1); - let paintWidth = width, - paintHeight = height; - let tmpCanvasId = "prescale1"; - let tmpCanvas, tmpCtx; - while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { - let newWidth = paintWidth, - newHeight = paintHeight; - if (widthScale > 2 && paintWidth > 1) { - newWidth = paintWidth >= 16384 ? Math.floor(paintWidth / 2) - 1 || 1 : Math.ceil(paintWidth / 2); - widthScale /= paintWidth / newWidth; - } - if (heightScale > 2 && paintHeight > 1) { - newHeight = paintHeight >= 16384 ? Math.floor(paintHeight / 2) - 1 || 1 : Math.ceil(paintHeight) / 2; - heightScale /= paintHeight / newHeight; - } - tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); - tmpCtx = tmpCanvas.context; - tmpCtx.clearRect(0, 0, newWidth, newHeight); - tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); - img = tmpCanvas.canvas; - paintWidth = newWidth; - paintHeight = newHeight; - tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; - } - return { - img, - paintWidth, - paintHeight - }; - } - _createMaskCanvas(img) { - const ctx = this.ctx; - const { - width, - height - } = img; - const fillColor = this.current.fillColor; - const isPatternFill = this.current.patternFill; - const currentTransform = (0, _display_utils.getCurrentTransform)(ctx); - let cache, cacheKey, scaled, maskCanvas; - if ((img.bitmap || img.data) && img.count > 1) { - const mainKey = img.bitmap || img.data.buffer; - cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]); - cache = this._cachedBitmapsMap.get(mainKey); - if (!cache) { - cache = new Map(); - this._cachedBitmapsMap.set(mainKey, cache); - } - const cachedImage = cache.get(cacheKey); - if (cachedImage && !isPatternFill) { - const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]); - const offsetY = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]); - return { - canvas: cachedImage, - offsetX, - offsetY - }; - } - scaled = cachedImage; - } - if (!scaled) { - maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); - putBinaryImageMask(maskCanvas.context, img); - } - let maskToCanvas = _util.Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]); - maskToCanvas = _util.Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]); - const cord1 = _util.Util.applyTransform([0, 0], maskToCanvas); - const cord2 = _util.Util.applyTransform([width, height], maskToCanvas); - const rect = _util.Util.normalizeRect([cord1[0], cord1[1], cord2[0], cord2[1]]); - const drawnWidth = Math.round(rect[2] - rect[0]) || 1; - const drawnHeight = Math.round(rect[3] - rect[1]) || 1; - const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight); - const fillCtx = fillCanvas.context; - const offsetX = Math.min(cord1[0], cord2[0]); - const offsetY = Math.min(cord1[1], cord2[1]); - fillCtx.translate(-offsetX, -offsetY); - fillCtx.transform(...maskToCanvas); - if (!scaled) { - scaled = this._scaleImage(maskCanvas.canvas, (0, _display_utils.getCurrentTransformInverse)(fillCtx)); - scaled = scaled.img; - if (cache && isPatternFill) { - cache.set(cacheKey, scaled); - } - } - fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled((0, _display_utils.getCurrentTransform)(fillCtx), img.interpolate); - drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height); - fillCtx.globalCompositeOperation = "source-in"; - const inverse = _util.Util.transform((0, _display_utils.getCurrentTransformInverse)(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]); - fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, _pattern_helper.PathType.FILL) : fillColor; - fillCtx.fillRect(0, 0, width, height); - if (cache && !isPatternFill) { - this.cachedCanvases.delete("fillCanvas"); - cache.set(cacheKey, fillCanvas.canvas); - } - return { - canvas: fillCanvas.canvas, - offsetX: Math.round(offsetX), - offsetY: Math.round(offsetY) - }; - } - setLineWidth(width) { - if (width !== this.current.lineWidth) { - this._cachedScaleForStroking[0] = -1; - } - this.current.lineWidth = width; - this.ctx.lineWidth = width; - } - setLineCap(style) { - this.ctx.lineCap = LINE_CAP_STYLES[style]; - } - setLineJoin(style) { - this.ctx.lineJoin = LINE_JOIN_STYLES[style]; - } - setMiterLimit(limit) { - this.ctx.miterLimit = limit; - } - setDash(dashArray, dashPhase) { - const ctx = this.ctx; - if (ctx.setLineDash !== undefined) { - ctx.setLineDash(dashArray); - ctx.lineDashOffset = dashPhase; - } - } - setRenderingIntent(intent) {} - setFlatness(flatness) {} - setGState(states) { - for (const [key, value] of states) { - switch (key) { - case "LW": - this.setLineWidth(value); - break; - case "LC": - this.setLineCap(value); - break; - case "LJ": - this.setLineJoin(value); - break; - case "ML": - this.setMiterLimit(value); - break; - case "D": - this.setDash(value[0], value[1]); - break; - case "RI": - this.setRenderingIntent(value); - break; - case "FL": - this.setFlatness(value); - break; - case "Font": - this.setFont(value[0], value[1]); - break; - case "CA": - this.current.strokeAlpha = value; - break; - case "ca": - this.current.fillAlpha = value; - this.ctx.globalAlpha = value; - break; - case "BM": - this.ctx.globalCompositeOperation = value; - break; - case "SMask": - this.current.activeSMask = value ? this.tempSMask : null; - this.tempSMask = null; - this.checkSMaskState(); - break; - case "TR": - this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value); - break; - } - } - } - get inSMaskMode() { - return !!this.suspendedCtx; - } - checkSMaskState() { - const inSMaskMode = this.inSMaskMode; - if (this.current.activeSMask && !inSMaskMode) { - this.beginSMaskMode(); - } else if (!this.current.activeSMask && inSMaskMode) { - this.endSMaskMode(); - } - } - beginSMaskMode() { - if (this.inSMaskMode) { - throw new Error("beginSMaskMode called while already in smask mode"); - } - const drawnWidth = this.ctx.canvas.width; - const drawnHeight = this.ctx.canvas.height; - const cacheId = "smaskGroupAt" + this.groupLevel; - const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); - this.suspendedCtx = this.ctx; - this.ctx = scratchCanvas.context; - const ctx = this.ctx; - ctx.setTransform(...(0, _display_utils.getCurrentTransform)(this.suspendedCtx)); - copyCtxState(this.suspendedCtx, ctx); - mirrorContextOperations(ctx, this.suspendedCtx); - this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); - } - endSMaskMode() { - if (!this.inSMaskMode) { - throw new Error("endSMaskMode called while not in smask mode"); - } - this.ctx._removeMirroring(); - copyCtxState(this.ctx, this.suspendedCtx); - this.ctx = this.suspendedCtx; - this.suspendedCtx = null; - } - compose(dirtyBox) { - if (!this.current.activeSMask) { - return; - } - if (!dirtyBox) { - dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height]; - } else { - dirtyBox[0] = Math.floor(dirtyBox[0]); - dirtyBox[1] = Math.floor(dirtyBox[1]); - dirtyBox[2] = Math.ceil(dirtyBox[2]); - dirtyBox[3] = Math.ceil(dirtyBox[3]); - } - const smask = this.current.activeSMask; - const suspendedCtx = this.suspendedCtx; - composeSMask(suspendedCtx, smask, this.ctx, dirtyBox); - this.ctx.save(); - this.ctx.setTransform(1, 0, 0, 1, 0, 0); - this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height); - this.ctx.restore(); - } - save() { - if (this.inSMaskMode) { - copyCtxState(this.ctx, this.suspendedCtx); - this.suspendedCtx.save(); - } else { - this.ctx.save(); - } - const old = this.current; - this.stateStack.push(old); - this.current = old.clone(); - } - restore() { - if (this.stateStack.length === 0 && this.inSMaskMode) { - this.endSMaskMode(); - } - if (this.stateStack.length !== 0) { - this.current = this.stateStack.pop(); - if (this.inSMaskMode) { - this.suspendedCtx.restore(); - copyCtxState(this.suspendedCtx, this.ctx); - } else { - this.ctx.restore(); - } - this.checkSMaskState(); - this.pendingClip = null; - this._cachedScaleForStroking[0] = -1; - this._cachedGetSinglePixelWidth = null; - } - } - transform(a, b, c, d, e, f) { - this.ctx.transform(a, b, c, d, e, f); - this._cachedScaleForStroking[0] = -1; - this._cachedGetSinglePixelWidth = null; - } - constructPath(ops, args, minMax) { - const ctx = this.ctx; - const current = this.current; - let x = current.x, - y = current.y; - let startX, startY; - const currentTransform = (0, _display_utils.getCurrentTransform)(ctx); - const isScalingMatrix = currentTransform[0] === 0 && currentTransform[3] === 0 || currentTransform[1] === 0 && currentTransform[2] === 0; - const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null; - for (let i = 0, j = 0, ii = ops.length; i < ii; i++) { - switch (ops[i] | 0) { - case _util.OPS.rectangle: - x = args[j++]; - y = args[j++]; - const width = args[j++]; - const height = args[j++]; - const xw = x + width; - const yh = y + height; - ctx.moveTo(x, y); - if (width === 0 || height === 0) { - ctx.lineTo(xw, yh); - } else { - ctx.lineTo(xw, y); - ctx.lineTo(xw, yh); - ctx.lineTo(x, yh); - } - if (!isScalingMatrix) { - current.updateRectMinMax(currentTransform, [x, y, xw, yh]); - } - ctx.closePath(); - break; - case _util.OPS.moveTo: - x = args[j++]; - y = args[j++]; - ctx.moveTo(x, y); - if (!isScalingMatrix) { - current.updatePathMinMax(currentTransform, x, y); - } - break; - case _util.OPS.lineTo: - x = args[j++]; - y = args[j++]; - ctx.lineTo(x, y); - if (!isScalingMatrix) { - current.updatePathMinMax(currentTransform, x, y); - } - break; - case _util.OPS.curveTo: - startX = x; - startY = y; - x = args[j + 4]; - y = args[j + 5]; - ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); - current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y, minMaxForBezier); - j += 6; - break; - case _util.OPS.curveTo2: - startX = x; - startY = y; - ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); - current.updateCurvePathMinMax(currentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3], minMaxForBezier); - x = args[j + 2]; - y = args[j + 3]; - j += 4; - break; - case _util.OPS.curveTo3: - startX = x; - startY = y; - x = args[j + 2]; - y = args[j + 3]; - ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); - current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], x, y, x, y, minMaxForBezier); - j += 4; - break; - case _util.OPS.closePath: - ctx.closePath(); - break; - } - } - if (isScalingMatrix) { - current.updateScalingPathMinMax(currentTransform, minMaxForBezier); - } - current.setCurrentPoint(x, y); - } - closePath() { - this.ctx.closePath(); - } - stroke(consumePath = true) { - const ctx = this.ctx; - const strokeColor = this.current.strokeColor; - ctx.globalAlpha = this.current.strokeAlpha; - if (this.contentVisible) { - if (typeof strokeColor === "object" && strokeColor?.getPattern) { - ctx.save(); - ctx.strokeStyle = strokeColor.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.STROKE); - this.rescaleAndStroke(false); - ctx.restore(); - } else { - this.rescaleAndStroke(true); - } - } - if (consumePath) { - this.consumePath(this.current.getClippedPathBoundingBox()); - } - ctx.globalAlpha = this.current.fillAlpha; - } - closeStroke() { - this.closePath(); - this.stroke(); - } - fill(consumePath = true) { - const ctx = this.ctx; - const fillColor = this.current.fillColor; - const isPatternFill = this.current.patternFill; - let needRestore = false; - if (isPatternFill) { - ctx.save(); - ctx.fillStyle = fillColor.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.FILL); - needRestore = true; - } - const intersect = this.current.getClippedPathBoundingBox(); - if (this.contentVisible && intersect !== null) { - if (this.pendingEOFill) { - ctx.fill("evenodd"); - this.pendingEOFill = false; - } else { - ctx.fill(); - } - } - if (needRestore) { - ctx.restore(); - } - if (consumePath) { - this.consumePath(intersect); - } - } - eoFill() { - this.pendingEOFill = true; - this.fill(); - } - fillStroke() { - this.fill(false); - this.stroke(false); - this.consumePath(); - } - eoFillStroke() { - this.pendingEOFill = true; - this.fillStroke(); - } - closeFillStroke() { - this.closePath(); - this.fillStroke(); - } - closeEOFillStroke() { - this.pendingEOFill = true; - this.closePath(); - this.fillStroke(); - } - endPath() { - this.consumePath(); - } - clip() { - this.pendingClip = NORMAL_CLIP; - } - eoClip() { - this.pendingClip = EO_CLIP; - } - beginText() { - this.current.textMatrix = _util.IDENTITY_MATRIX; - this.current.textMatrixScale = 1; - this.current.x = this.current.lineX = 0; - this.current.y = this.current.lineY = 0; - } - endText() { - const paths = this.pendingTextPaths; - const ctx = this.ctx; - if (paths === undefined) { - ctx.beginPath(); - return; - } - ctx.save(); - ctx.beginPath(); - for (const path of paths) { - ctx.setTransform(...path.transform); - ctx.translate(path.x, path.y); - path.addToPath(ctx, path.fontSize); - } - ctx.restore(); - ctx.clip(); - ctx.beginPath(); - delete this.pendingTextPaths; - } - setCharSpacing(spacing) { - this.current.charSpacing = spacing; - } - setWordSpacing(spacing) { - this.current.wordSpacing = spacing; - } - setHScale(scale) { - this.current.textHScale = scale / 100; - } - setLeading(leading) { - this.current.leading = -leading; - } - setFont(fontRefName, size) { - const fontObj = this.commonObjs.get(fontRefName); - const current = this.current; - if (!fontObj) { - throw new Error(`Can't find font for ${fontRefName}`); - } - current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX; - if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { - (0, _util.warn)("Invalid font matrix for font " + fontRefName); - } - if (size < 0) { - size = -size; - current.fontDirection = -1; - } else { - current.fontDirection = 1; - } - this.current.font = fontObj; - this.current.fontSize = size; - if (fontObj.isType3Font) { - return; - } - const name = fontObj.loadedName || "sans-serif"; - const typeface = fontObj.systemFontInfo?.css || `"${name}", ${fontObj.fallbackName}`; - let bold = "normal"; - if (fontObj.black) { - bold = "900"; - } else if (fontObj.bold) { - bold = "bold"; - } - const italic = fontObj.italic ? "italic" : "normal"; - let browserFontSize = size; - if (size < MIN_FONT_SIZE) { - browserFontSize = MIN_FONT_SIZE; - } else if (size > MAX_FONT_SIZE) { - browserFontSize = MAX_FONT_SIZE; - } - this.current.fontSizeScale = size / browserFontSize; - this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; - } - setTextRenderingMode(mode) { - this.current.textRenderingMode = mode; - } - setTextRise(rise) { - this.current.textRise = rise; - } - moveText(x, y) { - this.current.x = this.current.lineX += x; - this.current.y = this.current.lineY += y; - } - setLeadingMoveText(x, y) { - this.setLeading(-y); - this.moveText(x, y); - } - setTextMatrix(a, b, c, d, e, f) { - this.current.textMatrix = [a, b, c, d, e, f]; - this.current.textMatrixScale = Math.hypot(a, b); - this.current.x = this.current.lineX = 0; - this.current.y = this.current.lineY = 0; - } - nextLine() { - this.moveText(0, this.current.leading); - } - paintChar(character, x, y, patternTransform) { - const ctx = this.ctx; - const current = this.current; - const font = current.font; - const textRenderingMode = current.textRenderingMode; - const fontSize = current.fontSize / current.fontSizeScale; - const fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; - const isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); - const patternFill = current.patternFill && !font.missingFile; - let addToPath; - if (font.disableFontFace || isAddToPathSet || patternFill) { - addToPath = font.getPathGenerator(this.commonObjs, character); - } - if (font.disableFontFace || patternFill) { - ctx.save(); - ctx.translate(x, y); - ctx.beginPath(); - addToPath(ctx, fontSize); - if (patternTransform) { - ctx.setTransform(...patternTransform); - } - if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - ctx.fill(); - } - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - ctx.stroke(); - } - ctx.restore(); - } else { - if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - ctx.fillText(character, x, y); - } - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - ctx.strokeText(character, x, y); - } - } - if (isAddToPathSet) { - const paths = this.pendingTextPaths ||= []; - paths.push({ - transform: (0, _display_utils.getCurrentTransform)(ctx), - x, - y, - fontSize, - addToPath - }); - } - } - get isFontSubpixelAAEnabled() { - const { - context: ctx - } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10); - ctx.scale(1.5, 1); - ctx.fillText("I", 0, 10); - const data = ctx.getImageData(0, 0, 10, 10).data; - let enabled = false; - for (let i = 3; i < data.length; i += 4) { - if (data[i] > 0 && data[i] < 255) { - enabled = true; - break; - } - } - return (0, _util.shadow)(this, "isFontSubpixelAAEnabled", enabled); - } - showText(glyphs) { - const current = this.current; - const font = current.font; - if (font.isType3Font) { - return this.showType3Text(glyphs); - } - const fontSize = current.fontSize; - if (fontSize === 0) { - return undefined; - } - const ctx = this.ctx; - const fontSizeScale = current.fontSizeScale; - const charSpacing = current.charSpacing; - const wordSpacing = current.wordSpacing; - const fontDirection = current.fontDirection; - const textHScale = current.textHScale * fontDirection; - const glyphsLength = glyphs.length; - const vertical = font.vertical; - const spacingDir = vertical ? 1 : -1; - const defaultVMetrics = font.defaultVMetrics; - const widthAdvanceScale = fontSize * current.fontMatrix[0]; - const simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; - ctx.save(); - ctx.transform(...current.textMatrix); - ctx.translate(current.x, current.y + current.textRise); - if (fontDirection > 0) { - ctx.scale(textHScale, -1); - } else { - ctx.scale(textHScale, 1); - } - let patternTransform; - if (current.patternFill) { - ctx.save(); - const pattern = current.fillColor.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.FILL); - patternTransform = (0, _display_utils.getCurrentTransform)(ctx); - ctx.restore(); - ctx.fillStyle = pattern; - } - let lineWidth = current.lineWidth; - const scale = current.textMatrixScale; - if (scale === 0 || lineWidth === 0) { - const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - lineWidth = this.getSinglePixelWidth(); - } - } else { - lineWidth /= scale; - } - if (fontSizeScale !== 1.0) { - ctx.scale(fontSizeScale, fontSizeScale); - lineWidth /= fontSizeScale; - } - ctx.lineWidth = lineWidth; - if (font.isInvalidPDFjsFont) { - const chars = []; - let width = 0; - for (const glyph of glyphs) { - chars.push(glyph.unicode); - width += glyph.width; - } - ctx.fillText(chars.join(""), 0, 0); - current.x += width * widthAdvanceScale * textHScale; - ctx.restore(); - this.compose(); - return undefined; - } - let x = 0, - i; - for (i = 0; i < glyphsLength; ++i) { - const glyph = glyphs[i]; - if (typeof glyph === "number") { - x += spacingDir * glyph * fontSize / 1000; - continue; - } - let restoreNeeded = false; - const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; - const character = glyph.fontChar; - const accent = glyph.accent; - let scaledX, scaledY; - let width = glyph.width; - if (vertical) { - const vmetric = glyph.vmetric || defaultVMetrics; - const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; - const vy = vmetric[2] * widthAdvanceScale; - width = vmetric ? -vmetric[0] : width; - scaledX = vx / fontSizeScale; - scaledY = (x + vy) / fontSizeScale; - } else { - scaledX = x / fontSizeScale; - scaledY = 0; - } - if (font.remeasure && width > 0) { - const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; - if (width < measuredWidth && this.isFontSubpixelAAEnabled) { - const characterScaleX = width / measuredWidth; - restoreNeeded = true; - ctx.save(); - ctx.scale(characterScaleX, 1); - scaledX /= characterScaleX; - } else if (width !== measuredWidth) { - scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; - } - } - if (this.contentVisible && (glyph.isInFont || font.missingFile)) { - if (simpleFillText && !accent) { - ctx.fillText(character, scaledX, scaledY); - } else { - this.paintChar(character, scaledX, scaledY, patternTransform); - if (accent) { - const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; - const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; - this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform); - } - } - } - const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection; - x += charWidth; - if (restoreNeeded) { - ctx.restore(); - } - } - if (vertical) { - current.y -= x; - } else { - current.x += x * textHScale; - } - ctx.restore(); - this.compose(); - return undefined; - } - showType3Text(glyphs) { - const ctx = this.ctx; - const current = this.current; - const font = current.font; - const fontSize = current.fontSize; - const fontDirection = current.fontDirection; - const spacingDir = font.vertical ? 1 : -1; - const charSpacing = current.charSpacing; - const wordSpacing = current.wordSpacing; - const textHScale = current.textHScale * fontDirection; - const fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX; - const glyphsLength = glyphs.length; - const isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE; - let i, glyph, width, spacingLength; - if (isTextInvisible || fontSize === 0) { - return; - } - this._cachedScaleForStroking[0] = -1; - this._cachedGetSinglePixelWidth = null; - ctx.save(); - ctx.transform(...current.textMatrix); - ctx.translate(current.x, current.y); - ctx.scale(textHScale, fontDirection); - for (i = 0; i < glyphsLength; ++i) { - glyph = glyphs[i]; - if (typeof glyph === "number") { - spacingLength = spacingDir * glyph * fontSize / 1000; - this.ctx.translate(spacingLength, 0); - current.x += spacingLength * textHScale; - continue; - } - const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; - const operatorList = font.charProcOperatorList[glyph.operatorListId]; - if (!operatorList) { - (0, _util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`); - continue; - } - if (this.contentVisible) { - this.processingType3 = glyph; - this.save(); - ctx.scale(fontSize, fontSize); - ctx.transform(...fontMatrix); - this.executeOperatorList(operatorList); - this.restore(); - } - const transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix); - width = transformed[0] * fontSize + spacing; - ctx.translate(width, 0); - current.x += width * textHScale; - } - ctx.restore(); - this.processingType3 = null; - } - setCharWidth(xWidth, yWidth) {} - setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { - this.ctx.rect(llx, lly, urx - llx, ury - lly); - this.ctx.clip(); - this.endPath(); - } - getColorN_Pattern(IR) { - let pattern; - if (IR[0] === "TilingPattern") { - const color = IR[1]; - const baseTransform = this.baseTransform || (0, _display_utils.getCurrentTransform)(this.ctx); - const canvasGraphicsFactory = { - createCanvasGraphics: ctx => { - return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { - optionalContentConfig: this.optionalContentConfig, - markedContentStack: this.markedContentStack - }); - } - }; - pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); - } else { - pattern = this._getPattern(IR[1], IR[2]); - } - return pattern; - } - setStrokeColorN() { - this.current.strokeColor = this.getColorN_Pattern(arguments); - } - setFillColorN() { - this.current.fillColor = this.getColorN_Pattern(arguments); - this.current.patternFill = true; - } - setStrokeRGBColor(r, g, b) { - const color = _util.Util.makeHexColor(r, g, b); - this.ctx.strokeStyle = color; - this.current.strokeColor = color; - } - setFillRGBColor(r, g, b) { - const color = _util.Util.makeHexColor(r, g, b); - this.ctx.fillStyle = color; - this.current.fillColor = color; - this.current.patternFill = false; - } - _getPattern(objId, matrix = null) { - let pattern; - if (this.cachedPatterns.has(objId)) { - pattern = this.cachedPatterns.get(objId); - } else { - pattern = (0, _pattern_helper.getShadingPattern)(this.getObject(objId)); - this.cachedPatterns.set(objId, pattern); - } - if (matrix) { - pattern.matrix = matrix; - } - return pattern; - } - shadingFill(objId) { - if (!this.contentVisible) { - return; - } - const ctx = this.ctx; - this.save(); - const pattern = this._getPattern(objId); - ctx.fillStyle = pattern.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.SHADING); - const inv = (0, _display_utils.getCurrentTransformInverse)(ctx); - if (inv) { - const { - width, - height - } = ctx.canvas; - const [x0, y0, x1, y1] = _util.Util.getAxialAlignedBoundingBox([0, 0, width, height], inv); - this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); - } else { - this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); - } - this.compose(this.current.getClippedPathBoundingBox()); - this.restore(); - } - beginInlineImage() { - (0, _util.unreachable)("Should not call beginInlineImage"); - } - beginImageData() { - (0, _util.unreachable)("Should not call beginImageData"); - } - paintFormXObjectBegin(matrix, bbox) { - if (!this.contentVisible) { - return; - } - this.save(); - this.baseTransformStack.push(this.baseTransform); - if (Array.isArray(matrix) && matrix.length === 6) { - this.transform(...matrix); - } - this.baseTransform = (0, _display_utils.getCurrentTransform)(this.ctx); - if (bbox) { - const width = bbox[2] - bbox[0]; - const height = bbox[3] - bbox[1]; - this.ctx.rect(bbox[0], bbox[1], width, height); - this.current.updateRectMinMax((0, _display_utils.getCurrentTransform)(this.ctx), bbox); - this.clip(); - this.endPath(); - } - } - paintFormXObjectEnd() { - if (!this.contentVisible) { - return; - } - this.restore(); - this.baseTransform = this.baseTransformStack.pop(); - } - beginGroup(group) { - if (!this.contentVisible) { - return; - } - this.save(); - if (this.inSMaskMode) { - this.endSMaskMode(); - this.current.activeSMask = null; - } - const currentCtx = this.ctx; - if (!group.isolated) { - (0, _util.info)("TODO: Support non-isolated groups."); - } - if (group.knockout) { - (0, _util.warn)("Knockout groups not supported."); - } - const currentTransform = (0, _display_utils.getCurrentTransform)(currentCtx); - if (group.matrix) { - currentCtx.transform(...group.matrix); - } - if (!group.bbox) { - throw new Error("Bounding box is required."); - } - let bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, (0, _display_utils.getCurrentTransform)(currentCtx)); - const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; - bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; - const offsetX = Math.floor(bounds[0]); - const offsetY = Math.floor(bounds[1]); - let drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); - let drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); - let scaleX = 1, - scaleY = 1; - if (drawnWidth > MAX_GROUP_SIZE) { - scaleX = drawnWidth / MAX_GROUP_SIZE; - drawnWidth = MAX_GROUP_SIZE; - } - if (drawnHeight > MAX_GROUP_SIZE) { - scaleY = drawnHeight / MAX_GROUP_SIZE; - drawnHeight = MAX_GROUP_SIZE; - } - this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]); - let cacheId = "groupAt" + this.groupLevel; - if (group.smask) { - cacheId += "_smask_" + this.smaskCounter++ % 2; - } - const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); - const groupCtx = scratchCanvas.context; - groupCtx.scale(1 / scaleX, 1 / scaleY); - groupCtx.translate(-offsetX, -offsetY); - groupCtx.transform(...currentTransform); - if (group.smask) { - this.smaskStack.push({ - canvas: scratchCanvas.canvas, - context: groupCtx, - offsetX, - offsetY, - scaleX, - scaleY, - subtype: group.smask.subtype, - backdrop: group.smask.backdrop, - transferMap: group.smask.transferMap || null, - startTransformInverse: null - }); - } else { - currentCtx.setTransform(1, 0, 0, 1, 0, 0); - currentCtx.translate(offsetX, offsetY); - currentCtx.scale(scaleX, scaleY); - currentCtx.save(); - } - copyCtxState(currentCtx, groupCtx); - this.ctx = groupCtx; - this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); - this.groupStack.push(currentCtx); - this.groupLevel++; - } - endGroup(group) { - if (!this.contentVisible) { - return; - } - this.groupLevel--; - const groupCtx = this.ctx; - const ctx = this.groupStack.pop(); - this.ctx = ctx; - this.ctx.imageSmoothingEnabled = false; - if (group.smask) { - this.tempSMask = this.smaskStack.pop(); - this.restore(); - } else { - this.ctx.restore(); - const currentMtx = (0, _display_utils.getCurrentTransform)(this.ctx); - this.restore(); - this.ctx.save(); - this.ctx.setTransform(...currentMtx); - const dirtyBox = _util.Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx); - this.ctx.drawImage(groupCtx.canvas, 0, 0); - this.ctx.restore(); - this.compose(dirtyBox); - } - } - beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) { - this.#restoreInitialState(); - resetCtxToDefault(this.ctx); - this.ctx.save(); - this.save(); - if (this.baseTransform) { - this.ctx.setTransform(...this.baseTransform); - } - if (Array.isArray(rect) && rect.length === 4) { - const width = rect[2] - rect[0]; - const height = rect[3] - rect[1]; - if (hasOwnCanvas && this.annotationCanvasMap) { - transform = transform.slice(); - transform[4] -= rect[0]; - transform[5] -= rect[1]; - rect = rect.slice(); - rect[0] = rect[1] = 0; - rect[2] = width; - rect[3] = height; - const [scaleX, scaleY] = _util.Util.singularValueDecompose2dScale((0, _display_utils.getCurrentTransform)(this.ctx)); - const { - viewportScale - } = this; - const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale); - const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale); - this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight); - const { - canvas, - context - } = this.annotationCanvas; - this.annotationCanvasMap.set(id, canvas); - this.annotationCanvas.savedCtx = this.ctx; - this.ctx = context; - this.ctx.save(); - this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY); - resetCtxToDefault(this.ctx); - } else { - resetCtxToDefault(this.ctx); - this.ctx.rect(rect[0], rect[1], width, height); - this.ctx.clip(); - this.endPath(); - } - } - this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); - this.transform(...transform); - this.transform(...matrix); - } - endAnnotation() { - if (this.annotationCanvas) { - this.ctx.restore(); - this.#drawFilter(); - this.ctx = this.annotationCanvas.savedCtx; - delete this.annotationCanvas.savedCtx; - delete this.annotationCanvas; - } - } - paintImageMaskXObject(img) { - if (!this.contentVisible) { - return; - } - const count = img.count; - img = this.getObject(img.data, img); - img.count = count; - const ctx = this.ctx; - const glyph = this.processingType3; - if (glyph) { - if (glyph.compiled === undefined) { - glyph.compiled = compileType3Glyph(img); - } - if (glyph.compiled) { - glyph.compiled(ctx); - return; - } - } - const mask = this._createMaskCanvas(img); - const maskCanvas = mask.canvas; - ctx.save(); - ctx.setTransform(1, 0, 0, 1, 0, 0); - ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY); - ctx.restore(); - this.compose(); - } - paintImageMaskXObjectRepeat(img, scaleX, skewX = 0, skewY = 0, scaleY, positions) { - if (!this.contentVisible) { - return; - } - img = this.getObject(img.data, img); - const ctx = this.ctx; - ctx.save(); - const currentTransform = (0, _display_utils.getCurrentTransform)(ctx); - ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0); - const mask = this._createMaskCanvas(img); - ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]); - for (let i = 0, ii = positions.length; i < ii; i += 2) { - const trans = _util.Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]); - const [x, y] = _util.Util.applyTransform([0, 0], trans); - ctx.drawImage(mask.canvas, x, y); - } - ctx.restore(); - this.compose(); - } - paintImageMaskXObjectGroup(images) { - if (!this.contentVisible) { - return; - } - const ctx = this.ctx; - const fillColor = this.current.fillColor; - const isPatternFill = this.current.patternFill; - for (const image of images) { - const { - data, - width, - height, - transform - } = image; - const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); - const maskCtx = maskCanvas.context; - maskCtx.save(); - const img = this.getObject(data, image); - putBinaryImageMask(maskCtx, img); - maskCtx.globalCompositeOperation = "source-in"; - maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.FILL) : fillColor; - maskCtx.fillRect(0, 0, width, height); - maskCtx.restore(); - ctx.save(); - ctx.transform(...transform); - ctx.scale(1, -1); - drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); - ctx.restore(); - } - this.compose(); - } - paintImageXObject(objId) { - if (!this.contentVisible) { - return; - } - const imgData = this.getObject(objId); - if (!imgData) { - (0, _util.warn)("Dependent image isn't ready yet"); - return; - } - this.paintInlineImageXObject(imgData); - } - paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { - if (!this.contentVisible) { - return; - } - const imgData = this.getObject(objId); - if (!imgData) { - (0, _util.warn)("Dependent image isn't ready yet"); - return; - } - const width = imgData.width; - const height = imgData.height; - const map = []; - for (let i = 0, ii = positions.length; i < ii; i += 2) { - map.push({ - transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], - x: 0, - y: 0, - w: width, - h: height - }); - } - this.paintInlineImageXObjectGroup(imgData, map); - } - applyTransferMapsToCanvas(ctx) { - if (this.current.transferMaps !== "none") { - ctx.filter = this.current.transferMaps; - ctx.drawImage(ctx.canvas, 0, 0); - ctx.filter = "none"; - } - return ctx.canvas; - } - applyTransferMapsToBitmap(imgData) { - if (this.current.transferMaps === "none") { - return imgData.bitmap; - } - const { - bitmap, - width, - height - } = imgData; - const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); - const tmpCtx = tmpCanvas.context; - tmpCtx.filter = this.current.transferMaps; - tmpCtx.drawImage(bitmap, 0, 0); - tmpCtx.filter = "none"; - return tmpCanvas.canvas; - } - paintInlineImageXObject(imgData) { - if (!this.contentVisible) { - return; - } - const width = imgData.width; - const height = imgData.height; - const ctx = this.ctx; - this.save(); - if (!_util.isNodeJS) { - const { - filter - } = ctx; - if (filter !== "none" && filter !== "") { - ctx.filter = "none"; - } - } - ctx.scale(1 / width, -1 / height); - let imgToPaint; - if (imgData.bitmap) { - imgToPaint = this.applyTransferMapsToBitmap(imgData); - } else if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { - imgToPaint = imgData; - } else { - const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); - const tmpCtx = tmpCanvas.context; - putBinaryImageData(tmpCtx, imgData); - imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); - } - const scaled = this._scaleImage(imgToPaint, (0, _display_utils.getCurrentTransformInverse)(ctx)); - ctx.imageSmoothingEnabled = getImageSmoothingEnabled((0, _display_utils.getCurrentTransform)(ctx), imgData.interpolate); - drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height); - this.compose(); - this.restore(); - } - paintInlineImageXObjectGroup(imgData, map) { - if (!this.contentVisible) { - return; - } - const ctx = this.ctx; - let imgToPaint; - if (imgData.bitmap) { - imgToPaint = imgData.bitmap; - } else { - const w = imgData.width; - const h = imgData.height; - const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h); - const tmpCtx = tmpCanvas.context; - putBinaryImageData(tmpCtx, imgData); - imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); - } - for (const entry of map) { - ctx.save(); - ctx.transform(...entry.transform); - ctx.scale(1, -1); - drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); - ctx.restore(); - } - this.compose(); - } - paintSolidColorImageMask() { - if (!this.contentVisible) { - return; - } - this.ctx.fillRect(0, 0, 1, 1); - this.compose(); - } - markPoint(tag) {} - markPointProps(tag, properties) {} - beginMarkedContent(tag) { - this.markedContentStack.push({ - visible: true - }); - } - beginMarkedContentProps(tag, properties) { - if (tag === "OC") { - this.markedContentStack.push({ - visible: this.optionalContentConfig.isVisible(properties) - }); - } else { - this.markedContentStack.push({ - visible: true - }); - } - this.contentVisible = this.isContentVisible(); - } - endMarkedContent() { - this.markedContentStack.pop(); - this.contentVisible = this.isContentVisible(); - } - beginCompat() {} - endCompat() {} - consumePath(clipBox) { - const isEmpty = this.current.isEmptyClip(); - if (this.pendingClip) { - this.current.updateClipFromPath(); - } - if (!this.pendingClip) { - this.compose(clipBox); - } - const ctx = this.ctx; - if (this.pendingClip) { - if (!isEmpty) { - if (this.pendingClip === EO_CLIP) { - ctx.clip("evenodd"); - } else { - ctx.clip(); - } - } - this.pendingClip = null; - } - this.current.startNewPathAndClipBox(this.current.clipBox); - ctx.beginPath(); - } - getSinglePixelWidth() { - if (!this._cachedGetSinglePixelWidth) { - const m = (0, _display_utils.getCurrentTransform)(this.ctx); - if (m[1] === 0 && m[2] === 0) { - this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3])); - } else { - const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); - const normX = Math.hypot(m[0], m[2]); - const normY = Math.hypot(m[1], m[3]); - this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet; - } - } - return this._cachedGetSinglePixelWidth; - } - getScaleForStroking() { - if (this._cachedScaleForStroking[0] === -1) { - const { - lineWidth - } = this.current; - const { - a, - b, - c, - d - } = this.ctx.getTransform(); - let scaleX, scaleY; - if (b === 0 && c === 0) { - const normX = Math.abs(a); - const normY = Math.abs(d); - if (normX === normY) { - if (lineWidth === 0) { - scaleX = scaleY = 1 / normX; - } else { - const scaledLineWidth = normX * lineWidth; - scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1; - } - } else if (lineWidth === 0) { - scaleX = 1 / normX; - scaleY = 1 / normY; - } else { - const scaledXLineWidth = normX * lineWidth; - const scaledYLineWidth = normY * lineWidth; - scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1; - scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1; - } - } else { - const absDet = Math.abs(a * d - b * c); - const normX = Math.hypot(a, b); - const normY = Math.hypot(c, d); - if (lineWidth === 0) { - scaleX = normY / absDet; - scaleY = normX / absDet; - } else { - const baseArea = lineWidth * absDet; - scaleX = normY > baseArea ? normY / baseArea : 1; - scaleY = normX > baseArea ? normX / baseArea : 1; - } - } - this._cachedScaleForStroking[0] = scaleX; - this._cachedScaleForStroking[1] = scaleY; - } - return this._cachedScaleForStroking; - } - rescaleAndStroke(saveRestore) { - const { - ctx - } = this; - const { - lineWidth - } = this.current; - const [scaleX, scaleY] = this.getScaleForStroking(); - ctx.lineWidth = lineWidth || 1; - if (scaleX === 1 && scaleY === 1) { - ctx.stroke(); - return; - } - const dashes = ctx.getLineDash(); - if (saveRestore) { - ctx.save(); - } - ctx.scale(scaleX, scaleY); - if (dashes.length > 0) { - const scale = Math.max(scaleX, scaleY); - ctx.setLineDash(dashes.map(x => x / scale)); - ctx.lineDashOffset /= scale; - } - ctx.stroke(); - if (saveRestore) { - ctx.restore(); - } - } - isContentVisible() { - for (let i = this.markedContentStack.length - 1; i >= 0; i--) { - if (!this.markedContentStack[i].visible) { - return false; - } - } - return true; - } -} -exports.CanvasGraphics = CanvasGraphics; -for (const op in _util.OPS) { - if (CanvasGraphics.prototype[op] !== undefined) { - CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op]; +class NodeStandardFontDataFactory extends BaseStandardFontDataFactory { + _fetchData(url) { + return node_utils_fetchData(url); } } -/***/ }), -/* 12 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +;// CONCATENATED MODULE: ./src/display/pattern_helper.js - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.TilingPattern = exports.PathType = void 0; -exports.getShadingPattern = getShadingPattern; -var _util = __w_pdfjs_require__(1); -var _display_utils = __w_pdfjs_require__(6); -const PathType = exports.PathType = { +const PathType = { FILL: "Fill", STROKE: "Stroke", SHADING: "Shading" @@ -8474,11 +5377,11 @@ function applyBoundingBox(ctx, bbox) { class BaseShadingPattern { constructor() { if (this.constructor === BaseShadingPattern) { - (0, _util.unreachable)("Cannot initialize BaseShadingPattern."); + unreachable("Cannot initialize BaseShadingPattern."); } } getPattern() { - (0, _util.unreachable)("Abstract method `getPattern` called."); + unreachable("Abstract method `getPattern` called."); } } class RadialAxialShadingPattern extends BaseShadingPattern { @@ -8508,7 +5411,7 @@ class RadialAxialShadingPattern extends BaseShadingPattern { getPattern(ctx, owner, inverse, pathType) { let pattern; if (pathType === PathType.STROKE || pathType === PathType.FILL) { - const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, (0, _display_utils.getCurrentTransform)(ctx)) || [0, 0, 0, 0]; + const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, getCurrentTransform(ctx)) || [0, 0, 0, 0]; const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1; const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1; const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true); @@ -8517,7 +5420,7 @@ class RadialAxialShadingPattern extends BaseShadingPattern { tmpCtx.beginPath(); tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]); - inverse = _util.Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]); + inverse = Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]); tmpCtx.transform(...owner.baseTransform); if (this.matrix) { tmpCtx.transform(...this.matrix); @@ -8725,11 +5628,11 @@ class MeshShadingPattern extends BaseShadingPattern { applyBoundingBox(ctx, this._bbox); let scale; if (pathType === PathType.SHADING) { - scale = _util.Util.singularValueDecompose2dScale((0, _display_utils.getCurrentTransform)(ctx)); + scale = Util.singularValueDecompose2dScale(getCurrentTransform(ctx)); } else { - scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform); + scale = Util.singularValueDecompose2dScale(owner.baseTransform); if (this.matrix) { - const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); + const matrixScale = Util.singularValueDecompose2dScale(this.matrix); scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; } } @@ -8769,7 +5672,7 @@ class TilingPattern { static MAX_PATTERN_SIZE = 3000; constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) { this.operatorList = IR[2]; - this.matrix = IR[3] || [1, 0, 0, 1, 0, 0]; + this.matrix = IR[3]; this.bbox = IR[4]; this.xstep = IR[5]; this.ystep = IR[6]; @@ -8789,13 +5692,13 @@ class TilingPattern { const tilingType = this.tilingType; const color = this.color; const canvasGraphicsFactory = this.canvasGraphicsFactory; - (0, _util.info)("TilingType: " + tilingType); + info("TilingType: " + tilingType); const x0 = bbox[0], y0 = bbox[1], x1 = bbox[2], y1 = bbox[3]; - const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); - const curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform); + const matrixScale = Util.singularValueDecompose2dScale(this.matrix); + const curMatrixScale = Util.singularValueDecompose2dScale(this.baseTransform); const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]); const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]); @@ -8820,7 +5723,7 @@ class TilingPattern { graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0); tmpCtx.save(); this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1); - graphics.baseTransform = (0, _display_utils.getCurrentTransform)(graphics.ctx); + graphics.baseTransform = getCurrentTransform(graphics.ctx); graphics.executeOperatorList(operatorList); graphics.endDrawing(); return { @@ -8849,7 +5752,7 @@ class TilingPattern { const bboxWidth = x1 - x0; const bboxHeight = y1 - y0; graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); - graphics.current.updateRectMinMax((0, _display_utils.getCurrentTransform)(graphics.ctx), [x0, y0, x1, y1]); + graphics.current.updateRectMinMax(getCurrentTransform(graphics.ctx), [x0, y0, x1, y1]); graphics.clip(); graphics.endPath(); } @@ -8865,22 +5768,22 @@ class TilingPattern { current.strokeColor = ctx.strokeStyle; break; case PaintType.UNCOLORED: - const cssColor = _util.Util.makeHexColor(color[0], color[1], color[2]); + const cssColor = Util.makeHexColor(color[0], color[1], color[2]); context.fillStyle = cssColor; context.strokeStyle = cssColor; current.fillColor = cssColor; current.strokeColor = cssColor; break; default: - throw new _util.FormatError(`Unsupported paint type: ${paintType}`); + throw new FormatError(`Unsupported paint type: ${paintType}`); } } getPattern(ctx, owner, inverse, pathType) { let matrix = inverse; if (pathType !== PathType.SHADING) { - matrix = _util.Util.transform(matrix, owner.baseTransform); + matrix = Util.transform(matrix, owner.baseTransform); if (this.matrix) { - matrix = _util.Util.transform(matrix, this.matrix); + matrix = Util.transform(matrix, this.matrix); } } const temporaryPatternCanvas = this.createPatternCanvas(owner); @@ -8892,26 +5795,14 @@ class TilingPattern { return pattern; } } -exports.TilingPattern = TilingPattern; -/***/ }), -/* 13 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +;// CONCATENATED MODULE: ./src/shared/image_utils.js - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.convertBlackAndWhiteToRGBA = convertBlackAndWhiteToRGBA; -exports.convertToRGBA = convertToRGBA; -exports.grayToRGBA = grayToRGBA; -var _util = __w_pdfjs_require__(1); function convertToRGBA(params) { switch (params.kind) { - case _util.ImageKind.GRAYSCALE_1BPP: + case ImageKind.GRAYSCALE_1BPP: return convertBlackAndWhiteToRGBA(params); - case _util.ImageKind.RGB_24BPP: + case ImageKind.RGB_24BPP: return convertRGBToRGBA(params); } return null; @@ -8925,7 +5816,7 @@ function convertBlackAndWhiteToRGBA({ nonBlackColor = 0xffffffff, inverseDecode = false }) { - const black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; + const black = util_FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor]; const widthInSource = width >> 3; const widthRemainder = width & 7; @@ -8968,7 +5859,7 @@ function convertRGBToRGBA({ let i = 0; const len32 = src.length >> 2; const src32 = new Uint32Array(src.buffer, srcPos, len32); - if (_util.FeatureTest.isLittleEndian) { + if (FeatureTest.isLittleEndian) { for (; i < len32 - 2; i += 3, destPos += 4) { const s1 = src32[i]; const s2 = src32[i + 1]; @@ -9001,7 +5892,7 @@ function convertRGBToRGBA({ }; } function grayToRGBA(src, dest) { - if (_util.FeatureTest.isLittleEndian) { + if (FeatureTest.isLittleEndian) { for (let i = 0, ii = src.length; i < ii; i++) { dest[i] = src[i] * 0x10101 | 0xff000000; } @@ -9012,31 +5903,2207 @@ function grayToRGBA(src, dest) { } } -/***/ }), -/* 14 */ -/***/ ((__unused_webpack_module, exports) => { +;// CONCATENATED MODULE: ./src/display/canvas.js -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.GlobalWorkerOptions = void 0; -const GlobalWorkerOptions = exports.GlobalWorkerOptions = Object.create(null); -GlobalWorkerOptions.workerPort = null; -GlobalWorkerOptions.workerSrc = ""; -/***/ }), -/* 15 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +const MIN_FONT_SIZE = 16; +const MAX_FONT_SIZE = 100; +const EXECUTION_TIME = 15; +const EXECUTION_STEPS = 10; +const MAX_SIZE_TO_COMPILE = 1000; +const FULL_CHUNK_HEIGHT = 16; +function mirrorContextOperations(ctx, destCtx) { + if (ctx._removeMirroring) { + throw new Error("Context is already forwarding operations."); + } + ctx.__originalSave = ctx.save; + ctx.__originalRestore = ctx.restore; + ctx.__originalRotate = ctx.rotate; + ctx.__originalScale = ctx.scale; + ctx.__originalTranslate = ctx.translate; + ctx.__originalTransform = ctx.transform; + ctx.__originalSetTransform = ctx.setTransform; + ctx.__originalResetTransform = ctx.resetTransform; + ctx.__originalClip = ctx.clip; + ctx.__originalMoveTo = ctx.moveTo; + ctx.__originalLineTo = ctx.lineTo; + ctx.__originalBezierCurveTo = ctx.bezierCurveTo; + ctx.__originalRect = ctx.rect; + ctx.__originalClosePath = ctx.closePath; + ctx.__originalBeginPath = ctx.beginPath; + ctx._removeMirroring = () => { + ctx.save = ctx.__originalSave; + ctx.restore = ctx.__originalRestore; + ctx.rotate = ctx.__originalRotate; + ctx.scale = ctx.__originalScale; + ctx.translate = ctx.__originalTranslate; + ctx.transform = ctx.__originalTransform; + ctx.setTransform = ctx.__originalSetTransform; + ctx.resetTransform = ctx.__originalResetTransform; + ctx.clip = ctx.__originalClip; + ctx.moveTo = ctx.__originalMoveTo; + ctx.lineTo = ctx.__originalLineTo; + ctx.bezierCurveTo = ctx.__originalBezierCurveTo; + ctx.rect = ctx.__originalRect; + ctx.closePath = ctx.__originalClosePath; + ctx.beginPath = ctx.__originalBeginPath; + delete ctx._removeMirroring; + }; + ctx.save = function ctxSave() { + destCtx.save(); + this.__originalSave(); + }; + ctx.restore = function ctxRestore() { + destCtx.restore(); + this.__originalRestore(); + }; + ctx.translate = function ctxTranslate(x, y) { + destCtx.translate(x, y); + this.__originalTranslate(x, y); + }; + ctx.scale = function ctxScale(x, y) { + destCtx.scale(x, y); + this.__originalScale(x, y); + }; + ctx.transform = function ctxTransform(a, b, c, d, e, f) { + destCtx.transform(a, b, c, d, e, f); + this.__originalTransform(a, b, c, d, e, f); + }; + ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { + destCtx.setTransform(a, b, c, d, e, f); + this.__originalSetTransform(a, b, c, d, e, f); + }; + ctx.resetTransform = function ctxResetTransform() { + destCtx.resetTransform(); + this.__originalResetTransform(); + }; + ctx.rotate = function ctxRotate(angle) { + destCtx.rotate(angle); + this.__originalRotate(angle); + }; + ctx.clip = function ctxRotate(rule) { + destCtx.clip(rule); + this.__originalClip(rule); + }; + ctx.moveTo = function (x, y) { + destCtx.moveTo(x, y); + this.__originalMoveTo(x, y); + }; + ctx.lineTo = function (x, y) { + destCtx.lineTo(x, y); + this.__originalLineTo(x, y); + }; + ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) { + destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + }; + ctx.rect = function (x, y, width, height) { + destCtx.rect(x, y, width, height); + this.__originalRect(x, y, width, height); + }; + ctx.closePath = function () { + destCtx.closePath(); + this.__originalClosePath(); + }; + ctx.beginPath = function () { + destCtx.beginPath(); + this.__originalBeginPath(); + }; +} +class CachedCanvases { + constructor(canvasFactory) { + this.canvasFactory = canvasFactory; + this.cache = Object.create(null); + } + getCanvas(id, width, height) { + let canvasEntry; + if (this.cache[id] !== undefined) { + canvasEntry = this.cache[id]; + this.canvasFactory.reset(canvasEntry, width, height); + } else { + canvasEntry = this.canvasFactory.create(width, height); + this.cache[id] = canvasEntry; + } + return canvasEntry; + } + delete(id) { + delete this.cache[id]; + } + clear() { + for (const id in this.cache) { + const canvasEntry = this.cache[id]; + this.canvasFactory.destroy(canvasEntry); + delete this.cache[id]; + } + } +} +function drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) { + const [a, b, c, d, tx, ty] = getCurrentTransform(ctx); + if (b === 0 && c === 0) { + const tlX = destX * a + tx; + const rTlX = Math.round(tlX); + const tlY = destY * d + ty; + const rTlY = Math.round(tlY); + const brX = (destX + destW) * a + tx; + const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; + const brY = (destY + destH) * d + ty; + const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; + ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY); + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight); + ctx.setTransform(a, b, c, d, tx, ty); + return [rWidth, rHeight]; + } + if (a === 0 && d === 0) { + const tlX = destY * c + tx; + const rTlX = Math.round(tlX); + const tlY = destX * b + ty; + const rTlY = Math.round(tlY); + const brX = (destY + destH) * c + tx; + const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; + const brY = (destX + destW) * b + ty; + const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; + ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY); + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth); + ctx.setTransform(a, b, c, d, tx, ty); + return [rHeight, rWidth]; + } + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH); + const scaleX = Math.hypot(a, b); + const scaleY = Math.hypot(c, d); + return [scaleX * destW, scaleY * destH]; +} +function compileType3Glyph(imgData) { + const { + width, + height + } = imgData; + if (width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) { + return null; + } + const POINT_TO_PROCESS_LIMIT = 1000; + const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); + const width1 = width + 1; + let points = new Uint8Array(width1 * (height + 1)); + let i, j, j0; + const lineSize = width + 7 & ~7; + let data = new Uint8Array(lineSize * height), + pos = 0; + for (const elem of imgData.data) { + let mask = 128; + while (mask > 0) { + data[pos++] = elem & mask ? 0 : 255; + mask >>= 1; + } + } + let count = 0; + pos = 0; + if (data[pos] !== 0) { + points[0] = 1; + ++count; + } + for (j = 1; j < width; j++) { + if (data[pos] !== data[pos + 1]) { + points[j] = data[pos] ? 2 : 1; + ++count; + } + pos++; + } + if (data[pos] !== 0) { + points[j] = 2; + ++count; + } + for (i = 1; i < height; i++) { + pos = i * lineSize; + j0 = i * width1; + if (data[pos - lineSize] !== data[pos]) { + points[j0] = data[pos] ? 1 : 8; + ++count; + } + let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); + for (j = 1; j < width; j++) { + sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); + if (POINT_TYPES[sum]) { + points[j0 + j] = POINT_TYPES[sum]; + ++count; + } + pos++; + } + if (data[pos - lineSize] !== data[pos]) { + points[j0 + j] = data[pos] ? 2 : 4; + ++count; + } + if (count > POINT_TO_PROCESS_LIMIT) { + return null; + } + } + pos = lineSize * (height - 1); + j0 = i * width1; + if (data[pos] !== 0) { + points[j0] = 8; + ++count; + } + for (j = 1; j < width; j++) { + if (data[pos] !== data[pos + 1]) { + points[j0 + j] = data[pos] ? 4 : 8; + ++count; + } + pos++; + } + if (data[pos] !== 0) { + points[j0 + j] = 4; + ++count; + } + if (count > POINT_TO_PROCESS_LIMIT) { + return null; + } + const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); + const path = new Path2D(); + for (i = 0; count && i <= height; i++) { + let p = i * width1; + const end = p + width; + while (p < end && !points[p]) { + p++; + } + if (p === end) { + continue; + } + path.moveTo(p % width1, i); + const p0 = p; + let type = points[p]; + do { + const step = steps[type]; + do { + p += step; + } while (!points[p]); + const pp = points[p]; + if (pp !== 5 && pp !== 10) { + type = pp; + points[p] = 0; + } else { + type = pp & 0x33 * type >> 4; + points[p] &= type >> 2 | type << 2; + } + path.lineTo(p % width1, p / width1 | 0); + if (!points[p]) { + --count; + } + } while (p0 !== p); + --i; + } + data = null; + points = null; + const drawOutline = function (c) { + c.save(); + c.scale(1 / width, -1 / height); + c.translate(0, -height); + c.fill(path); + c.beginPath(); + c.restore(); + }; + return drawOutline; +} +class CanvasExtraState { + constructor(width, height) { + this.alphaIsShape = false; + this.fontSize = 0; + this.fontSizeScale = 1; + this.textMatrix = IDENTITY_MATRIX; + this.textMatrixScale = 1; + this.fontMatrix = FONT_IDENTITY_MATRIX; + this.leading = 0; + this.x = 0; + this.y = 0; + this.lineX = 0; + this.lineY = 0; + this.charSpacing = 0; + this.wordSpacing = 0; + this.textHScale = 1; + this.textRenderingMode = TextRenderingMode.FILL; + this.textRise = 0; + this.fillColor = "#000000"; + this.strokeColor = "#000000"; + this.patternFill = false; + this.fillAlpha = 1; + this.strokeAlpha = 1; + this.lineWidth = 1; + this.activeSMask = null; + this.transferMaps = "none"; + this.startNewPathAndClipBox([0, 0, width, height]); + } + clone() { + const clone = Object.create(this); + clone.clipBox = this.clipBox.slice(); + return clone; + } + setCurrentPoint(x, y) { + this.x = x; + this.y = y; + } + updatePathMinMax(transform, x, y) { + [x, y] = Util.applyTransform([x, y], transform); + this.minX = Math.min(this.minX, x); + this.minY = Math.min(this.minY, y); + this.maxX = Math.max(this.maxX, x); + this.maxY = Math.max(this.maxY, y); + } + updateRectMinMax(transform, rect) { + const p1 = Util.applyTransform(rect, transform); + const p2 = Util.applyTransform(rect.slice(2), transform); + const p3 = Util.applyTransform([rect[0], rect[3]], transform); + const p4 = Util.applyTransform([rect[2], rect[1]], transform); + this.minX = Math.min(this.minX, p1[0], p2[0], p3[0], p4[0]); + this.minY = Math.min(this.minY, p1[1], p2[1], p3[1], p4[1]); + this.maxX = Math.max(this.maxX, p1[0], p2[0], p3[0], p4[0]); + this.maxY = Math.max(this.maxY, p1[1], p2[1], p3[1], p4[1]); + } + updateScalingPathMinMax(transform, minMax) { + Util.scaleMinMax(transform, minMax); + this.minX = Math.min(this.minX, minMax[0]); + this.minY = Math.min(this.minY, minMax[1]); + this.maxX = Math.max(this.maxX, minMax[2]); + this.maxY = Math.max(this.maxY, minMax[3]); + } + updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) { + const box = Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax); + if (minMax) { + return; + } + this.updateRectMinMax(transform, box); + } + getPathBoundingBox(pathType = PathType.FILL, transform = null) { + const box = [this.minX, this.minY, this.maxX, this.maxY]; + if (pathType === PathType.STROKE) { + if (!transform) { + unreachable("Stroke bounding box must include transform."); + } + const scale = Util.singularValueDecompose2dScale(transform); + const xStrokePad = scale[0] * this.lineWidth / 2; + const yStrokePad = scale[1] * this.lineWidth / 2; + box[0] -= xStrokePad; + box[1] -= yStrokePad; + box[2] += xStrokePad; + box[3] += yStrokePad; + } + return box; + } + updateClipFromPath() { + const intersect = Util.intersect(this.clipBox, this.getPathBoundingBox()); + this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]); + } + isEmptyClip() { + return this.minX === Infinity; + } + startNewPathAndClipBox(box) { + this.clipBox = box; + this.minX = Infinity; + this.minY = Infinity; + this.maxX = 0; + this.maxY = 0; + } + getClippedPathBoundingBox(pathType = PathType.FILL, transform = null) { + return Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform)); + } +} +function putBinaryImageData(ctx, imgData) { + if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { + ctx.putImageData(imgData, 0, 0); + return; + } + const height = imgData.height, + width = imgData.width; + const partialChunkHeight = height % FULL_CHUNK_HEIGHT; + const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + let srcPos = 0, + destPos; + const src = imgData.data; + const dest = chunkImgData.data; + let i, j, thisChunkHeight, elemsInThisChunk; + if (imgData.kind === util_ImageKind.GRAYSCALE_1BPP) { + const srcLength = src.byteLength; + const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); + const dest32DataLength = dest32.length; + const fullSrcDiff = width + 7 >> 3; + const white = 0xffffffff; + const black = util_FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; + for (i = 0; i < totalChunks; i++) { + thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; + destPos = 0; + for (j = 0; j < thisChunkHeight; j++) { + const srcDiff = srcLength - srcPos; + let k = 0; + const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; + const kEndUnrolled = kEnd & ~7; + let mask = 0; + let srcByte = 0; + for (; k < kEndUnrolled; k += 8) { + srcByte = src[srcPos++]; + dest32[destPos++] = srcByte & 128 ? white : black; + dest32[destPos++] = srcByte & 64 ? white : black; + dest32[destPos++] = srcByte & 32 ? white : black; + dest32[destPos++] = srcByte & 16 ? white : black; + dest32[destPos++] = srcByte & 8 ? white : black; + dest32[destPos++] = srcByte & 4 ? white : black; + dest32[destPos++] = srcByte & 2 ? white : black; + dest32[destPos++] = srcByte & 1 ? white : black; + } + for (; k < kEnd; k++) { + if (mask === 0) { + srcByte = src[srcPos++]; + mask = 128; + } + dest32[destPos++] = srcByte & mask ? white : black; + mask >>= 1; + } + } + while (destPos < dest32DataLength) { + dest32[destPos++] = 0; + } + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else if (imgData.kind === util_ImageKind.RGBA_32BPP) { + j = 0; + elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; + for (i = 0; i < fullChunks; i++) { + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + srcPos += elemsInThisChunk; + ctx.putImageData(chunkImgData, 0, j); + j += FULL_CHUNK_HEIGHT; + } + if (i < totalChunks) { + elemsInThisChunk = width * partialChunkHeight * 4; + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + ctx.putImageData(chunkImgData, 0, j); + } + } else if (imgData.kind === util_ImageKind.RGB_24BPP) { + thisChunkHeight = FULL_CHUNK_HEIGHT; + elemsInThisChunk = width * thisChunkHeight; + for (i = 0; i < totalChunks; i++) { + if (i >= fullChunks) { + thisChunkHeight = partialChunkHeight; + elemsInThisChunk = width * thisChunkHeight; + } + destPos = 0; + for (j = elemsInThisChunk; j--;) { + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = 255; + } + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else { + throw new Error(`bad image kind: ${imgData.kind}`); + } +} +function putBinaryImageMask(ctx, imgData) { + if (imgData.bitmap) { + ctx.drawImage(imgData.bitmap, 0, 0); + return; + } + const height = imgData.height, + width = imgData.width; + const partialChunkHeight = height % FULL_CHUNK_HEIGHT; + const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + let srcPos = 0; + const src = imgData.data; + const dest = chunkImgData.data; + for (let i = 0; i < totalChunks; i++) { + const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; + ({ + srcPos + } = convertBlackAndWhiteToRGBA({ + src, + srcPos, + dest, + width, + height: thisChunkHeight, + nonBlackColor: 0 + })); + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } +} +function copyCtxState(sourceCtx, destCtx) { + const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"]; + for (const property of properties) { + if (sourceCtx[property] !== undefined) { + destCtx[property] = sourceCtx[property]; + } + } + if (sourceCtx.setLineDash !== undefined) { + destCtx.setLineDash(sourceCtx.getLineDash()); + destCtx.lineDashOffset = sourceCtx.lineDashOffset; + } +} +function resetCtxToDefault(ctx) { + ctx.strokeStyle = ctx.fillStyle = "#000000"; + ctx.fillRule = "nonzero"; + ctx.globalAlpha = 1; + ctx.lineWidth = 1; + ctx.lineCap = "butt"; + ctx.lineJoin = "miter"; + ctx.miterLimit = 10; + ctx.globalCompositeOperation = "source-over"; + ctx.font = "10px sans-serif"; + if (ctx.setLineDash !== undefined) { + ctx.setLineDash([]); + ctx.lineDashOffset = 0; + } + if (!isNodeJS) { + const { + filter + } = ctx; + if (filter !== "none" && filter !== "") { + ctx.filter = "none"; + } + } +} +function getImageSmoothingEnabled(transform, interpolate) { + if (interpolate) { + return true; + } + const scale = Util.singularValueDecompose2dScale(transform); + scale[0] = Math.fround(scale[0]); + scale[1] = Math.fround(scale[1]); + const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * PixelsPerInch.PDF_TO_CSS_UNITS); + return scale[0] <= actualScale && scale[1] <= actualScale; +} +const LINE_CAP_STYLES = ["butt", "round", "square"]; +const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; +const NORMAL_CLIP = {}; +const EO_CLIP = {}; +class CanvasGraphics { + constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, { + optionalContentConfig, + markedContentStack = null + }, annotationCanvasMap, pageColors) { + this.ctx = canvasCtx; + this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); + this.stateStack = []; + this.pendingClip = null; + this.pendingEOFill = false; + this.res = null; + this.xobjs = null; + this.commonObjs = commonObjs; + this.objs = objs; + this.canvasFactory = canvasFactory; + this.filterFactory = filterFactory; + this.groupStack = []; + this.processingType3 = null; + this.baseTransform = null; + this.baseTransformStack = []; + this.groupLevel = 0; + this.smaskStack = []; + this.smaskCounter = 0; + this.tempSMask = null; + this.suspendedCtx = null; + this.contentVisible = true; + this.markedContentStack = markedContentStack || []; + this.optionalContentConfig = optionalContentConfig; + this.cachedCanvases = new CachedCanvases(this.canvasFactory); + this.cachedPatterns = new Map(); + this.annotationCanvasMap = annotationCanvasMap; + this.viewportScale = 1; + this.outputScaleX = 1; + this.outputScaleY = 1; + this.pageColors = pageColors; + this._cachedScaleForStroking = [-1, 0]; + this._cachedGetSinglePixelWidth = null; + this._cachedBitmapsMap = new Map(); + } + getObject(data, fallback = null) { + if (typeof data === "string") { + return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); + } + return fallback; + } + beginDrawing({ + transform, + viewport, + transparency = false, + background = null + }) { + const width = this.ctx.canvas.width; + const height = this.ctx.canvas.height; + const savedFillStyle = this.ctx.fillStyle; + this.ctx.fillStyle = background || "#ffffff"; + this.ctx.fillRect(0, 0, width, height); + this.ctx.fillStyle = savedFillStyle; + if (transparency) { + const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height); + this.compositeCtx = this.ctx; + this.transparentCanvas = transparentCanvas.canvas; + this.ctx = transparentCanvas.context; + this.ctx.save(); + this.ctx.transform(...getCurrentTransform(this.compositeCtx)); + } + this.ctx.save(); + resetCtxToDefault(this.ctx); + if (transform) { + this.ctx.transform(...transform); + this.outputScaleX = transform[0]; + this.outputScaleY = transform[0]; + } + this.ctx.transform(...viewport.transform); + this.viewportScale = viewport.scale; + this.baseTransform = getCurrentTransform(this.ctx); + } + executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { + const argsArray = operatorList.argsArray; + const fnArray = operatorList.fnArray; + let i = executionStartIdx || 0; + const argsArrayLen = argsArray.length; + if (argsArrayLen === i) { + return i; + } + const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; + const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; + let steps = 0; + const commonObjs = this.commonObjs; + const objs = this.objs; + let fnId; + while (true) { + if (stepper !== undefined && i === stepper.nextBreakPoint) { + stepper.breakIt(i, continueCallback); + return i; + } + fnId = fnArray[i]; + if (fnId !== OPS.dependency) { + this[fnId].apply(this, argsArray[i]); + } else { + for (const depObjId of argsArray[i]) { + const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; + if (!objsPool.has(depObjId)) { + objsPool.get(depObjId, continueCallback); + return i; + } + } + } + i++; + if (i === argsArrayLen) { + return i; + } + if (chunkOperations && ++steps > EXECUTION_STEPS) { + if (Date.now() > endTime) { + continueCallback(); + return i; + } + steps = 0; + } + } + } + #restoreInitialState() { + while (this.stateStack.length || this.inSMaskMode) { + this.restore(); + } + this.ctx.restore(); + if (this.transparentCanvas) { + this.ctx = this.compositeCtx; + this.ctx.save(); + this.ctx.setTransform(1, 0, 0, 1, 0, 0); + this.ctx.drawImage(this.transparentCanvas, 0, 0); + this.ctx.restore(); + this.transparentCanvas = null; + } + } + endDrawing() { + this.#restoreInitialState(); + this.cachedCanvases.clear(); + this.cachedPatterns.clear(); + for (const cache of this._cachedBitmapsMap.values()) { + for (const canvas of cache.values()) { + if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) { + canvas.width = canvas.height = 0; + } + } + cache.clear(); + } + this._cachedBitmapsMap.clear(); + this.#drawFilter(); + } + #drawFilter() { + if (this.pageColors) { + const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background); + if (hcmFilterId !== "none") { + const savedFilter = this.ctx.filter; + this.ctx.filter = hcmFilterId; + this.ctx.drawImage(this.ctx.canvas, 0, 0); + this.ctx.filter = savedFilter; + } + } + } + _scaleImage(img, inverseTransform) { + const width = img.width; + const height = img.height; + let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1); + let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1); + let paintWidth = width, + paintHeight = height; + let tmpCanvasId = "prescale1"; + let tmpCanvas, tmpCtx; + while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { + let newWidth = paintWidth, + newHeight = paintHeight; + if (widthScale > 2 && paintWidth > 1) { + newWidth = paintWidth >= 16384 ? Math.floor(paintWidth / 2) - 1 || 1 : Math.ceil(paintWidth / 2); + widthScale /= paintWidth / newWidth; + } + if (heightScale > 2 && paintHeight > 1) { + newHeight = paintHeight >= 16384 ? Math.floor(paintHeight / 2) - 1 || 1 : Math.ceil(paintHeight) / 2; + heightScale /= paintHeight / newHeight; + } + tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); + tmpCtx = tmpCanvas.context; + tmpCtx.clearRect(0, 0, newWidth, newHeight); + tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); + img = tmpCanvas.canvas; + paintWidth = newWidth; + paintHeight = newHeight; + tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; + } + return { + img, + paintWidth, + paintHeight + }; + } + _createMaskCanvas(img) { + const ctx = this.ctx; + const { + width, + height + } = img; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + const currentTransform = getCurrentTransform(ctx); + let cache, cacheKey, scaled, maskCanvas; + if ((img.bitmap || img.data) && img.count > 1) { + const mainKey = img.bitmap || img.data.buffer; + cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]); + cache = this._cachedBitmapsMap.get(mainKey); + if (!cache) { + cache = new Map(); + this._cachedBitmapsMap.set(mainKey, cache); + } + const cachedImage = cache.get(cacheKey); + if (cachedImage && !isPatternFill) { + const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]); + const offsetY = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]); + return { + canvas: cachedImage, + offsetX, + offsetY + }; + } + scaled = cachedImage; + } + if (!scaled) { + maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); + putBinaryImageMask(maskCanvas.context, img); + } + let maskToCanvas = Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]); + maskToCanvas = Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]); + const [minX, minY, maxX, maxY] = Util.getAxialAlignedBoundingBox([0, 0, width, height], maskToCanvas); + const drawnWidth = Math.round(maxX - minX) || 1; + const drawnHeight = Math.round(maxY - minY) || 1; + const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight); + const fillCtx = fillCanvas.context; + const offsetX = minX; + const offsetY = minY; + fillCtx.translate(-offsetX, -offsetY); + fillCtx.transform(...maskToCanvas); + if (!scaled) { + scaled = this._scaleImage(maskCanvas.canvas, getCurrentTransformInverse(fillCtx)); + scaled = scaled.img; + if (cache && isPatternFill) { + cache.set(cacheKey, scaled); + } + } + fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(fillCtx), img.interpolate); + drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height); + fillCtx.globalCompositeOperation = "source-in"; + const inverse = Util.transform(getCurrentTransformInverse(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]); + fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, PathType.FILL) : fillColor; + fillCtx.fillRect(0, 0, width, height); + if (cache && !isPatternFill) { + this.cachedCanvases.delete("fillCanvas"); + cache.set(cacheKey, fillCanvas.canvas); + } + return { + canvas: fillCanvas.canvas, + offsetX: Math.round(offsetX), + offsetY: Math.round(offsetY) + }; + } + setLineWidth(width) { + if (width !== this.current.lineWidth) { + this._cachedScaleForStroking[0] = -1; + } + this.current.lineWidth = width; + this.ctx.lineWidth = width; + } + setLineCap(style) { + this.ctx.lineCap = LINE_CAP_STYLES[style]; + } + setLineJoin(style) { + this.ctx.lineJoin = LINE_JOIN_STYLES[style]; + } + setMiterLimit(limit) { + this.ctx.miterLimit = limit; + } + setDash(dashArray, dashPhase) { + const ctx = this.ctx; + if (ctx.setLineDash !== undefined) { + ctx.setLineDash(dashArray); + ctx.lineDashOffset = dashPhase; + } + } + setRenderingIntent(intent) {} + setFlatness(flatness) {} + setGState(states) { + for (const [key, value] of states) { + switch (key) { + case "LW": + this.setLineWidth(value); + break; + case "LC": + this.setLineCap(value); + break; + case "LJ": + this.setLineJoin(value); + break; + case "ML": + this.setMiterLimit(value); + break; + case "D": + this.setDash(value[0], value[1]); + break; + case "RI": + this.setRenderingIntent(value); + break; + case "FL": + this.setFlatness(value); + break; + case "Font": + this.setFont(value[0], value[1]); + break; + case "CA": + this.current.strokeAlpha = value; + break; + case "ca": + this.current.fillAlpha = value; + this.ctx.globalAlpha = value; + break; + case "BM": + this.ctx.globalCompositeOperation = value; + break; + case "SMask": + this.current.activeSMask = value ? this.tempSMask : null; + this.tempSMask = null; + this.checkSMaskState(); + break; + case "TR": + this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value); + break; + } + } + } + get inSMaskMode() { + return !!this.suspendedCtx; + } + checkSMaskState() { + const inSMaskMode = this.inSMaskMode; + if (this.current.activeSMask && !inSMaskMode) { + this.beginSMaskMode(); + } else if (!this.current.activeSMask && inSMaskMode) { + this.endSMaskMode(); + } + } + beginSMaskMode() { + if (this.inSMaskMode) { + throw new Error("beginSMaskMode called while already in smask mode"); + } + const drawnWidth = this.ctx.canvas.width; + const drawnHeight = this.ctx.canvas.height; + const cacheId = "smaskGroupAt" + this.groupLevel; + const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); + this.suspendedCtx = this.ctx; + this.ctx = scratchCanvas.context; + const ctx = this.ctx; + ctx.setTransform(...getCurrentTransform(this.suspendedCtx)); + copyCtxState(this.suspendedCtx, ctx); + mirrorContextOperations(ctx, this.suspendedCtx); + this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); + } + endSMaskMode() { + if (!this.inSMaskMode) { + throw new Error("endSMaskMode called while not in smask mode"); + } + this.ctx._removeMirroring(); + copyCtxState(this.ctx, this.suspendedCtx); + this.ctx = this.suspendedCtx; + this.suspendedCtx = null; + } + compose(dirtyBox) { + if (!this.current.activeSMask) { + return; + } + if (!dirtyBox) { + dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height]; + } else { + dirtyBox[0] = Math.floor(dirtyBox[0]); + dirtyBox[1] = Math.floor(dirtyBox[1]); + dirtyBox[2] = Math.ceil(dirtyBox[2]); + dirtyBox[3] = Math.ceil(dirtyBox[3]); + } + const smask = this.current.activeSMask; + const suspendedCtx = this.suspendedCtx; + this.composeSMask(suspendedCtx, smask, this.ctx, dirtyBox); + this.ctx.save(); + this.ctx.setTransform(1, 0, 0, 1, 0, 0); + this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height); + this.ctx.restore(); + } + composeSMask(ctx, smask, layerCtx, layerBox) { + const layerOffsetX = layerBox[0]; + const layerOffsetY = layerBox[1]; + const layerWidth = layerBox[2] - layerOffsetX; + const layerHeight = layerBox[3] - layerOffsetY; + if (layerWidth === 0 || layerHeight === 0) { + return; + } + this.genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY); + ctx.save(); + ctx.globalAlpha = 1; + ctx.globalCompositeOperation = "source-over"; + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(layerCtx.canvas, 0, 0); + ctx.restore(); + } + genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) { + let maskCanvas = maskCtx.canvas; + let maskX = layerOffsetX - maskOffsetX; + let maskY = layerOffsetY - maskOffsetY; + if (backdrop) { + if (maskX < 0 || maskY < 0 || maskX + width > maskCanvas.width || maskY + height > maskCanvas.height) { + const canvas = this.cachedCanvases.getCanvas("maskExtension", width, height); + const ctx = canvas.context; + ctx.drawImage(maskCanvas, -maskX, -maskY); + if (backdrop.some(c => c !== 0)) { + ctx.globalCompositeOperation = "destination-atop"; + ctx.fillStyle = Util.makeHexColor(...backdrop); + ctx.fillRect(0, 0, width, height); + ctx.globalCompositeOperation = "source-over"; + } + maskCanvas = canvas.canvas; + maskX = maskY = 0; + } else if (backdrop.some(c => c !== 0)) { + maskCtx.save(); + maskCtx.globalAlpha = 1; + maskCtx.setTransform(1, 0, 0, 1, 0, 0); + const clip = new Path2D(); + clip.rect(maskX, maskY, width, height); + maskCtx.clip(clip); + maskCtx.globalCompositeOperation = "destination-atop"; + maskCtx.fillStyle = Util.makeHexColor(...backdrop); + maskCtx.fillRect(maskX, maskY, width, height); + maskCtx.restore(); + } + } + layerCtx.save(); + layerCtx.globalAlpha = 1; + layerCtx.setTransform(1, 0, 0, 1, 0, 0); + if (subtype === "Alpha" && transferMap) { + layerCtx.filter = this.filterFactory.addAlphaFilter(transferMap); + } else if (subtype === "Luminosity") { + layerCtx.filter = this.filterFactory.addLuminosityFilter(transferMap); + } + const clip = new Path2D(); + clip.rect(layerOffsetX, layerOffsetY, width, height); + layerCtx.clip(clip); + layerCtx.globalCompositeOperation = "destination-in"; + layerCtx.drawImage(maskCanvas, maskX, maskY, width, height, layerOffsetX, layerOffsetY, width, height); + layerCtx.restore(); + } + save() { + if (this.inSMaskMode) { + copyCtxState(this.ctx, this.suspendedCtx); + this.suspendedCtx.save(); + } else { + this.ctx.save(); + } + const old = this.current; + this.stateStack.push(old); + this.current = old.clone(); + } + restore() { + if (this.stateStack.length === 0 && this.inSMaskMode) { + this.endSMaskMode(); + } + if (this.stateStack.length !== 0) { + this.current = this.stateStack.pop(); + if (this.inSMaskMode) { + this.suspendedCtx.restore(); + copyCtxState(this.suspendedCtx, this.ctx); + } else { + this.ctx.restore(); + } + this.checkSMaskState(); + this.pendingClip = null; + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + } + } + transform(a, b, c, d, e, f) { + this.ctx.transform(a, b, c, d, e, f); + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + } + constructPath(ops, args, minMax) { + const ctx = this.ctx; + const current = this.current; + let x = current.x, + y = current.y; + let startX, startY; + const currentTransform = getCurrentTransform(ctx); + const isScalingMatrix = currentTransform[0] === 0 && currentTransform[3] === 0 || currentTransform[1] === 0 && currentTransform[2] === 0; + const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null; + for (let i = 0, j = 0, ii = ops.length; i < ii; i++) { + switch (ops[i] | 0) { + case OPS.rectangle: + x = args[j++]; + y = args[j++]; + const width = args[j++]; + const height = args[j++]; + const xw = x + width; + const yh = y + height; + ctx.moveTo(x, y); + if (width === 0 || height === 0) { + ctx.lineTo(xw, yh); + } else { + ctx.lineTo(xw, y); + ctx.lineTo(xw, yh); + ctx.lineTo(x, yh); + } + if (!isScalingMatrix) { + current.updateRectMinMax(currentTransform, [x, y, xw, yh]); + } + ctx.closePath(); + break; + case OPS.moveTo: + x = args[j++]; + y = args[j++]; + ctx.moveTo(x, y); + if (!isScalingMatrix) { + current.updatePathMinMax(currentTransform, x, y); + } + break; + case OPS.lineTo: + x = args[j++]; + y = args[j++]; + ctx.lineTo(x, y); + if (!isScalingMatrix) { + current.updatePathMinMax(currentTransform, x, y); + } + break; + case OPS.curveTo: + startX = x; + startY = y; + x = args[j + 4]; + y = args[j + 5]; + ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); + current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y, minMaxForBezier); + j += 6; + break; + case OPS.curveTo2: + startX = x; + startY = y; + ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); + current.updateCurvePathMinMax(currentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3], minMaxForBezier); + x = args[j + 2]; + y = args[j + 3]; + j += 4; + break; + case OPS.curveTo3: + startX = x; + startY = y; + x = args[j + 2]; + y = args[j + 3]; + ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); + current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], x, y, x, y, minMaxForBezier); + j += 4; + break; + case OPS.closePath: + ctx.closePath(); + break; + } + } + if (isScalingMatrix) { + current.updateScalingPathMinMax(currentTransform, minMaxForBezier); + } + current.setCurrentPoint(x, y); + } + closePath() { + this.ctx.closePath(); + } + stroke(consumePath = true) { + const ctx = this.ctx; + const strokeColor = this.current.strokeColor; + ctx.globalAlpha = this.current.strokeAlpha; + if (this.contentVisible) { + if (typeof strokeColor === "object" && strokeColor?.getPattern) { + ctx.save(); + ctx.strokeStyle = strokeColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.STROKE); + this.rescaleAndStroke(false); + ctx.restore(); + } else { + this.rescaleAndStroke(true); + } + } + if (consumePath) { + this.consumePath(this.current.getClippedPathBoundingBox()); + } + ctx.globalAlpha = this.current.fillAlpha; + } + closeStroke() { + this.closePath(); + this.stroke(); + } + fill(consumePath = true) { + const ctx = this.ctx; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + let needRestore = false; + if (isPatternFill) { + ctx.save(); + ctx.fillStyle = fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL); + needRestore = true; + } + const intersect = this.current.getClippedPathBoundingBox(); + if (this.contentVisible && intersect !== null) { + if (this.pendingEOFill) { + ctx.fill("evenodd"); + this.pendingEOFill = false; + } else { + ctx.fill(); + } + } + if (needRestore) { + ctx.restore(); + } + if (consumePath) { + this.consumePath(intersect); + } + } + eoFill() { + this.pendingEOFill = true; + this.fill(); + } + fillStroke() { + this.fill(false); + this.stroke(false); + this.consumePath(); + } + eoFillStroke() { + this.pendingEOFill = true; + this.fillStroke(); + } + closeFillStroke() { + this.closePath(); + this.fillStroke(); + } + closeEOFillStroke() { + this.pendingEOFill = true; + this.closePath(); + this.fillStroke(); + } + endPath() { + this.consumePath(); + } + clip() { + this.pendingClip = NORMAL_CLIP; + } + eoClip() { + this.pendingClip = EO_CLIP; + } + beginText() { + this.current.textMatrix = IDENTITY_MATRIX; + this.current.textMatrixScale = 1; + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + } + endText() { + const paths = this.pendingTextPaths; + const ctx = this.ctx; + if (paths === undefined) { + ctx.beginPath(); + return; + } + ctx.save(); + ctx.beginPath(); + for (const path of paths) { + ctx.setTransform(...path.transform); + ctx.translate(path.x, path.y); + path.addToPath(ctx, path.fontSize); + } + ctx.restore(); + ctx.clip(); + ctx.beginPath(); + delete this.pendingTextPaths; + } + setCharSpacing(spacing) { + this.current.charSpacing = spacing; + } + setWordSpacing(spacing) { + this.current.wordSpacing = spacing; + } + setHScale(scale) { + this.current.textHScale = scale / 100; + } + setLeading(leading) { + this.current.leading = -leading; + } + setFont(fontRefName, size) { + const fontObj = this.commonObjs.get(fontRefName); + const current = this.current; + if (!fontObj) { + throw new Error(`Can't find font for ${fontRefName}`); + } + current.fontMatrix = fontObj.fontMatrix || FONT_IDENTITY_MATRIX; + if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { + warn("Invalid font matrix for font " + fontRefName); + } + if (size < 0) { + size = -size; + current.fontDirection = -1; + } else { + current.fontDirection = 1; + } + this.current.font = fontObj; + this.current.fontSize = size; + if (fontObj.isType3Font) { + return; + } + const name = fontObj.loadedName || "sans-serif"; + const typeface = fontObj.systemFontInfo?.css || `"${name}", ${fontObj.fallbackName}`; + let bold = "normal"; + if (fontObj.black) { + bold = "900"; + } else if (fontObj.bold) { + bold = "bold"; + } + const italic = fontObj.italic ? "italic" : "normal"; + let browserFontSize = size; + if (size < MIN_FONT_SIZE) { + browserFontSize = MIN_FONT_SIZE; + } else if (size > MAX_FONT_SIZE) { + browserFontSize = MAX_FONT_SIZE; + } + this.current.fontSizeScale = size / browserFontSize; + this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; + } + setTextRenderingMode(mode) { + this.current.textRenderingMode = mode; + } + setTextRise(rise) { + this.current.textRise = rise; + } + moveText(x, y) { + this.current.x = this.current.lineX += x; + this.current.y = this.current.lineY += y; + } + setLeadingMoveText(x, y) { + this.setLeading(-y); + this.moveText(x, y); + } + setTextMatrix(a, b, c, d, e, f) { + this.current.textMatrix = [a, b, c, d, e, f]; + this.current.textMatrixScale = Math.hypot(a, b); + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + } + nextLine() { + this.moveText(0, this.current.leading); + } + paintChar(character, x, y, patternTransform) { + const ctx = this.ctx; + const current = this.current; + const font = current.font; + const textRenderingMode = current.textRenderingMode; + const fontSize = current.fontSize / current.fontSizeScale; + const fillStrokeMode = textRenderingMode & TextRenderingMode.FILL_STROKE_MASK; + const isAddToPathSet = !!(textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG); + const patternFill = current.patternFill && !font.missingFile; + let addToPath; + if (font.disableFontFace || isAddToPathSet || patternFill) { + addToPath = font.getPathGenerator(this.commonObjs, character); + } + if (font.disableFontFace || patternFill) { + ctx.save(); + ctx.translate(x, y); + ctx.beginPath(); + addToPath(ctx, fontSize); + if (patternTransform) { + ctx.setTransform(...patternTransform); + } + if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.fill(); + } + if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.stroke(); + } + ctx.restore(); + } else { + if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.fillText(character, x, y); + } + if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.strokeText(character, x, y); + } + } + if (isAddToPathSet) { + const paths = this.pendingTextPaths ||= []; + paths.push({ + transform: getCurrentTransform(ctx), + x, + y, + fontSize, + addToPath + }); + } + } + get isFontSubpixelAAEnabled() { + const { + context: ctx + } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10); + ctx.scale(1.5, 1); + ctx.fillText("I", 0, 10); + const data = ctx.getImageData(0, 0, 10, 10).data; + let enabled = false; + for (let i = 3; i < data.length; i += 4) { + if (data[i] > 0 && data[i] < 255) { + enabled = true; + break; + } + } + return shadow(this, "isFontSubpixelAAEnabled", enabled); + } + showText(glyphs) { + const current = this.current; + const font = current.font; + if (font.isType3Font) { + return this.showType3Text(glyphs); + } + const fontSize = current.fontSize; + if (fontSize === 0) { + return undefined; + } + const ctx = this.ctx; + const fontSizeScale = current.fontSizeScale; + const charSpacing = current.charSpacing; + const wordSpacing = current.wordSpacing; + const fontDirection = current.fontDirection; + const textHScale = current.textHScale * fontDirection; + const glyphsLength = glyphs.length; + const vertical = font.vertical; + const spacingDir = vertical ? 1 : -1; + const defaultVMetrics = font.defaultVMetrics; + const widthAdvanceScale = fontSize * current.fontMatrix[0]; + const simpleFillText = current.textRenderingMode === TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; + ctx.save(); + ctx.transform(...current.textMatrix); + ctx.translate(current.x, current.y + current.textRise); + if (fontDirection > 0) { + ctx.scale(textHScale, -1); + } else { + ctx.scale(textHScale, 1); + } + let patternTransform; + if (current.patternFill) { + ctx.save(); + const pattern = current.fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL); + patternTransform = getCurrentTransform(ctx); + ctx.restore(); + ctx.fillStyle = pattern; + } + let lineWidth = current.lineWidth; + const scale = current.textMatrixScale; + if (scale === 0 || lineWidth === 0) { + const fillStrokeMode = current.textRenderingMode & TextRenderingMode.FILL_STROKE_MASK; + if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + lineWidth = this.getSinglePixelWidth(); + } + } else { + lineWidth /= scale; + } + if (fontSizeScale !== 1.0) { + ctx.scale(fontSizeScale, fontSizeScale); + lineWidth /= fontSizeScale; + } + ctx.lineWidth = lineWidth; + if (font.isInvalidPDFjsFont) { + const chars = []; + let width = 0; + for (const glyph of glyphs) { + chars.push(glyph.unicode); + width += glyph.width; + } + ctx.fillText(chars.join(""), 0, 0); + current.x += width * widthAdvanceScale * textHScale; + ctx.restore(); + this.compose(); + return undefined; + } + let x = 0, + i; + for (i = 0; i < glyphsLength; ++i) { + const glyph = glyphs[i]; + if (typeof glyph === "number") { + x += spacingDir * glyph * fontSize / 1000; + continue; + } + let restoreNeeded = false; + const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + const character = glyph.fontChar; + const accent = glyph.accent; + let scaledX, scaledY; + let width = glyph.width; + if (vertical) { + const vmetric = glyph.vmetric || defaultVMetrics; + const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; + const vy = vmetric[2] * widthAdvanceScale; + width = vmetric ? -vmetric[0] : width; + scaledX = vx / fontSizeScale; + scaledY = (x + vy) / fontSizeScale; + } else { + scaledX = x / fontSizeScale; + scaledY = 0; + } + if (font.remeasure && width > 0) { + const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; + if (width < measuredWidth && this.isFontSubpixelAAEnabled) { + const characterScaleX = width / measuredWidth; + restoreNeeded = true; + ctx.save(); + ctx.scale(characterScaleX, 1); + scaledX /= characterScaleX; + } else if (width !== measuredWidth) { + scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; + } + } + if (this.contentVisible && (glyph.isInFont || font.missingFile)) { + if (simpleFillText && !accent) { + ctx.fillText(character, scaledX, scaledY); + } else { + this.paintChar(character, scaledX, scaledY, patternTransform); + if (accent) { + const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; + const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; + this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform); + } + } + } + const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection; + x += charWidth; + if (restoreNeeded) { + ctx.restore(); + } + } + if (vertical) { + current.y -= x; + } else { + current.x += x * textHScale; + } + ctx.restore(); + this.compose(); + return undefined; + } + showType3Text(glyphs) { + const ctx = this.ctx; + const current = this.current; + const font = current.font; + const fontSize = current.fontSize; + const fontDirection = current.fontDirection; + const spacingDir = font.vertical ? 1 : -1; + const charSpacing = current.charSpacing; + const wordSpacing = current.wordSpacing; + const textHScale = current.textHScale * fontDirection; + const fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX; + const glyphsLength = glyphs.length; + const isTextInvisible = current.textRenderingMode === TextRenderingMode.INVISIBLE; + let i, glyph, width, spacingLength; + if (isTextInvisible || fontSize === 0) { + return; + } + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + ctx.save(); + ctx.transform(...current.textMatrix); + ctx.translate(current.x, current.y); + ctx.scale(textHScale, fontDirection); + for (i = 0; i < glyphsLength; ++i) { + glyph = glyphs[i]; + if (typeof glyph === "number") { + spacingLength = spacingDir * glyph * fontSize / 1000; + this.ctx.translate(spacingLength, 0); + current.x += spacingLength * textHScale; + continue; + } + const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + const operatorList = font.charProcOperatorList[glyph.operatorListId]; + if (!operatorList) { + warn(`Type3 character "${glyph.operatorListId}" is not available.`); + continue; + } + if (this.contentVisible) { + this.processingType3 = glyph; + this.save(); + ctx.scale(fontSize, fontSize); + ctx.transform(...fontMatrix); + this.executeOperatorList(operatorList); + this.restore(); + } + const transformed = Util.applyTransform([glyph.width, 0], fontMatrix); + width = transformed[0] * fontSize + spacing; + ctx.translate(width, 0); + current.x += width * textHScale; + } + ctx.restore(); + this.processingType3 = null; + } + setCharWidth(xWidth, yWidth) {} + setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { + this.ctx.rect(llx, lly, urx - llx, ury - lly); + this.ctx.clip(); + this.endPath(); + } + getColorN_Pattern(IR) { + let pattern; + if (IR[0] === "TilingPattern") { + const color = IR[1]; + const baseTransform = this.baseTransform || getCurrentTransform(this.ctx); + const canvasGraphicsFactory = { + createCanvasGraphics: ctx => new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { + optionalContentConfig: this.optionalContentConfig, + markedContentStack: this.markedContentStack + }) + }; + pattern = new TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); + } else { + pattern = this._getPattern(IR[1], IR[2]); + } + return pattern; + } + setStrokeColorN() { + this.current.strokeColor = this.getColorN_Pattern(arguments); + } + setFillColorN() { + this.current.fillColor = this.getColorN_Pattern(arguments); + this.current.patternFill = true; + } + setStrokeRGBColor(r, g, b) { + const color = Util.makeHexColor(r, g, b); + this.ctx.strokeStyle = color; + this.current.strokeColor = color; + } + setFillRGBColor(r, g, b) { + const color = Util.makeHexColor(r, g, b); + this.ctx.fillStyle = color; + this.current.fillColor = color; + this.current.patternFill = false; + } + _getPattern(objId, matrix = null) { + let pattern; + if (this.cachedPatterns.has(objId)) { + pattern = this.cachedPatterns.get(objId); + } else { + pattern = getShadingPattern(this.getObject(objId)); + this.cachedPatterns.set(objId, pattern); + } + if (matrix) { + pattern.matrix = matrix; + } + return pattern; + } + shadingFill(objId) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + this.save(); + const pattern = this._getPattern(objId); + ctx.fillStyle = pattern.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.SHADING); + const inv = getCurrentTransformInverse(ctx); + if (inv) { + const { + width, + height + } = ctx.canvas; + const [x0, y0, x1, y1] = Util.getAxialAlignedBoundingBox([0, 0, width, height], inv); + this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); + } else { + this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); + } + this.compose(this.current.getClippedPathBoundingBox()); + this.restore(); + } + beginInlineImage() { + unreachable("Should not call beginInlineImage"); + } + beginImageData() { + unreachable("Should not call beginImageData"); + } + paintFormXObjectBegin(matrix, bbox) { + if (!this.contentVisible) { + return; + } + this.save(); + this.baseTransformStack.push(this.baseTransform); + if (matrix) { + this.transform(...matrix); + } + this.baseTransform = getCurrentTransform(this.ctx); + if (bbox) { + const width = bbox[2] - bbox[0]; + const height = bbox[3] - bbox[1]; + this.ctx.rect(bbox[0], bbox[1], width, height); + this.current.updateRectMinMax(getCurrentTransform(this.ctx), bbox); + this.clip(); + this.endPath(); + } + } + paintFormXObjectEnd() { + if (!this.contentVisible) { + return; + } + this.restore(); + this.baseTransform = this.baseTransformStack.pop(); + } + beginGroup(group) { + if (!this.contentVisible) { + return; + } + this.save(); + if (this.inSMaskMode) { + this.endSMaskMode(); + this.current.activeSMask = null; + } + const currentCtx = this.ctx; + if (!group.isolated) { + info("TODO: Support non-isolated groups."); + } + if (group.knockout) { + warn("Knockout groups not supported."); + } + const currentTransform = getCurrentTransform(currentCtx); + if (group.matrix) { + currentCtx.transform(...group.matrix); + } + if (!group.bbox) { + throw new Error("Bounding box is required."); + } + let bounds = Util.getAxialAlignedBoundingBox(group.bbox, getCurrentTransform(currentCtx)); + const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; + bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; + const offsetX = Math.floor(bounds[0]); + const offsetY = Math.floor(bounds[1]); + const drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); + const drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); + this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]); + let cacheId = "groupAt" + this.groupLevel; + if (group.smask) { + cacheId += "_smask_" + this.smaskCounter++ % 2; + } + const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); + const groupCtx = scratchCanvas.context; + groupCtx.translate(-offsetX, -offsetY); + groupCtx.transform(...currentTransform); + if (group.smask) { + this.smaskStack.push({ + canvas: scratchCanvas.canvas, + context: groupCtx, + offsetX, + offsetY, + subtype: group.smask.subtype, + backdrop: group.smask.backdrop, + transferMap: group.smask.transferMap || null, + startTransformInverse: null + }); + } else { + currentCtx.setTransform(1, 0, 0, 1, 0, 0); + currentCtx.translate(offsetX, offsetY); + currentCtx.save(); + } + copyCtxState(currentCtx, groupCtx); + this.ctx = groupCtx; + this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); + this.groupStack.push(currentCtx); + this.groupLevel++; + } + endGroup(group) { + if (!this.contentVisible) { + return; + } + this.groupLevel--; + const groupCtx = this.ctx; + const ctx = this.groupStack.pop(); + this.ctx = ctx; + this.ctx.imageSmoothingEnabled = false; + if (group.smask) { + this.tempSMask = this.smaskStack.pop(); + this.restore(); + } else { + this.ctx.restore(); + const currentMtx = getCurrentTransform(this.ctx); + this.restore(); + this.ctx.save(); + this.ctx.setTransform(...currentMtx); + const dirtyBox = Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx); + this.ctx.drawImage(groupCtx.canvas, 0, 0); + this.ctx.restore(); + this.compose(dirtyBox); + } + } + beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) { + this.#restoreInitialState(); + resetCtxToDefault(this.ctx); + this.ctx.save(); + this.save(); + if (this.baseTransform) { + this.ctx.setTransform(...this.baseTransform); + } + if (rect) { + const width = rect[2] - rect[0]; + const height = rect[3] - rect[1]; + if (hasOwnCanvas && this.annotationCanvasMap) { + transform = transform.slice(); + transform[4] -= rect[0]; + transform[5] -= rect[1]; + rect = rect.slice(); + rect[0] = rect[1] = 0; + rect[2] = width; + rect[3] = height; + const [scaleX, scaleY] = Util.singularValueDecompose2dScale(getCurrentTransform(this.ctx)); + const { + viewportScale + } = this; + const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale); + const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale); + this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight); + const { + canvas, + context + } = this.annotationCanvas; + this.annotationCanvasMap.set(id, canvas); + this.annotationCanvas.savedCtx = this.ctx; + this.ctx = context; + this.ctx.save(); + this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY); + resetCtxToDefault(this.ctx); + } else { + resetCtxToDefault(this.ctx); + this.ctx.rect(rect[0], rect[1], width, height); + this.ctx.clip(); + this.endPath(); + } + } + this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); + this.transform(...transform); + this.transform(...matrix); + } + endAnnotation() { + if (this.annotationCanvas) { + this.ctx.restore(); + this.#drawFilter(); + this.ctx = this.annotationCanvas.savedCtx; + delete this.annotationCanvas.savedCtx; + delete this.annotationCanvas; + } + } + paintImageMaskXObject(img) { + if (!this.contentVisible) { + return; + } + const count = img.count; + img = this.getObject(img.data, img); + img.count = count; + const ctx = this.ctx; + const glyph = this.processingType3; + if (glyph) { + if (glyph.compiled === undefined) { + glyph.compiled = compileType3Glyph(img); + } + if (glyph.compiled) { + glyph.compiled(ctx); + return; + } + } + const mask = this._createMaskCanvas(img); + const maskCanvas = mask.canvas; + ctx.save(); + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY); + ctx.restore(); + this.compose(); + } + paintImageMaskXObjectRepeat(img, scaleX, skewX = 0, skewY = 0, scaleY, positions) { + if (!this.contentVisible) { + return; + } + img = this.getObject(img.data, img); + const ctx = this.ctx; + ctx.save(); + const currentTransform = getCurrentTransform(ctx); + ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0); + const mask = this._createMaskCanvas(img); + ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]); + for (let i = 0, ii = positions.length; i < ii; i += 2) { + const trans = Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]); + const [x, y] = Util.applyTransform([0, 0], trans); + ctx.drawImage(mask.canvas, x, y); + } + ctx.restore(); + this.compose(); + } + paintImageMaskXObjectGroup(images) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + for (const image of images) { + const { + data, + width, + height, + transform + } = image; + const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); + const maskCtx = maskCanvas.context; + maskCtx.save(); + const img = this.getObject(data, image); + putBinaryImageMask(maskCtx, img); + maskCtx.globalCompositeOperation = "source-in"; + maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, getCurrentTransformInverse(ctx), PathType.FILL) : fillColor; + maskCtx.fillRect(0, 0, width, height); + maskCtx.restore(); + ctx.save(); + ctx.transform(...transform); + ctx.scale(1, -1); + drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); + ctx.restore(); + } + this.compose(); + } + paintImageXObject(objId) { + if (!this.contentVisible) { + return; + } + const imgData = this.getObject(objId); + if (!imgData) { + warn("Dependent image isn't ready yet"); + return; + } + this.paintInlineImageXObject(imgData); + } + paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { + if (!this.contentVisible) { + return; + } + const imgData = this.getObject(objId); + if (!imgData) { + warn("Dependent image isn't ready yet"); + return; + } + const width = imgData.width; + const height = imgData.height; + const map = []; + for (let i = 0, ii = positions.length; i < ii; i += 2) { + map.push({ + transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], + x: 0, + y: 0, + w: width, + h: height + }); + } + this.paintInlineImageXObjectGroup(imgData, map); + } + applyTransferMapsToCanvas(ctx) { + if (this.current.transferMaps !== "none") { + ctx.filter = this.current.transferMaps; + ctx.drawImage(ctx.canvas, 0, 0); + ctx.filter = "none"; + } + return ctx.canvas; + } + applyTransferMapsToBitmap(imgData) { + if (this.current.transferMaps === "none") { + return imgData.bitmap; + } + const { + bitmap, + width, + height + } = imgData; + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); + const tmpCtx = tmpCanvas.context; + tmpCtx.filter = this.current.transferMaps; + tmpCtx.drawImage(bitmap, 0, 0); + tmpCtx.filter = "none"; + return tmpCanvas.canvas; + } + paintInlineImageXObject(imgData) { + if (!this.contentVisible) { + return; + } + const width = imgData.width; + const height = imgData.height; + const ctx = this.ctx; + this.save(); + if (!isNodeJS) { + const { + filter + } = ctx; + if (filter !== "none" && filter !== "") { + ctx.filter = "none"; + } + } + ctx.scale(1 / width, -1 / height); + let imgToPaint; + if (imgData.bitmap) { + imgToPaint = this.applyTransferMapsToBitmap(imgData); + } else if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { + imgToPaint = imgData; + } else { + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); + const tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData); + imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); + } + const scaled = this._scaleImage(imgToPaint, getCurrentTransformInverse(ctx)); + ctx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(ctx), imgData.interpolate); + drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height); + this.compose(); + this.restore(); + } + paintInlineImageXObjectGroup(imgData, map) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + let imgToPaint; + if (imgData.bitmap) { + imgToPaint = imgData.bitmap; + } else { + const w = imgData.width; + const h = imgData.height; + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h); + const tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData); + imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); + } + for (const entry of map) { + ctx.save(); + ctx.transform(...entry.transform); + ctx.scale(1, -1); + drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); + ctx.restore(); + } + this.compose(); + } + paintSolidColorImageMask() { + if (!this.contentVisible) { + return; + } + this.ctx.fillRect(0, 0, 1, 1); + this.compose(); + } + markPoint(tag) {} + markPointProps(tag, properties) {} + beginMarkedContent(tag) { + this.markedContentStack.push({ + visible: true + }); + } + beginMarkedContentProps(tag, properties) { + if (tag === "OC") { + this.markedContentStack.push({ + visible: this.optionalContentConfig.isVisible(properties) + }); + } else { + this.markedContentStack.push({ + visible: true + }); + } + this.contentVisible = this.isContentVisible(); + } + endMarkedContent() { + this.markedContentStack.pop(); + this.contentVisible = this.isContentVisible(); + } + beginCompat() {} + endCompat() {} + consumePath(clipBox) { + const isEmpty = this.current.isEmptyClip(); + if (this.pendingClip) { + this.current.updateClipFromPath(); + } + if (!this.pendingClip) { + this.compose(clipBox); + } + const ctx = this.ctx; + if (this.pendingClip) { + if (!isEmpty) { + if (this.pendingClip === EO_CLIP) { + ctx.clip("evenodd"); + } else { + ctx.clip(); + } + } + this.pendingClip = null; + } + this.current.startNewPathAndClipBox(this.current.clipBox); + ctx.beginPath(); + } + getSinglePixelWidth() { + if (!this._cachedGetSinglePixelWidth) { + const m = getCurrentTransform(this.ctx); + if (m[1] === 0 && m[2] === 0) { + this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3])); + } else { + const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); + const normX = Math.hypot(m[0], m[2]); + const normY = Math.hypot(m[1], m[3]); + this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet; + } + } + return this._cachedGetSinglePixelWidth; + } + getScaleForStroking() { + if (this._cachedScaleForStroking[0] === -1) { + const { + lineWidth + } = this.current; + const { + a, + b, + c, + d + } = this.ctx.getTransform(); + let scaleX, scaleY; + if (b === 0 && c === 0) { + const normX = Math.abs(a); + const normY = Math.abs(d); + if (normX === normY) { + if (lineWidth === 0) { + scaleX = scaleY = 1 / normX; + } else { + const scaledLineWidth = normX * lineWidth; + scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1; + } + } else if (lineWidth === 0) { + scaleX = 1 / normX; + scaleY = 1 / normY; + } else { + const scaledXLineWidth = normX * lineWidth; + const scaledYLineWidth = normY * lineWidth; + scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1; + scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1; + } + } else { + const absDet = Math.abs(a * d - b * c); + const normX = Math.hypot(a, b); + const normY = Math.hypot(c, d); + if (lineWidth === 0) { + scaleX = normY / absDet; + scaleY = normX / absDet; + } else { + const baseArea = lineWidth * absDet; + scaleX = normY > baseArea ? normY / baseArea : 1; + scaleY = normX > baseArea ? normX / baseArea : 1; + } + } + this._cachedScaleForStroking[0] = scaleX; + this._cachedScaleForStroking[1] = scaleY; + } + return this._cachedScaleForStroking; + } + rescaleAndStroke(saveRestore) { + const { + ctx + } = this; + const { + lineWidth + } = this.current; + const [scaleX, scaleY] = this.getScaleForStroking(); + ctx.lineWidth = lineWidth || 1; + if (scaleX === 1 && scaleY === 1) { + ctx.stroke(); + return; + } + const dashes = ctx.getLineDash(); + if (saveRestore) { + ctx.save(); + } + ctx.scale(scaleX, scaleY); + if (dashes.length > 0) { + const scale = Math.max(scaleX, scaleY); + ctx.setLineDash(dashes.map(x => x / scale)); + ctx.lineDashOffset /= scale; + } + ctx.stroke(); + if (saveRestore) { + ctx.restore(); + } + } + isContentVisible() { + for (let i = this.markedContentStack.length - 1; i >= 0; i--) { + if (!this.markedContentStack[i].visible) { + return false; + } + } + return true; + } +} +for (const op in OPS) { + if (CanvasGraphics.prototype[op] !== undefined) { + CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op]; + } +} +;// CONCATENATED MODULE: ./src/display/worker_options.js +class GlobalWorkerOptions { + static #port = null; + static #src = ""; + static get workerPort() { + return this.#port; + } + static set workerPort(val) { + if (!(typeof Worker !== "undefined" && val instanceof Worker) && val !== null) { + throw new Error("Invalid `workerPort` type."); + } + this.#port = val; + } + static get workerSrc() { + return this.#src; + } + static set workerSrc(val) { + if (typeof val !== "string") { + throw new Error("Invalid `workerSrc` type."); + } + this.#src = val; + } +} +;// CONCATENATED MODULE: ./src/shared/message_handler.js -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.MessageHandler = void 0; -var _util = __w_pdfjs_require__(1); const CallbackKind = { UNKNOWN: 0, DATA: 1, @@ -9055,21 +8122,21 @@ const StreamKind = { }; function wrapReason(reason) { if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) { - (0, _util.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); + unreachable('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); } switch (reason.name) { case "AbortException": - return new _util.AbortException(reason.message); + return new AbortException(reason.message); case "MissingPDFException": - return new _util.MissingPDFException(reason.message); + return new MissingPDFException(reason.message); case "PasswordException": - return new _util.PasswordException(reason.message, reason.code); + return new PasswordException(reason.message, reason.code); case "UnexpectedResponseException": - return new _util.UnexpectedResponseException(reason.message, reason.status); + return new UnexpectedResponseException(reason.message, reason.status); case "UnknownErrorException": - return new _util.UnknownErrorException(reason.message, reason.details); + return new UnknownErrorException(reason.message, reason.details); default: - return new _util.UnknownErrorException(reason.message, reason.toString()); + return new UnknownErrorException(reason.message, reason.toString()); } } class MessageHandler { @@ -9161,7 +8228,7 @@ class MessageHandler { } sendWithPromise(actionName, data, transfers) { const callbackId = this.callbackId++; - const capability = new _util.PromiseCapability(); + const capability = Promise.withResolvers(); this.callbackCapabilities[callbackId] = capability; try { this.comObj.postMessage({ @@ -9183,7 +8250,7 @@ class MessageHandler { comObj = this.comObj; return new ReadableStream({ start: controller => { - const startCapability = new _util.PromiseCapability(); + const startCapability = Promise.withResolvers(); this.streamControllers[streamId] = { controller, startCall: startCapability, @@ -9202,7 +8269,7 @@ class MessageHandler { return startCapability.promise; }, pull: controller => { - const pullCapability = new _util.PromiseCapability(); + const pullCapability = Promise.withResolvers(); this.streamControllers[streamId].pullCall = pullCapability; comObj.postMessage({ sourceName, @@ -9214,8 +8281,8 @@ class MessageHandler { return pullCapability.promise; }, cancel: reason => { - (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason"); - const cancelCapability = new _util.PromiseCapability(); + assert(reason instanceof Error, "cancel must have a valid reason"); + const cancelCapability = Promise.withResolvers(); this.streamControllers[streamId].cancelCall = cancelCapability; this.streamControllers[streamId].isClosed = true; comObj.postMessage({ @@ -9244,7 +8311,7 @@ class MessageHandler { const lastDesiredSize = this.desiredSize; this.desiredSize -= size; if (lastDesiredSize > 0 && this.desiredSize <= 0) { - this.sinkCapability = new _util.PromiseCapability(); + this.sinkCapability = Promise.withResolvers(); this.ready = this.sinkCapability.promise; } comObj.postMessage({ @@ -9269,7 +8336,7 @@ class MessageHandler { delete self.streamSinks[streamId]; }, error(reason) { - (0, _util.assert)(reason instanceof Error, "error must have a valid reason"); + assert(reason instanceof Error, "error must have a valid reason"); if (this.isCancelled) { return; } @@ -9282,7 +8349,7 @@ class MessageHandler { reason: wrapReason(reason) }); }, - sinkCapability: new _util.PromiseCapability(), + sinkCapability: Promise.withResolvers(), onPull: null, onCancel: null, isCancelled: false, @@ -9370,14 +8437,14 @@ class MessageHandler { }); break; case StreamKind.ENQUEUE: - (0, _util.assert)(streamController, "enqueue should have stream controller"); + assert(streamController, "enqueue should have stream controller"); if (streamController.isClosed) { break; } streamController.controller.enqueue(data.chunk); break; case StreamKind.CLOSE: - (0, _util.assert)(streamController, "close should have stream controller"); + assert(streamController, "close should have stream controller"); if (streamController.isClosed) { break; } @@ -9386,7 +8453,7 @@ class MessageHandler { this.#deleteStreamController(streamController, streamId); break; case StreamKind.ERROR: - (0, _util.assert)(streamController, "error should have stream controller"); + assert(streamController, "error should have stream controller"); streamController.controller.error(wrapReason(data.reason)); this.#deleteStreamController(streamController, streamId); break; @@ -9437,19 +8504,9 @@ class MessageHandler { this.comObj.removeEventListener("message", this._onComObjOnMessage); } } -exports.MessageHandler = MessageHandler; -/***/ }), -/* 16 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +;// CONCATENATED MODULE: ./src/display/metadata.js - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Metadata = void 0; -var _util = __w_pdfjs_require__(1); class Metadata { #metadataMap; #data; @@ -9467,40 +8524,56 @@ class Metadata { return this.#metadataMap.get(name) ?? null; } getAll() { - return (0, _util.objectFromMap)(this.#metadataMap); + return objectFromMap(this.#metadataMap); } has(name) { return this.#metadataMap.has(name); } } -exports.Metadata = Metadata; -/***/ }), -/* 17 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +;// CONCATENATED MODULE: ./src/display/optional_content_config.js - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.OptionalContentConfig = void 0; -var _util = __w_pdfjs_require__(1); -var _murmurhash = __w_pdfjs_require__(8); const INTERNAL = Symbol("INTERNAL"); class OptionalContentGroup { + #isDisplay = false; + #isPrint = false; + #userSet = false; #visible = true; - constructor(name, intent) { + constructor(renderingIntent, { + name, + intent, + usage + }) { + this.#isDisplay = !!(renderingIntent & RenderingIntentFlag.DISPLAY); + this.#isPrint = !!(renderingIntent & RenderingIntentFlag.PRINT); this.name = name; this.intent = intent; + this.usage = usage; } get visible() { - return this.#visible; - } - _setVisible(internal, visible) { - if (internal !== INTERNAL) { - (0, _util.unreachable)("Internal method `_setVisible` called."); + if (this.#userSet) { + return this.#visible; } + if (!this.#visible) { + return false; + } + const { + print, + view + } = this.usage; + if (this.#isDisplay) { + return view?.viewState !== "OFF"; + } else if (this.#isPrint) { + return print?.printState !== "OFF"; + } + return true; + } + _setVisible(internal, visible, userSet = false) { + if (internal !== INTERNAL) { + unreachable("Internal method `_setVisible` called."); + } + this.#userSet = userSet; this.#visible = visible; } } @@ -9509,7 +8582,8 @@ class OptionalContentConfig { #groups = new Map(); #initialHash = null; #order = null; - constructor(data) { + constructor(data, renderingIntent = RenderingIntentFlag.DISPLAY) { + this.renderingIntent = renderingIntent; this.name = null; this.creator = null; if (data === null) { @@ -9519,7 +8593,7 @@ class OptionalContentConfig { this.creator = data.creator; this.#order = data.order; for (const group of data.groups) { - this.#groups.set(group.id, new OptionalContentGroup(group.name, group.intent)); + this.#groups.set(group.id, new OptionalContentGroup(renderingIntent, group)); } if (data.baseState === "OFF") { for (const group of this.#groups.values()) { @@ -9548,7 +8622,7 @@ class OptionalContentConfig { } else if (this.#groups.has(element)) { state = this.#groups.get(element).visible; } else { - (0, _util.warn)(`Optional content group not found: ${element}`); + warn(`Optional content group not found: ${element}`); return true; } switch (operator) { @@ -9575,12 +8649,12 @@ class OptionalContentConfig { return true; } if (!group) { - (0, _util.warn)("Optional content group not defined."); + info("Optional content group not defined."); return true; } if (group.type === "OCG") { if (!this.#groups.has(group.id)) { - (0, _util.warn)(`Optional content group not found: ${group.id}`); + warn(`Optional content group not found: ${group.id}`); return true; } return this.#groups.get(group.id).visible; @@ -9591,7 +8665,7 @@ class OptionalContentConfig { if (!group.policy || group.policy === "AnyOn") { for (const id of group.ids) { if (!this.#groups.has(id)) { - (0, _util.warn)(`Optional content group not found: ${id}`); + warn(`Optional content group not found: ${id}`); return true; } if (this.#groups.get(id).visible) { @@ -9602,7 +8676,7 @@ class OptionalContentConfig { } else if (group.policy === "AllOn") { for (const id of group.ids) { if (!this.#groups.has(id)) { - (0, _util.warn)(`Optional content group not found: ${id}`); + warn(`Optional content group not found: ${id}`); return true; } if (!this.#groups.get(id).visible) { @@ -9613,7 +8687,7 @@ class OptionalContentConfig { } else if (group.policy === "AnyOff") { for (const id of group.ids) { if (!this.#groups.has(id)) { - (0, _util.warn)(`Optional content group not found: ${id}`); + warn(`Optional content group not found: ${id}`); return true; } if (!this.#groups.get(id).visible) { @@ -9624,7 +8698,7 @@ class OptionalContentConfig { } else if (group.policy === "AllOff") { for (const id of group.ids) { if (!this.#groups.has(id)) { - (0, _util.warn)(`Optional content group not found: ${id}`); + warn(`Optional content group not found: ${id}`); return true; } if (this.#groups.get(id).visible) { @@ -9633,18 +8707,50 @@ class OptionalContentConfig { } return true; } - (0, _util.warn)(`Unknown optional content policy ${group.policy}.`); + warn(`Unknown optional content policy ${group.policy}.`); return true; } - (0, _util.warn)(`Unknown group type ${group.type}.`); + warn(`Unknown group type ${group.type}.`); return true; } setVisibility(id, visible = true) { - if (!this.#groups.has(id)) { - (0, _util.warn)(`Optional content group not found: ${id}`); + const group = this.#groups.get(id); + if (!group) { + warn(`Optional content group not found: ${id}`); return; } - this.#groups.get(id)._setVisible(INTERNAL, !!visible); + group._setVisible(INTERNAL, !!visible, true); + this.#cachedGetHash = null; + } + setOCGState({ + state, + preserveRB + }) { + let operator; + for (const elem of state) { + switch (elem) { + case "ON": + case "OFF": + case "Toggle": + operator = elem; + continue; + } + const group = this.#groups.get(elem); + if (!group) { + continue; + } + switch (operator) { + case "ON": + group._setVisible(INTERNAL, true); + break; + case "OFF": + group._setVisible(INTERNAL, false); + break; + case "Toggle": + group._setVisible(INTERNAL, !group.visible); + break; + } + } this.#cachedGetHash = null; } get hasInitialVisibility() { @@ -9660,7 +8766,7 @@ class OptionalContentConfig { return [...this.#groups.keys()]; } getGroups() { - return this.#groups.size > 0 ? (0, _util.objectFromMap)(this.#groups) : null; + return this.#groups.size > 0 ? objectFromMap(this.#groups) : null; } getGroup(id) { return this.#groups.get(id) || null; @@ -9669,37 +8775,29 @@ class OptionalContentConfig { if (this.#cachedGetHash !== null) { return this.#cachedGetHash; } - const hash = new _murmurhash.MurmurHash3_64(); + const hash = new MurmurHash3_64(); for (const [id, group] of this.#groups) { hash.update(`${id}:${group.visible}`); } return this.#cachedGetHash = hash.hexdigest(); } } -exports.OptionalContentConfig = OptionalContentConfig; -/***/ }), -/* 18 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +;// CONCATENATED MODULE: ./src/display/transport_stream.js - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PDFDataTransportStream = void 0; -var _util = __w_pdfjs_require__(1); -var _display_utils = __w_pdfjs_require__(6); class PDFDataTransportStream { - constructor({ - length, - initialData, - progressiveDone = false, - contentDispositionFilename = null, + constructor(pdfDataRangeTransport, { disableRange = false, disableStream = false - }, pdfDataRangeTransport) { - (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'); + }) { + assert(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'); + const { + length, + initialData, + progressiveDone, + contentDispositionFilename + } = pdfDataRangeTransport; this._queuedChunks = []; this._progressiveDone = progressiveDone; this._contentDispositionFilename = contentDispositionFilename; @@ -9713,27 +8811,27 @@ class PDFDataTransportStream { this._contentLength = length; this._fullRequestReader = null; this._rangeReaders = []; - this._pdfDataRangeTransport.addRangeListener((begin, chunk) => { + pdfDataRangeTransport.addRangeListener((begin, chunk) => { this._onReceiveData({ begin, chunk }); }); - this._pdfDataRangeTransport.addProgressListener((loaded, total) => { + pdfDataRangeTransport.addProgressListener((loaded, total) => { this._onProgress({ loaded, total }); }); - this._pdfDataRangeTransport.addProgressiveReadListener(chunk => { + pdfDataRangeTransport.addProgressiveReadListener(chunk => { this._onReceiveData({ chunk }); }); - this._pdfDataRangeTransport.addProgressiveDoneListener(() => { + pdfDataRangeTransport.addProgressiveDoneListener(() => { this._onProgressiveDone(); }); - this._pdfDataRangeTransport.transportReady(); + pdfDataRangeTransport.transportReady(); } _onReceiveData({ begin, @@ -9754,7 +8852,7 @@ class PDFDataTransportStream { rangeReader._enqueue(buffer); return true; }); - (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found."); + assert(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found."); } } get _progressiveDataLength() { @@ -9783,7 +8881,7 @@ class PDFDataTransportStream { } } getFullReader() { - (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once."); + assert(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once."); const queuedChunks = this._queuedChunks; this._queuedChunks = null; return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename); @@ -9805,12 +8903,11 @@ class PDFDataTransportStream { this._pdfDataRangeTransport.abort(); } } -exports.PDFDataTransportStream = PDFDataTransportStream; class PDFDataTransportStreamReader { constructor(stream, queuedChunks, progressiveDone = false, contentDispositionFilename = null) { this._stream = stream; this._done = progressiveDone || false; - this._filename = (0, _display_utils.isPdfFile)(contentDispositionFilename) ? contentDispositionFilename : null; + this._filename = isPdfFile(contentDispositionFilename) ? contentDispositionFilename : null; this._queuedChunks = queuedChunks || []; this._loaded = 0; for (const chunk of this._queuedChunks) { @@ -9865,7 +8962,7 @@ class PDFDataTransportStreamReader { done: true }; } - const requestCapability = new _util.PromiseCapability(); + const requestCapability = Promise.withResolvers(); this._requests.push(requestCapability); return requestCapability.promise; } @@ -9937,7 +9034,7 @@ class PDFDataTransportStreamRangeReader { done: true }; } - const requestCapability = new _util.PromiseCapability(); + const requestCapability = Promise.withResolvers(); this._requests.push(requestCapability); return requestCapability.promise; } @@ -9954,306 +9051,8 @@ class PDFDataTransportStreamRangeReader { } } -/***/ }), -/* 19 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +;// CONCATENATED MODULE: ./src/display/content_disposition.js - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PDFFetchStream = void 0; -var _util = __w_pdfjs_require__(1); -var _network_utils = __w_pdfjs_require__(20); -; -function createFetchOptions(headers, withCredentials, abortController) { - return { - method: "GET", - headers, - signal: abortController.signal, - mode: "cors", - credentials: withCredentials ? "include" : "same-origin", - redirect: "follow" - }; -} -function createHeaders(httpHeaders) { - const headers = new Headers(); - for (const property in httpHeaders) { - const value = httpHeaders[property]; - if (value === undefined) { - continue; - } - headers.append(property, value); - } - return headers; -} -function getArrayBuffer(val) { - if (val instanceof Uint8Array) { - return val.buffer; - } - if (val instanceof ArrayBuffer) { - return val; - } - (0, _util.warn)(`getArrayBuffer - unexpected data format: ${val}`); - return new Uint8Array(val).buffer; -} -class PDFFetchStream { - constructor(source) { - this.source = source; - this.isHttp = /^https?:/i.test(source.url); - this.httpHeaders = this.isHttp && source.httpHeaders || {}; - this._fullRequestReader = null; - this._rangeRequestReaders = []; - } - get _progressiveDataLength() { - return this._fullRequestReader?._loaded ?? 0; - } - getFullReader() { - (0, _util.assert)(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."); - this._fullRequestReader = new PDFFetchStreamReader(this); - return this._fullRequestReader; - } - getRangeReader(begin, end) { - if (end <= this._progressiveDataLength) { - return null; - } - const reader = new PDFFetchStreamRangeReader(this, begin, end); - this._rangeRequestReaders.push(reader); - return reader; - } - cancelAllRequests(reason) { - this._fullRequestReader?.cancel(reason); - for (const reader of this._rangeRequestReaders.slice(0)) { - reader.cancel(reason); - } - } -} -exports.PDFFetchStream = PDFFetchStream; -class PDFFetchStreamReader { - constructor(stream) { - this._stream = stream; - this._reader = null; - this._loaded = 0; - this._filename = null; - const source = stream.source; - this._withCredentials = source.withCredentials || false; - this._contentLength = source.length; - this._headersCapability = new _util.PromiseCapability(); - this._disableRange = source.disableRange || false; - this._rangeChunkSize = source.rangeChunkSize; - if (!this._rangeChunkSize && !this._disableRange) { - this._disableRange = true; - } - this._abortController = new AbortController(); - this._isStreamingSupported = !source.disableStream; - this._isRangeSupported = !source.disableRange; - this._headers = createHeaders(this._stream.httpHeaders); - const url = source.url; - fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { - if (!(0, _network_utils.validateResponseStatus)(response.status)) { - throw (0, _network_utils.createResponseStatusError)(response.status, url); - } - this._reader = response.body.getReader(); - this._headersCapability.resolve(); - const getResponseHeader = name => { - return response.headers.get(name); - }; - const { - allowRangeRequests, - suggestedLength - } = (0, _network_utils.validateRangeRequestCapabilities)({ - getResponseHeader, - isHttp: this._stream.isHttp, - rangeChunkSize: this._rangeChunkSize, - disableRange: this._disableRange - }); - this._isRangeSupported = allowRangeRequests; - this._contentLength = suggestedLength || this._contentLength; - this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); - if (!this._isStreamingSupported && this._isRangeSupported) { - this.cancel(new _util.AbortException("Streaming is disabled.")); - } - }).catch(this._headersCapability.reject); - this.onProgress = null; - } - get headersReady() { - return this._headersCapability.promise; - } - get filename() { - return this._filename; - } - get contentLength() { - return this._contentLength; - } - get isRangeSupported() { - return this._isRangeSupported; - } - get isStreamingSupported() { - return this._isStreamingSupported; - } - async read() { - await this._headersCapability.promise; - const { - value, - done - } = await this._reader.read(); - if (done) { - return { - value, - done - }; - } - this._loaded += value.byteLength; - this.onProgress?.({ - loaded: this._loaded, - total: this._contentLength - }); - return { - value: getArrayBuffer(value), - done: false - }; - } - cancel(reason) { - this._reader?.cancel(reason); - this._abortController.abort(); - } -} -class PDFFetchStreamRangeReader { - constructor(stream, begin, end) { - this._stream = stream; - this._reader = null; - this._loaded = 0; - const source = stream.source; - this._withCredentials = source.withCredentials || false; - this._readCapability = new _util.PromiseCapability(); - this._isStreamingSupported = !source.disableStream; - this._abortController = new AbortController(); - this._headers = createHeaders(this._stream.httpHeaders); - this._headers.append("Range", `bytes=${begin}-${end - 1}`); - const url = source.url; - fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { - if (!(0, _network_utils.validateResponseStatus)(response.status)) { - throw (0, _network_utils.createResponseStatusError)(response.status, url); - } - this._readCapability.resolve(); - this._reader = response.body.getReader(); - }).catch(this._readCapability.reject); - this.onProgress = null; - } - get isStreamingSupported() { - return this._isStreamingSupported; - } - async read() { - await this._readCapability.promise; - const { - value, - done - } = await this._reader.read(); - if (done) { - return { - value, - done - }; - } - this._loaded += value.byteLength; - this.onProgress?.({ - loaded: this._loaded - }); - return { - value: getArrayBuffer(value), - done: false - }; - } - cancel(reason) { - this._reader?.cancel(reason); - this._abortController.abort(); - } -} - -/***/ }), -/* 20 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.createResponseStatusError = createResponseStatusError; -exports.extractFilenameFromHeader = extractFilenameFromHeader; -exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities; -exports.validateResponseStatus = validateResponseStatus; -var _util = __w_pdfjs_require__(1); -var _content_disposition = __w_pdfjs_require__(21); -var _display_utils = __w_pdfjs_require__(6); -function validateRangeRequestCapabilities({ - getResponseHeader, - isHttp, - rangeChunkSize, - disableRange -}) { - const returnValues = { - allowRangeRequests: false, - suggestedLength: undefined - }; - const length = parseInt(getResponseHeader("Content-Length"), 10); - if (!Number.isInteger(length)) { - return returnValues; - } - returnValues.suggestedLength = length; - if (length <= 2 * rangeChunkSize) { - return returnValues; - } - if (disableRange || !isHttp) { - return returnValues; - } - if (getResponseHeader("Accept-Ranges") !== "bytes") { - return returnValues; - } - const contentEncoding = getResponseHeader("Content-Encoding") || "identity"; - if (contentEncoding !== "identity") { - return returnValues; - } - returnValues.allowRangeRequests = true; - return returnValues; -} -function extractFilenameFromHeader(getResponseHeader) { - const contentDisposition = getResponseHeader("Content-Disposition"); - if (contentDisposition) { - let filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition); - if (filename.includes("%")) { - try { - filename = decodeURIComponent(filename); - } catch {} - } - if ((0, _display_utils.isPdfFile)(filename)) { - return filename; - } - } - return null; -} -function createResponseStatusError(status, url) { - if (status === 404 || status === 0 && url.startsWith("file:")) { - return new _util.MissingPDFException('Missing PDF "' + url + '".'); - } - return new _util.UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status); -} -function validateResponseStatus(status) { - return status === 200 || status === 206; -} - -/***/ }), -/* 21 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader; -var _util = __w_pdfjs_require__(1); function getFilenameFromContentDispositionHeader(contentDisposition) { let needsEncodingFixup = true; let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition); @@ -10289,7 +9088,7 @@ function getFilenameFromContentDispositionHeader(contentDisposition) { const decoder = new TextDecoder(encoding, { fatal: true }); - const buffer = (0, _util.stringToBytes)(value); + const buffer = stringToBytes(value); value = decoder.decode(buffer); needsEncodingFixup = false; } catch {} @@ -10383,27 +9182,281 @@ function getFilenameFromContentDispositionHeader(contentDisposition) { return ""; } -/***/ }), -/* 22 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +;// CONCATENATED MODULE: ./src/display/network_utils.js -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PDFNetworkStream = void 0; -var _util = __w_pdfjs_require__(1); -var _network_utils = __w_pdfjs_require__(20); -; +function validateRangeRequestCapabilities({ + getResponseHeader, + isHttp, + rangeChunkSize, + disableRange +}) { + const returnValues = { + allowRangeRequests: false, + suggestedLength: undefined + }; + const length = parseInt(getResponseHeader("Content-Length"), 10); + if (!Number.isInteger(length)) { + return returnValues; + } + returnValues.suggestedLength = length; + if (length <= 2 * rangeChunkSize) { + return returnValues; + } + if (disableRange || !isHttp) { + return returnValues; + } + if (getResponseHeader("Accept-Ranges") !== "bytes") { + return returnValues; + } + const contentEncoding = getResponseHeader("Content-Encoding") || "identity"; + if (contentEncoding !== "identity") { + return returnValues; + } + returnValues.allowRangeRequests = true; + return returnValues; +} +function extractFilenameFromHeader(getResponseHeader) { + const contentDisposition = getResponseHeader("Content-Disposition"); + if (contentDisposition) { + let filename = getFilenameFromContentDispositionHeader(contentDisposition); + if (filename.includes("%")) { + try { + filename = decodeURIComponent(filename); + } catch {} + } + if (isPdfFile(filename)) { + return filename; + } + } + return null; +} +function createResponseStatusError(status, url) { + if (status === 404 || status === 0 && url.startsWith("file:")) { + return new MissingPDFException('Missing PDF "' + url + '".'); + } + return new UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status); +} +function validateResponseStatus(status) { + return status === 200 || status === 206; +} + +;// CONCATENATED MODULE: ./src/display/fetch_stream.js + + +function createFetchOptions(headers, withCredentials, abortController) { + return { + method: "GET", + headers, + signal: abortController.signal, + mode: "cors", + credentials: withCredentials ? "include" : "same-origin", + redirect: "follow" + }; +} +function createHeaders(httpHeaders) { + const headers = new Headers(); + for (const property in httpHeaders) { + const value = httpHeaders[property]; + if (value === undefined) { + continue; + } + headers.append(property, value); + } + return headers; +} +function getArrayBuffer(val) { + if (val instanceof Uint8Array) { + return val.buffer; + } + if (val instanceof ArrayBuffer) { + return val; + } + warn(`getArrayBuffer - unexpected data format: ${val}`); + return new Uint8Array(val).buffer; +} +class PDFFetchStream { + constructor(source) { + this.source = source; + this.isHttp = /^https?:/i.test(source.url); + this.httpHeaders = this.isHttp && source.httpHeaders || {}; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + get _progressiveDataLength() { + return this._fullRequestReader?._loaded ?? 0; + } + getFullReader() { + assert(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."); + this._fullRequestReader = new PDFFetchStreamReader(this); + return this._fullRequestReader; + } + getRangeReader(begin, end) { + if (end <= this._progressiveDataLength) { + return null; + } + const reader = new PDFFetchStreamRangeReader(this, begin, end); + this._rangeRequestReaders.push(reader); + return reader; + } + cancelAllRequests(reason) { + this._fullRequestReader?.cancel(reason); + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } +} +class PDFFetchStreamReader { + constructor(stream) { + this._stream = stream; + this._reader = null; + this._loaded = 0; + this._filename = null; + const source = stream.source; + this._withCredentials = source.withCredentials || false; + this._contentLength = source.length; + this._headersCapability = Promise.withResolvers(); + this._disableRange = source.disableRange || false; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._abortController = new AbortController(); + this._isStreamingSupported = !source.disableStream; + this._isRangeSupported = !source.disableRange; + this._headers = createHeaders(this._stream.httpHeaders); + const url = source.url; + fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { + if (!validateResponseStatus(response.status)) { + throw createResponseStatusError(response.status, url); + } + this._reader = response.body.getReader(); + this._headersCapability.resolve(); + const getResponseHeader = name => response.headers.get(name); + const { + allowRangeRequests, + suggestedLength + } = validateRangeRequestCapabilities({ + getResponseHeader, + isHttp: this._stream.isHttp, + rangeChunkSize: this._rangeChunkSize, + disableRange: this._disableRange + }); + this._isRangeSupported = allowRangeRequests; + this._contentLength = suggestedLength || this._contentLength; + this._filename = extractFilenameFromHeader(getResponseHeader); + if (!this._isStreamingSupported && this._isRangeSupported) { + this.cancel(new AbortException("Streaming is disabled.")); + } + }).catch(this._headersCapability.reject); + this.onProgress = null; + } + get headersReady() { + return this._headersCapability.promise; + } + get filename() { + return this._filename; + } + get contentLength() { + return this._contentLength; + } + get isRangeSupported() { + return this._isRangeSupported; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._headersCapability.promise; + const { + value, + done + } = await this._reader.read(); + if (done) { + return { + value, + done + }; + } + this._loaded += value.byteLength; + this.onProgress?.({ + loaded: this._loaded, + total: this._contentLength + }); + return { + value: getArrayBuffer(value), + done: false + }; + } + cancel(reason) { + this._reader?.cancel(reason); + this._abortController.abort(); + } +} +class PDFFetchStreamRangeReader { + constructor(stream, begin, end) { + this._stream = stream; + this._reader = null; + this._loaded = 0; + const source = stream.source; + this._withCredentials = source.withCredentials || false; + this._readCapability = Promise.withResolvers(); + this._isStreamingSupported = !source.disableStream; + this._abortController = new AbortController(); + this._headers = createHeaders(this._stream.httpHeaders); + this._headers.append("Range", `bytes=${begin}-${end - 1}`); + const url = source.url; + fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { + if (!validateResponseStatus(response.status)) { + throw createResponseStatusError(response.status, url); + } + this._readCapability.resolve(); + this._reader = response.body.getReader(); + }).catch(this._readCapability.reject); + this.onProgress = null; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._readCapability.promise; + const { + value, + done + } = await this._reader.read(); + if (done) { + return { + value, + done + }; + } + this._loaded += value.byteLength; + this.onProgress?.({ + loaded: this._loaded + }); + return { + value: getArrayBuffer(value), + done: false + }; + } + cancel(reason) { + this._reader?.cancel(reason); + this._abortController.abort(); + } +} + +;// CONCATENATED MODULE: ./src/display/network.js + + const OK_RESPONSE = 200; const PARTIAL_CONTENT_RESPONSE = 206; -function getArrayBuffer(xhr) { +function network_getArrayBuffer(xhr) { const data = xhr.response; if (typeof data !== "string") { return data; } - return (0, _util.stringToBytes)(data).buffer; + return stringToBytes(data).buffer; } class NetworkManager { constructor(url, args = {}) { @@ -10497,7 +9550,7 @@ class NetworkManager { pendingRequest.onError?.(xhr.status); return; } - const chunk = getArrayBuffer(xhr); + const chunk = network_getArrayBuffer(xhr); if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { const rangeHeader = xhr.getResponseHeader("Content-Range"); const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); @@ -10544,7 +9597,7 @@ class PDFNetworkStream { } } getFullReader() { - (0, _util.assert)(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."); + assert(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."); this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source); return this._fullRequestReader; } @@ -10561,7 +9614,6 @@ class PDFNetworkStream { } } } -exports.PDFNetworkStream = PDFNetworkStream; class PDFNetworkStreamFullRequestReader { constructor(manager, source) { this._manager = manager; @@ -10573,7 +9625,7 @@ class PDFNetworkStreamFullRequestReader { }; this._url = source.url; this._fullRequestId = manager.requestFull(args); - this._headersReceivedCapability = new _util.PromiseCapability(); + this._headersReceivedCapability = Promise.withResolvers(); this._disableRange = source.disableRange || false; this._contentLength = source.length; this._rangeChunkSize = source.rangeChunkSize; @@ -10592,13 +9644,11 @@ class PDFNetworkStreamFullRequestReader { _onHeadersReceived() { const fullRequestXhrId = this._fullRequestId; const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); - const getResponseHeader = name => { - return fullRequestXhr.getResponseHeader(name); - }; + const getResponseHeader = name => fullRequestXhr.getResponseHeader(name); const { allowRangeRequests, suggestedLength - } = (0, _network_utils.validateRangeRequestCapabilities)({ + } = validateRangeRequestCapabilities({ getResponseHeader, isHttp: this._manager.isHttp, rangeChunkSize: this._rangeChunkSize, @@ -10608,7 +9658,7 @@ class PDFNetworkStreamFullRequestReader { this._isRangeSupported = true; } this._contentLength = suggestedLength || this._contentLength; - this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); + this._filename = extractFilenameFromHeader(getResponseHeader); if (this._isRangeSupported) { this._manager.abortRequest(fullRequestXhrId); } @@ -10639,7 +9689,7 @@ class PDFNetworkStreamFullRequestReader { this._requests.length = 0; } _onError(status) { - this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url); + this._storedError = createResponseStatusError(status, this._url); this._headersReceivedCapability.reject(this._storedError); for (const requestCapability of this._requests) { requestCapability.reject(this._storedError); @@ -10685,7 +9735,7 @@ class PDFNetworkStreamFullRequestReader { done: true }; } - const requestCapability = new _util.PromiseCapability(); + const requestCapability = Promise.withResolvers(); this._requests.push(requestCapability); return requestCapability.promise; } @@ -10747,7 +9797,7 @@ class PDFNetworkStreamRangeRequestReader { this._close(); } _onError(status) { - this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url); + this._storedError = createResponseStatusError(status, this._url); for (const requestCapability of this._requests) { requestCapability.reject(this._storedError); } @@ -10782,7 +9832,7 @@ class PDFNetworkStreamRangeRequestReader { done: true }; } - const requestCapability = new _util.PromiseCapability(); + const requestCapability = Promise.withResolvers(); this._requests.push(requestCapability); return requestCapability.promise; } @@ -10802,22 +9852,13 @@ class PDFNetworkStreamRangeRequestReader { } } -/***/ }), -/* 23 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +;// CONCATENATED MODULE: ./src/display/node_stream.js -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PDFNodeStream = void 0; -var _util = __w_pdfjs_require__(1); -var _network_utils = __w_pdfjs_require__(20); -; const fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//; function parseUrl(sourceUrl) { - const url = require("url"); + const url = NodePackages.get("url"); const parsedUrl = url.parse(sourceUrl); if (parsedUrl.protocol === "file:" || parsedUrl.host) { return parsedUrl; @@ -10844,7 +9885,7 @@ class PDFNodeStream { return this._fullRequestReader?._loaded ?? 0; } getFullReader() { - (0, _util.assert)(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."); + assert(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."); this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this); return this._fullRequestReader; } @@ -10863,7 +9904,6 @@ class PDFNodeStream { } } } -exports.PDFNodeStream = PDFNodeStream; class BaseFullReader { constructor(stream) { this._url = stream.url; @@ -10882,8 +9922,8 @@ class BaseFullReader { this._isStreamingSupported = !source.disableStream; this._isRangeSupported = !source.disableRange; this._readableStream = null; - this._readCapability = new _util.PromiseCapability(); - this._headersCapability = new _util.PromiseCapability(); + this._readCapability = Promise.withResolvers(); + this._headersCapability = Promise.withResolvers(); } get headersReady() { return this._headersCapability.promise; @@ -10913,7 +9953,7 @@ class BaseFullReader { } const chunk = this._readableStream.read(); if (chunk === null) { - this._readCapability = new _util.PromiseCapability(); + this._readCapability = Promise.withResolvers(); return this.read(); } this._loaded += chunk.length; @@ -10952,7 +9992,7 @@ class BaseFullReader { this._error(reason); }); if (!this._isStreamingSupported && this._isRangeSupported) { - this._error(new _util.AbortException("streaming is disabled")); + this._error(new AbortException("streaming is disabled")); } if (this._storedError) { this._readableStream.destroy(this._storedError); @@ -10967,7 +10007,7 @@ class BaseRangeReader { this.onProgress = null; this._loaded = 0; this._readableStream = null; - this._readCapability = new _util.PromiseCapability(); + this._readCapability = Promise.withResolvers(); const source = stream.source; this._isStreamingSupported = !source.disableStream; } @@ -10987,7 +10027,7 @@ class BaseRangeReader { } const chunk = this._readableStream.read(); if (chunk === null) { - this._readCapability = new _util.PromiseCapability(); + this._readCapability = Promise.withResolvers(); return this.read(); } this._loaded += chunk.length; @@ -11045,20 +10085,18 @@ class PDFNodeStreamFullReader extends BaseFullReader { super(stream); const handleResponse = response => { if (response.statusCode === 404) { - const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`); + const error = new MissingPDFException(`Missing PDF "${this._url}".`); this._storedError = error; this._headersCapability.reject(error); return; } this._headersCapability.resolve(); this._setReadableStream(response); - const getResponseHeader = name => { - return this._readableStream.headers[name.toLowerCase()]; - }; + const getResponseHeader = name => this._readableStream.headers[name.toLowerCase()]; const { allowRangeRequests, suggestedLength - } = (0, _network_utils.validateRangeRequestCapabilities)({ + } = validateRangeRequestCapabilities({ getResponseHeader, isHttp: stream.isHttp, rangeChunkSize: this._rangeChunkSize, @@ -11066,14 +10104,14 @@ class PDFNodeStreamFullReader extends BaseFullReader { }); this._isRangeSupported = allowRangeRequests; this._contentLength = suggestedLength || this._contentLength; - this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); + this._filename = extractFilenameFromHeader(getResponseHeader); }; this._request = null; if (this._url.protocol === "http:") { - const http = require("http"); + const http = NodePackages.get("http"); this._request = http.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); } else { - const https = require("https"); + const https = NodePackages.get("https"); this._request = https.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); } this._request.on("error", reason => { @@ -11097,7 +10135,7 @@ class PDFNodeStreamRangeReader extends BaseRangeReader { this._httpHeaders.Range = `bytes=${start}-${end - 1}`; const handleResponse = response => { if (response.statusCode === 404) { - const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`); + const error = new MissingPDFException(`Missing PDF "${this._url}".`); this._storedError = error; return; } @@ -11105,10 +10143,10 @@ class PDFNodeStreamRangeReader extends BaseRangeReader { }; this._request = null; if (this._url.protocol === "http:") { - const http = require("http"); + const http = NodePackages.get("http"); this._request = http.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); } else { - const https = require("https"); + const https = NodePackages.get("https"); this._request = https.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); } this._request.on("error", reason => { @@ -11124,19 +10162,17 @@ class PDFNodeStreamFsFullReader extends BaseFullReader { if (fileUriRegex.test(this._url.href)) { path = path.replace(/^\//, ""); } - const fs = require("fs"); - fs.lstat(path, (error, stat) => { - if (error) { - if (error.code === "ENOENT") { - error = new _util.MissingPDFException(`Missing PDF "${path}".`); - } - this._storedError = error; - this._headersCapability.reject(error); - return; - } + const fs = NodePackages.get("fs"); + fs.promises.lstat(path).then(stat => { this._contentLength = stat.size; this._setReadableStream(fs.createReadStream(path)); this._headersCapability.resolve(); + }, error => { + if (error.code === "ENOENT") { + error = new MissingPDFException(`Missing PDF "${path}".`); + } + this._storedError = error; + this._headersCapability.reject(error); }); } } @@ -11147,7 +10183,7 @@ class PDFNodeStreamFsRangeReader extends BaseRangeReader { if (fileUriRegex.test(this._url.href)) { path = path.replace(/^\//, ""); } - const fs = require("fs"); + const fs = NodePackages.get("fs"); this._setReadableStream(fs.createReadStream(path, { start, end: end - 1 @@ -11155,1262 +10191,383 @@ class PDFNodeStreamFsRangeReader extends BaseRangeReader { } } -/***/ }), -/* 24 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +;// CONCATENATED MODULE: ./src/display/text_layer.js - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.SVGGraphics = void 0; -var _display_utils = __w_pdfjs_require__(6); -var _util = __w_pdfjs_require__(1); -; -const SVG_DEFAULTS = { - fontStyle: "normal", - fontWeight: "normal", - fillColor: "#000000" -}; -const XML_NS = "http://www.w3.org/XML/1998/namespace"; -const XLINK_NS = "http://www.w3.org/1999/xlink"; -const LINE_CAP_STYLES = ["butt", "round", "square"]; -const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; -const createObjectURL = function (data, contentType = "", forceDataSchema = false) { - if (URL.createObjectURL && typeof Blob !== "undefined" && !forceDataSchema) { - return URL.createObjectURL(new Blob([data], { - type: contentType - })); - } - const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - let buffer = `data:${contentType};base64,`; - for (let i = 0, ii = data.length; i < ii; i += 3) { - const b1 = data[i] & 0xff; - const b2 = data[i + 1] & 0xff; - const b3 = data[i + 2] & 0xff; - const d1 = b1 >> 2, - d2 = (b1 & 3) << 4 | b2 >> 4; - const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64; - const d4 = i + 2 < ii ? b3 & 0x3f : 64; - buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; - } - return buffer; -}; -const convertImgDataToPng = function () { - const PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); - const CHUNK_WRAPPER_SIZE = 12; - const crcTable = new Int32Array(256); - for (let i = 0; i < 256; i++) { - let c = i; - for (let h = 0; h < 8; h++) { - c = c & 1 ? 0xedb88320 ^ c >> 1 & 0x7fffffff : c >> 1 & 0x7fffffff; - } - crcTable[i] = c; - } - function crc32(data, start, end) { - let crc = -1; - for (let i = start; i < end; i++) { - const a = (crc ^ data[i]) & 0xff; - const b = crcTable[a]; - crc = crc >>> 8 ^ b; - } - return crc ^ -1; - } - function writePngChunk(type, body, data, offset) { - let p = offset; - const len = body.length; - data[p] = len >> 24 & 0xff; - data[p + 1] = len >> 16 & 0xff; - data[p + 2] = len >> 8 & 0xff; - data[p + 3] = len & 0xff; - p += 4; - data[p] = type.charCodeAt(0) & 0xff; - data[p + 1] = type.charCodeAt(1) & 0xff; - data[p + 2] = type.charCodeAt(2) & 0xff; - data[p + 3] = type.charCodeAt(3) & 0xff; - p += 4; - data.set(body, p); - p += body.length; - const crc = crc32(data, offset + 4, p); - data[p] = crc >> 24 & 0xff; - data[p + 1] = crc >> 16 & 0xff; - data[p + 2] = crc >> 8 & 0xff; - data[p + 3] = crc & 0xff; - } - function adler32(data, start, end) { - let a = 1; - let b = 0; - for (let i = start; i < end; ++i) { - a = (a + (data[i] & 0xff)) % 65521; - b = (b + a) % 65521; - } - return b << 16 | a; - } - function deflateSync(literals) { - if (!_util.isNodeJS) { - return deflateSyncUncompressed(literals); - } - try { - const input = parseInt(process.versions.node) >= 8 ? literals : Buffer.from(literals); - const output = require("zlib").deflateSync(input, { - level: 9 - }); - return output instanceof Uint8Array ? output : new Uint8Array(output); - } catch (e) { - (0, _util.warn)("Not compressing PNG because zlib.deflateSync is unavailable: " + e); - } - return deflateSyncUncompressed(literals); - } - function deflateSyncUncompressed(literals) { - let len = literals.length; - const maxBlockLength = 0xffff; - const deflateBlocks = Math.ceil(len / maxBlockLength); - const idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4); - let pi = 0; - idat[pi++] = 0x78; - idat[pi++] = 0x9c; - let pos = 0; - while (len > maxBlockLength) { - idat[pi++] = 0x00; - idat[pi++] = 0xff; - idat[pi++] = 0xff; - idat[pi++] = 0x00; - idat[pi++] = 0x00; - idat.set(literals.subarray(pos, pos + maxBlockLength), pi); - pi += maxBlockLength; - pos += maxBlockLength; - len -= maxBlockLength; - } - idat[pi++] = 0x01; - idat[pi++] = len & 0xff; - idat[pi++] = len >> 8 & 0xff; - idat[pi++] = ~len & 0xffff & 0xff; - idat[pi++] = (~len & 0xffff) >> 8 & 0xff; - idat.set(literals.subarray(pos), pi); - pi += literals.length - pos; - const adler = adler32(literals, 0, literals.length); - idat[pi++] = adler >> 24 & 0xff; - idat[pi++] = adler >> 16 & 0xff; - idat[pi++] = adler >> 8 & 0xff; - idat[pi++] = adler & 0xff; - return idat; - } - function encode(imgData, kind, forceDataSchema, isMask) { - const width = imgData.width; - const height = imgData.height; - let bitDepth, colorType, lineSize; - const bytes = imgData.data; - switch (kind) { - case _util.ImageKind.GRAYSCALE_1BPP: - colorType = 0; - bitDepth = 1; - lineSize = width + 7 >> 3; - break; - case _util.ImageKind.RGB_24BPP: - colorType = 2; - bitDepth = 8; - lineSize = width * 3; - break; - case _util.ImageKind.RGBA_32BPP: - colorType = 6; - bitDepth = 8; - lineSize = width * 4; - break; - default: - throw new Error("invalid format"); - } - const literals = new Uint8Array((1 + lineSize) * height); - let offsetLiterals = 0, - offsetBytes = 0; - for (let y = 0; y < height; ++y) { - literals[offsetLiterals++] = 0; - literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals); - offsetBytes += lineSize; - offsetLiterals += lineSize; - } - if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) { - offsetLiterals = 0; - for (let y = 0; y < height; y++) { - offsetLiterals++; - for (let i = 0; i < lineSize; i++) { - literals[offsetLiterals++] ^= 0xff; +const MAX_TEXT_DIVS_TO_RENDER = 100000; +const DEFAULT_FONT_SIZE = 30; +const DEFAULT_FONT_ASCENT = 0.8; +class TextLayer { + #capability = Promise.withResolvers(); + #container = null; + #disableProcessItems = false; + #fontInspectorEnabled = !!globalThis.FontInspector?.enabled; + #lang = null; + #layoutTextParams = null; + #pageHeight = 0; + #pageWidth = 0; + #reader = null; + #rootContainer = null; + #rotation = 0; + #scale = 0; + #styleCache = Object.create(null); + #textContentItemsStr = []; + #textContentSource = null; + #textDivs = []; + #textDivProperties = new WeakMap(); + #transform = null; + static #ascentCache = new Map(); + static #canvasCtx = null; + static #pendingTextLayers = new Set(); + constructor({ + textContentSource, + container, + viewport + }) { + if (textContentSource instanceof ReadableStream) { + this.#textContentSource = textContentSource; + } else if (typeof textContentSource === "object") { + this.#textContentSource = new ReadableStream({ + start(controller) { + controller.enqueue(textContentSource); + controller.close(); } - } - } - const ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]); - const idat = deflateSync(literals); - const pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length; - const data = new Uint8Array(pngLength); - let offset = 0; - data.set(PNG_HEADER, offset); - offset += PNG_HEADER.length; - writePngChunk("IHDR", ihdr, data, offset); - offset += CHUNK_WRAPPER_SIZE + ihdr.length; - writePngChunk("IDATA", idat, data, offset); - offset += CHUNK_WRAPPER_SIZE + idat.length; - writePngChunk("IEND", new Uint8Array(0), data, offset); - return createObjectURL(data, "image/png", forceDataSchema); - } - return function convertImgDataToPng(imgData, forceDataSchema, isMask) { - const kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind; - return encode(imgData, kind, forceDataSchema, isMask); - }; -}(); -class SVGExtraState { - constructor() { - this.fontSizeScale = 1; - this.fontWeight = SVG_DEFAULTS.fontWeight; - this.fontSize = 0; - this.textMatrix = _util.IDENTITY_MATRIX; - this.fontMatrix = _util.FONT_IDENTITY_MATRIX; - this.leading = 0; - this.textRenderingMode = _util.TextRenderingMode.FILL; - this.textMatrixScale = 1; - this.x = 0; - this.y = 0; - this.lineX = 0; - this.lineY = 0; - this.charSpacing = 0; - this.wordSpacing = 0; - this.textHScale = 1; - this.textRise = 0; - this.fillColor = SVG_DEFAULTS.fillColor; - this.strokeColor = "#000000"; - this.fillAlpha = 1; - this.strokeAlpha = 1; - this.lineWidth = 1; - this.lineJoin = ""; - this.lineCap = ""; - this.miterLimit = 0; - this.dashArray = []; - this.dashPhase = 0; - this.dependencies = []; - this.activeClipUrl = null; - this.clipGroup = null; - this.maskId = ""; - } - clone() { - return Object.create(this); - } - setCurrentPoint(x, y) { - this.x = x; - this.y = y; - } -} -function opListToTree(opList) { - let opTree = []; - const tmp = []; - for (const opListElement of opList) { - if (opListElement.fn === "save") { - opTree.push({ - fnId: 92, - fn: "group", - items: [] }); - tmp.push(opTree); - opTree = opTree.at(-1).items; - continue; - } - if (opListElement.fn === "restore") { - opTree = tmp.pop(); } else { - opTree.push(opListElement); + throw new Error('No "textContentSource" parameter specified.'); } - } - return opTree; -} -function pf(value) { - if (Number.isInteger(value)) { - return value.toString(); - } - const s = value.toFixed(10); - let i = s.length - 1; - if (s[i] !== "0") { - return s; - } - do { - i--; - } while (s[i] === "0"); - return s.substring(0, s[i] === "." ? i : i + 1); -} -function pm(m) { - if (m[4] === 0 && m[5] === 0) { - if (m[1] === 0 && m[2] === 0) { - if (m[0] === 1 && m[3] === 1) { - return ""; - } - return `scale(${pf(m[0])} ${pf(m[3])})`; - } - if (m[0] === m[3] && m[1] === -m[2]) { - const a = Math.acos(m[0]) * 180 / Math.PI; - return `rotate(${pf(a)})`; - } - } else if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) { - return `translate(${pf(m[4])} ${pf(m[5])})`; - } - return `matrix(${pf(m[0])} ${pf(m[1])} ${pf(m[2])} ${pf(m[3])} ${pf(m[4])} ` + `${pf(m[5])})`; -} -let clipCount = 0; -let maskCount = 0; -let shadingCount = 0; -class SVGGraphics { - constructor(commonObjs, objs, forceDataSchema = false) { - (0, _display_utils.deprecated)("The SVG back-end is no longer maintained and *may* be removed in the future."); - this.svgFactory = new _display_utils.DOMSVGFactory(); - this.current = new SVGExtraState(); - this.transformMatrix = _util.IDENTITY_MATRIX; - this.transformStack = []; - this.extraStack = []; - this.commonObjs = commonObjs; - this.objs = objs; - this.pendingClip = null; - this.pendingEOFill = false; - this.embedFonts = false; - this.embeddedFonts = Object.create(null); - this.cssStyle = null; - this.forceDataSchema = !!forceDataSchema; - this._operatorIdMapping = []; - for (const op in _util.OPS) { - this._operatorIdMapping[_util.OPS[op]] = op; - } - } - getObject(data, fallback = null) { - if (typeof data === "string") { - return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); - } - return fallback; - } - save() { - this.transformStack.push(this.transformMatrix); - const old = this.current; - this.extraStack.push(old); - this.current = old.clone(); - } - restore() { - this.transformMatrix = this.transformStack.pop(); - this.current = this.extraStack.pop(); - this.pendingClip = null; - this.tgrp = null; - } - group(items) { - this.save(); - this.executeOpTree(items); - this.restore(); - } - loadDependencies(operatorList) { - const fnArray = operatorList.fnArray; - const argsArray = operatorList.argsArray; - for (let i = 0, ii = fnArray.length; i < ii; i++) { - if (fnArray[i] !== _util.OPS.dependency) { - continue; - } - for (const obj of argsArray[i]) { - const objsPool = obj.startsWith("g_") ? this.commonObjs : this.objs; - const promise = new Promise(resolve => { - objsPool.get(obj, resolve); - }); - this.current.dependencies.push(promise); - } - } - return Promise.all(this.current.dependencies); - } - transform(a, b, c, d, e, f) { - const transformMatrix = [a, b, c, d, e, f]; - this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix); - this.tgrp = null; - } - getSVG(operatorList, viewport) { - this.viewport = viewport; - const svgElement = this._initialize(viewport); - return this.loadDependencies(operatorList).then(() => { - this.transformMatrix = _util.IDENTITY_MATRIX; - this.executeOpTree(this.convertOpList(operatorList)); - return svgElement; + this.#container = this.#rootContainer = container; + this.#scale = viewport.scale * (globalThis.devicePixelRatio || 1); + this.#rotation = viewport.rotation; + this.#layoutTextParams = { + prevFontSize: null, + prevFontFamily: null, + div: null, + properties: null, + ctx: null + }; + const { + pageWidth, + pageHeight, + pageX, + pageY + } = viewport.rawDims; + this.#transform = [1, 0, 0, -1, -pageX, pageY + pageHeight]; + this.#pageWidth = pageWidth; + this.#pageHeight = pageHeight; + setLayerDimensions(container, viewport); + TextLayer.#pendingTextLayers.add(this); + this.#capability.promise.catch(() => {}).then(() => { + TextLayer.#pendingTextLayers.delete(this); + this.#layoutTextParams = null; + this.#styleCache = null; }); } - convertOpList(operatorList) { - const operatorIdMapping = this._operatorIdMapping; - const argsArray = operatorList.argsArray; - const fnArray = operatorList.fnArray; - const opList = []; - for (let i = 0, ii = fnArray.length; i < ii; i++) { - const fnId = fnArray[i]; - opList.push({ - fnId, - fn: operatorIdMapping[fnId], - args: argsArray[i] + render() { + const pump = () => { + this.#reader.read().then(({ + value, + done + }) => { + if (done) { + this.#capability.resolve(); + return; + } + this.#lang ??= value.lang; + Object.assign(this.#styleCache, value.styles); + this.#processItems(value.items); + pump(); + }, this.#capability.reject); + }; + this.#reader = this.#textContentSource.getReader(); + pump(); + return this.#capability.promise; + } + update({ + viewport, + onBefore = null + }) { + const scale = viewport.scale * (globalThis.devicePixelRatio || 1); + const rotation = viewport.rotation; + if (rotation !== this.#rotation) { + onBefore?.(); + this.#rotation = rotation; + setLayerDimensions(this.#rootContainer, { + rotation }); } - return opListToTree(opList); - } - executeOpTree(opTree) { - for (const opTreeElement of opTree) { - const fn = opTreeElement.fn; - const fnId = opTreeElement.fnId; - const args = opTreeElement.args; - switch (fnId | 0) { - case _util.OPS.beginText: - this.beginText(); - break; - case _util.OPS.dependency: - break; - case _util.OPS.setLeading: - this.setLeading(args); - break; - case _util.OPS.setLeadingMoveText: - this.setLeadingMoveText(args[0], args[1]); - break; - case _util.OPS.setFont: - this.setFont(args); - break; - case _util.OPS.showText: - this.showText(args[0]); - break; - case _util.OPS.showSpacedText: - this.showText(args[0]); - break; - case _util.OPS.endText: - this.endText(); - break; - case _util.OPS.moveText: - this.moveText(args[0], args[1]); - break; - case _util.OPS.setCharSpacing: - this.setCharSpacing(args[0]); - break; - case _util.OPS.setWordSpacing: - this.setWordSpacing(args[0]); - break; - case _util.OPS.setHScale: - this.setHScale(args[0]); - break; - case _util.OPS.setTextMatrix: - this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); - break; - case _util.OPS.setTextRise: - this.setTextRise(args[0]); - break; - case _util.OPS.setTextRenderingMode: - this.setTextRenderingMode(args[0]); - break; - case _util.OPS.setLineWidth: - this.setLineWidth(args[0]); - break; - case _util.OPS.setLineJoin: - this.setLineJoin(args[0]); - break; - case _util.OPS.setLineCap: - this.setLineCap(args[0]); - break; - case _util.OPS.setMiterLimit: - this.setMiterLimit(args[0]); - break; - case _util.OPS.setFillRGBColor: - this.setFillRGBColor(args[0], args[1], args[2]); - break; - case _util.OPS.setStrokeRGBColor: - this.setStrokeRGBColor(args[0], args[1], args[2]); - break; - case _util.OPS.setStrokeColorN: - this.setStrokeColorN(args); - break; - case _util.OPS.setFillColorN: - this.setFillColorN(args); - break; - case _util.OPS.shadingFill: - this.shadingFill(args[0]); - break; - case _util.OPS.setDash: - this.setDash(args[0], args[1]); - break; - case _util.OPS.setRenderingIntent: - this.setRenderingIntent(args[0]); - break; - case _util.OPS.setFlatness: - this.setFlatness(args[0]); - break; - case _util.OPS.setGState: - this.setGState(args[0]); - break; - case _util.OPS.fill: - this.fill(); - break; - case _util.OPS.eoFill: - this.eoFill(); - break; - case _util.OPS.stroke: - this.stroke(); - break; - case _util.OPS.fillStroke: - this.fillStroke(); - break; - case _util.OPS.eoFillStroke: - this.eoFillStroke(); - break; - case _util.OPS.clip: - this.clip("nonzero"); - break; - case _util.OPS.eoClip: - this.clip("evenodd"); - break; - case _util.OPS.paintSolidColorImageMask: - this.paintSolidColorImageMask(); - break; - case _util.OPS.paintImageXObject: - this.paintImageXObject(args[0]); - break; - case _util.OPS.paintInlineImageXObject: - this.paintInlineImageXObject(args[0]); - break; - case _util.OPS.paintImageMaskXObject: - this.paintImageMaskXObject(args[0]); - break; - case _util.OPS.paintFormXObjectBegin: - this.paintFormXObjectBegin(args[0], args[1]); - break; - case _util.OPS.paintFormXObjectEnd: - this.paintFormXObjectEnd(); - break; - case _util.OPS.closePath: - this.closePath(); - break; - case _util.OPS.closeStroke: - this.closeStroke(); - break; - case _util.OPS.closeFillStroke: - this.closeFillStroke(); - break; - case _util.OPS.closeEOFillStroke: - this.closeEOFillStroke(); - break; - case _util.OPS.nextLine: - this.nextLine(); - break; - case _util.OPS.transform: - this.transform(args[0], args[1], args[2], args[3], args[4], args[5]); - break; - case _util.OPS.constructPath: - this.constructPath(args[0], args[1]); - break; - case _util.OPS.endPath: - this.endPath(); - break; - case 92: - this.group(opTreeElement.items); - break; - default: - (0, _util.warn)(`Unimplemented operator ${fn}`); - break; + if (scale !== this.#scale) { + onBefore?.(); + this.#scale = scale; + const params = { + prevFontSize: null, + prevFontFamily: null, + div: null, + properties: null, + ctx: TextLayer.#getCtx(this.#lang) + }; + for (const div of this.#textDivs) { + params.properties = this.#textDivProperties.get(div); + params.div = div; + this.#layout(params); } } } - setWordSpacing(wordSpacing) { - this.current.wordSpacing = wordSpacing; + cancel() { + const abortEx = new AbortException("TextLayer task cancelled."); + this.#reader?.cancel(abortEx).catch(() => {}); + this.#reader = null; + this.#capability.reject(abortEx); } - setCharSpacing(charSpacing) { - this.current.charSpacing = charSpacing; + get textDivs() { + return this.#textDivs; } - nextLine() { - this.moveText(0, this.current.leading); + get textContentItemsStr() { + return this.#textContentItemsStr; } - setTextMatrix(a, b, c, d, e, f) { - const current = this.current; - current.textMatrix = current.lineMatrix = [a, b, c, d, e, f]; - current.textMatrixScale = Math.hypot(a, b); - current.x = current.lineX = 0; - current.y = current.lineY = 0; - current.xcoords = []; - current.ycoords = []; - current.tspan = this.svgFactory.createElement("svg:tspan"); - current.tspan.setAttributeNS(null, "font-family", current.fontFamily); - current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); - current.tspan.setAttributeNS(null, "y", pf(-current.y)); - current.txtElement = this.svgFactory.createElement("svg:text"); - current.txtElement.append(current.tspan); - } - beginText() { - const current = this.current; - current.x = current.lineX = 0; - current.y = current.lineY = 0; - current.textMatrix = _util.IDENTITY_MATRIX; - current.lineMatrix = _util.IDENTITY_MATRIX; - current.textMatrixScale = 1; - current.tspan = this.svgFactory.createElement("svg:tspan"); - current.txtElement = this.svgFactory.createElement("svg:text"); - current.txtgrp = this.svgFactory.createElement("svg:g"); - current.xcoords = []; - current.ycoords = []; - } - moveText(x, y) { - const current = this.current; - current.x = current.lineX += x; - current.y = current.lineY += y; - current.xcoords = []; - current.ycoords = []; - current.tspan = this.svgFactory.createElement("svg:tspan"); - current.tspan.setAttributeNS(null, "font-family", current.fontFamily); - current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); - current.tspan.setAttributeNS(null, "y", pf(-current.y)); - } - showText(glyphs) { - const current = this.current; - const font = current.font; - const fontSize = current.fontSize; - if (fontSize === 0) { + #processItems(items) { + if (this.#disableProcessItems) { return; } - const fontSizeScale = current.fontSizeScale; - const charSpacing = current.charSpacing; - const wordSpacing = current.wordSpacing; - const fontDirection = current.fontDirection; - const textHScale = current.textHScale * fontDirection; - const vertical = font.vertical; - const spacingDir = vertical ? 1 : -1; - const defaultVMetrics = font.defaultVMetrics; - const widthAdvanceScale = fontSize * current.fontMatrix[0]; - let x = 0; - for (const glyph of glyphs) { - if (glyph === null) { - x += fontDirection * wordSpacing; - continue; - } else if (typeof glyph === "number") { - x += spacingDir * glyph * fontSize / 1000; - continue; + this.#layoutTextParams.ctx ||= TextLayer.#getCtx(this.#lang); + const textDivs = this.#textDivs, + textContentItemsStr = this.#textContentItemsStr; + for (const item of items) { + if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER) { + warn("Ignoring additional textDivs for performance reasons."); + this.#disableProcessItems = true; + return; } - const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; - const character = glyph.fontChar; - let scaledX, scaledY; - let width = glyph.width; - if (vertical) { - let vx; - const vmetric = glyph.vmetric || defaultVMetrics; - vx = glyph.vmetric ? vmetric[1] : width * 0.5; - vx = -vx * widthAdvanceScale; - const vy = vmetric[2] * widthAdvanceScale; - width = vmetric ? -vmetric[0] : width; - scaledX = vx / fontSizeScale; - scaledY = (x + vy) / fontSizeScale; - } else { - scaledX = x / fontSizeScale; - scaledY = 0; - } - if (glyph.isInFont || font.missingFile) { - current.xcoords.push(current.x + scaledX); - if (vertical) { - current.ycoords.push(-current.y + scaledY); + if (item.str === undefined) { + if (item.type === "beginMarkedContentProps" || item.type === "beginMarkedContent") { + const parent = this.#container; + this.#container = document.createElement("span"); + this.#container.classList.add("markedContent"); + if (item.id !== null) { + this.#container.setAttribute("id", `${item.id}`); + } + parent.append(this.#container); + } else if (item.type === "endMarkedContent") { + this.#container = this.#container.parentNode; } - current.tspan.textContent += character; - } else {} - const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection; - x += charWidth; - } - current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" ")); - if (vertical) { - current.tspan.setAttributeNS(null, "y", current.ycoords.map(pf).join(" ")); - } else { - current.tspan.setAttributeNS(null, "y", pf(-current.y)); - } - if (vertical) { - current.y -= x; - } else { - current.x += x * textHScale; - } - current.tspan.setAttributeNS(null, "font-family", current.fontFamily); - current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); - if (current.fontStyle !== SVG_DEFAULTS.fontStyle) { - current.tspan.setAttributeNS(null, "font-style", current.fontStyle); - } - if (current.fontWeight !== SVG_DEFAULTS.fontWeight) { - current.tspan.setAttributeNS(null, "font-weight", current.fontWeight); - } - const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; - if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - if (current.fillColor !== SVG_DEFAULTS.fillColor) { - current.tspan.setAttributeNS(null, "fill", current.fillColor); + continue; } - if (current.fillAlpha < 1) { - current.tspan.setAttributeNS(null, "fill-opacity", current.fillAlpha); + textContentItemsStr.push(item.str); + this.#appendText(item); + } + } + #appendText(geom) { + const textDiv = document.createElement("span"); + const textDivProperties = { + angle: 0, + canvasWidth: 0, + hasText: geom.str !== "", + hasEOL: geom.hasEOL, + fontSize: 0 + }; + this.#textDivs.push(textDiv); + const tx = Util.transform(this.#transform, geom.transform); + let angle = Math.atan2(tx[1], tx[0]); + const style = this.#styleCache[geom.fontName]; + if (style.vertical) { + angle += Math.PI / 2; + } + const fontFamily = this.#fontInspectorEnabled && style.fontSubstitution || style.fontFamily; + const fontHeight = Math.hypot(tx[2], tx[3]); + const fontAscent = fontHeight * TextLayer.#getAscent(fontFamily, this.#lang); + let left, top; + if (angle === 0) { + left = tx[4]; + top = tx[5] - fontAscent; + } else { + left = tx[4] + fontAscent * Math.sin(angle); + top = tx[5] - fontAscent * Math.cos(angle); + } + const scaleFactorStr = "calc(var(--scale-factor)*"; + const divStyle = textDiv.style; + if (this.#container === this.#rootContainer) { + divStyle.left = `${(100 * left / this.#pageWidth).toFixed(2)}%`; + divStyle.top = `${(100 * top / this.#pageHeight).toFixed(2)}%`; + } else { + divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`; + divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`; + } + divStyle.fontSize = `${scaleFactorStr}${fontHeight.toFixed(2)}px)`; + divStyle.fontFamily = fontFamily; + textDivProperties.fontSize = fontHeight; + textDiv.setAttribute("role", "presentation"); + textDiv.textContent = geom.str; + textDiv.dir = geom.dir; + if (this.#fontInspectorEnabled) { + textDiv.dataset.fontName = style.fontSubstitutionLoadedName || geom.fontName; + } + if (angle !== 0) { + textDivProperties.angle = angle * (180 / Math.PI); + } + let shouldScaleText = false; + if (geom.str.length > 1) { + shouldScaleText = true; + } else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) { + const absScaleX = Math.abs(geom.transform[0]), + absScaleY = Math.abs(geom.transform[3]); + if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) { + shouldScaleText = true; } - } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) { - current.tspan.setAttributeNS(null, "fill", "transparent"); - } else { - current.tspan.setAttributeNS(null, "fill", "none"); } - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - const lineWidthScale = 1 / (current.textMatrixScale || 1); - this._setStrokeAttributes(current.tspan, lineWidthScale); + if (shouldScaleText) { + textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width; } - let textMatrix = current.textMatrix; - if (current.textRise !== 0) { - textMatrix = textMatrix.slice(); - textMatrix[5] += current.textRise; + this.#textDivProperties.set(textDiv, textDivProperties); + this.#layoutTextParams.div = textDiv; + this.#layoutTextParams.properties = textDivProperties; + this.#layout(this.#layoutTextParams); + if (textDivProperties.hasText) { + this.#container.append(textDiv); } - current.txtElement.setAttributeNS(null, "transform", `${pm(textMatrix)} scale(${pf(textHScale)}, -1)`); - current.txtElement.setAttributeNS(XML_NS, "xml:space", "preserve"); - current.txtElement.append(current.tspan); - current.txtgrp.append(current.txtElement); - this._ensureTransformGroup().append(current.txtElement); - } - setLeadingMoveText(x, y) { - this.setLeading(-y); - this.moveText(x, y); - } - addFontStyle(fontObj) { - if (!fontObj.data) { - throw new Error("addFontStyle: No font data available, " + 'ensure that the "fontExtraProperties" API parameter is set.'); - } - if (!this.cssStyle) { - this.cssStyle = this.svgFactory.createElement("svg:style"); - this.cssStyle.setAttributeNS(null, "type", "text/css"); - this.defs.append(this.cssStyle); - } - const url = createObjectURL(fontObj.data, fontObj.mimetype, this.forceDataSchema); - this.cssStyle.textContent += `@font-face { font-family: "${fontObj.loadedName}";` + ` src: url(${url}); }\n`; - } - setFont(details) { - const current = this.current; - const fontObj = this.commonObjs.get(details[0]); - let size = details[1]; - current.font = fontObj; - if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) { - this.addFontStyle(fontObj); - this.embeddedFonts[fontObj.loadedName] = fontObj; - } - current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX; - let bold = "normal"; - if (fontObj.black) { - bold = "900"; - } else if (fontObj.bold) { - bold = "bold"; - } - const italic = fontObj.italic ? "italic" : "normal"; - if (size < 0) { - size = -size; - current.fontDirection = -1; - } else { - current.fontDirection = 1; - } - current.fontSize = size; - current.fontFamily = fontObj.loadedName; - current.fontWeight = bold; - current.fontStyle = italic; - current.tspan = this.svgFactory.createElement("svg:tspan"); - current.tspan.setAttributeNS(null, "y", pf(-current.y)); - current.xcoords = []; - current.ycoords = []; - } - endText() { - const current = this.current; - if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement?.hasChildNodes()) { - current.element = current.txtElement; - this.clip("nonzero"); - this.endPath(); + if (textDivProperties.hasEOL) { + const br = document.createElement("br"); + br.setAttribute("role", "presentation"); + this.#container.append(br); } } - setLineWidth(width) { - if (width > 0) { - this.current.lineWidth = width; - } - } - setLineCap(style) { - this.current.lineCap = LINE_CAP_STYLES[style]; - } - setLineJoin(style) { - this.current.lineJoin = LINE_JOIN_STYLES[style]; - } - setMiterLimit(limit) { - this.current.miterLimit = limit; - } - setStrokeAlpha(strokeAlpha) { - this.current.strokeAlpha = strokeAlpha; - } - setStrokeRGBColor(r, g, b) { - this.current.strokeColor = _util.Util.makeHexColor(r, g, b); - } - setFillAlpha(fillAlpha) { - this.current.fillAlpha = fillAlpha; - } - setFillRGBColor(r, g, b) { - this.current.fillColor = _util.Util.makeHexColor(r, g, b); - this.current.tspan = this.svgFactory.createElement("svg:tspan"); - this.current.xcoords = []; - this.current.ycoords = []; - } - setStrokeColorN(args) { - this.current.strokeColor = this._makeColorN_Pattern(args); - } - setFillColorN(args) { - this.current.fillColor = this._makeColorN_Pattern(args); - } - shadingFill(args) { + #layout(params) { const { - width, - height - } = this.viewport; - const inv = _util.Util.inverseTransform(this.transformMatrix); - const [x0, y0, x1, y1] = _util.Util.getAxialAlignedBoundingBox([0, 0, width, height], inv); - const rect = this.svgFactory.createElement("svg:rect"); - rect.setAttributeNS(null, "x", x0); - rect.setAttributeNS(null, "y", y0); - rect.setAttributeNS(null, "width", x1 - x0); - rect.setAttributeNS(null, "height", y1 - y0); - rect.setAttributeNS(null, "fill", this._makeShadingPattern(args)); - if (this.current.fillAlpha < 1) { - rect.setAttributeNS(null, "fill-opacity", this.current.fillAlpha); - } - this._ensureTransformGroup().append(rect); - } - _makeColorN_Pattern(args) { - if (args[0] === "TilingPattern") { - return this._makeTilingPattern(args); - } - return this._makeShadingPattern(args); - } - _makeTilingPattern(args) { - const color = args[1]; - const operatorList = args[2]; - const matrix = args[3] || _util.IDENTITY_MATRIX; - const [x0, y0, x1, y1] = args[4]; - const xstep = args[5]; - const ystep = args[6]; - const paintType = args[7]; - const tilingId = `shading${shadingCount++}`; - const [tx0, ty0, tx1, ty1] = _util.Util.normalizeRect([..._util.Util.applyTransform([x0, y0], matrix), ..._util.Util.applyTransform([x1, y1], matrix)]); - const [xscale, yscale] = _util.Util.singularValueDecompose2dScale(matrix); - const txstep = xstep * xscale; - const tystep = ystep * yscale; - const tiling = this.svgFactory.createElement("svg:pattern"); - tiling.setAttributeNS(null, "id", tilingId); - tiling.setAttributeNS(null, "patternUnits", "userSpaceOnUse"); - tiling.setAttributeNS(null, "width", txstep); - tiling.setAttributeNS(null, "height", tystep); - tiling.setAttributeNS(null, "x", `${tx0}`); - tiling.setAttributeNS(null, "y", `${ty0}`); - const svg = this.svg; - const transformMatrix = this.transformMatrix; - const fillColor = this.current.fillColor; - const strokeColor = this.current.strokeColor; - const bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0); - this.svg = bbox; - this.transformMatrix = matrix; - if (paintType === 2) { - const cssColor = _util.Util.makeHexColor(...color); - this.current.fillColor = cssColor; - this.current.strokeColor = cssColor; - } - this.executeOpTree(this.convertOpList(operatorList)); - this.svg = svg; - this.transformMatrix = transformMatrix; - this.current.fillColor = fillColor; - this.current.strokeColor = strokeColor; - tiling.append(bbox.childNodes[0]); - this.defs.append(tiling); - return `url(#${tilingId})`; - } - _makeShadingPattern(args) { - if (typeof args === "string") { - args = this.objs.get(args); - } - switch (args[0]) { - case "RadialAxial": - const shadingId = `shading${shadingCount++}`; - const colorStops = args[3]; - let gradient; - switch (args[1]) { - case "axial": - const point0 = args[4]; - const point1 = args[5]; - gradient = this.svgFactory.createElement("svg:linearGradient"); - gradient.setAttributeNS(null, "id", shadingId); - gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse"); - gradient.setAttributeNS(null, "x1", point0[0]); - gradient.setAttributeNS(null, "y1", point0[1]); - gradient.setAttributeNS(null, "x2", point1[0]); - gradient.setAttributeNS(null, "y2", point1[1]); - break; - case "radial": - const focalPoint = args[4]; - const circlePoint = args[5]; - const focalRadius = args[6]; - const circleRadius = args[7]; - gradient = this.svgFactory.createElement("svg:radialGradient"); - gradient.setAttributeNS(null, "id", shadingId); - gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse"); - gradient.setAttributeNS(null, "cx", circlePoint[0]); - gradient.setAttributeNS(null, "cy", circlePoint[1]); - gradient.setAttributeNS(null, "r", circleRadius); - gradient.setAttributeNS(null, "fx", focalPoint[0]); - gradient.setAttributeNS(null, "fy", focalPoint[1]); - gradient.setAttributeNS(null, "fr", focalRadius); - break; - default: - throw new Error(`Unknown RadialAxial type: ${args[1]}`); - } - for (const colorStop of colorStops) { - const stop = this.svgFactory.createElement("svg:stop"); - stop.setAttributeNS(null, "offset", colorStop[0]); - stop.setAttributeNS(null, "stop-color", colorStop[1]); - gradient.append(stop); - } - this.defs.append(gradient); - return `url(#${shadingId})`; - case "Mesh": - (0, _util.warn)("Unimplemented pattern Mesh"); - return null; - case "Dummy": - return "hotpink"; - default: - throw new Error(`Unknown IR type: ${args[0]}`); - } - } - setDash(dashArray, dashPhase) { - this.current.dashArray = dashArray; - this.current.dashPhase = dashPhase; - } - constructPath(ops, args) { - const current = this.current; - let x = current.x, - y = current.y; - let d = []; - let j = 0; - for (const op of ops) { - switch (op | 0) { - case _util.OPS.rectangle: - x = args[j++]; - y = args[j++]; - const width = args[j++]; - const height = args[j++]; - const xw = x + width; - const yh = y + height; - d.push("M", pf(x), pf(y), "L", pf(xw), pf(y), "L", pf(xw), pf(yh), "L", pf(x), pf(yh), "Z"); - break; - case _util.OPS.moveTo: - x = args[j++]; - y = args[j++]; - d.push("M", pf(x), pf(y)); - break; - case _util.OPS.lineTo: - x = args[j++]; - y = args[j++]; - d.push("L", pf(x), pf(y)); - break; - case _util.OPS.curveTo: - x = args[j + 4]; - y = args[j + 5]; - d.push("C", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y)); - j += 6; - break; - case _util.OPS.curveTo2: - d.push("C", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3])); - x = args[j + 2]; - y = args[j + 3]; - j += 4; - break; - case _util.OPS.curveTo3: - x = args[j + 2]; - y = args[j + 3]; - d.push("C", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y)); - j += 4; - break; - case _util.OPS.closePath: - d.push("Z"); - break; + div, + properties, + ctx, + prevFontSize, + prevFontFamily + } = params; + const { + style + } = div; + let transform = ""; + if (properties.canvasWidth !== 0 && properties.hasText) { + const { + fontFamily + } = style; + const { + canvasWidth, + fontSize + } = properties; + if (prevFontSize !== fontSize || prevFontFamily !== fontFamily) { + ctx.font = `${fontSize * this.#scale}px ${fontFamily}`; + params.prevFontSize = fontSize; + params.prevFontFamily = fontFamily; + } + const { + width + } = ctx.measureText(div.textContent); + if (width > 0) { + transform = `scaleX(${canvasWidth * this.#scale / width})`; } } - d = d.join(" "); - if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) { - d = current.path.getAttributeNS(null, "d") + d; - } else { - current.path = this.svgFactory.createElement("svg:path"); - this._ensureTransformGroup().append(current.path); + if (properties.angle !== 0) { + transform = `rotate(${properties.angle}deg) ${transform}`; + } + if (transform.length > 0) { + style.transform = transform; } - current.path.setAttributeNS(null, "d", d); - current.path.setAttributeNS(null, "fill", "none"); - current.element = current.path; - current.setCurrentPoint(x, y); } - endPath() { - const current = this.current; - current.path = null; - if (!this.pendingClip) { + static cleanup() { + if (this.#pendingTextLayers.size > 0) { return; } - if (!current.element) { - this.pendingClip = null; - return; - } - const clipId = `clippath${clipCount++}`; - const clipPath = this.svgFactory.createElement("svg:clipPath"); - clipPath.setAttributeNS(null, "id", clipId); - clipPath.setAttributeNS(null, "transform", pm(this.transformMatrix)); - const clipElement = current.element.cloneNode(true); - if (this.pendingClip === "evenodd") { - clipElement.setAttributeNS(null, "clip-rule", "evenodd"); - } else { - clipElement.setAttributeNS(null, "clip-rule", "nonzero"); - } - this.pendingClip = null; - clipPath.append(clipElement); - this.defs.append(clipPath); - if (current.activeClipUrl) { - current.clipGroup = null; - for (const prev of this.extraStack) { - prev.clipGroup = null; - } - clipPath.setAttributeNS(null, "clip-path", current.activeClipUrl); - } - current.activeClipUrl = `url(#${clipId})`; - this.tgrp = null; + this.#ascentCache.clear(); + this.#canvasCtx?.canvas.remove(); + this.#canvasCtx = null; } - clip(type) { - this.pendingClip = type; - } - closePath() { - const current = this.current; - if (current.path) { - const d = `${current.path.getAttributeNS(null, "d")}Z`; - current.path.setAttributeNS(null, "d", d); - } - } - setLeading(leading) { - this.current.leading = -leading; - } - setTextRise(textRise) { - this.current.textRise = textRise; - } - setTextRenderingMode(textRenderingMode) { - this.current.textRenderingMode = textRenderingMode; - } - setHScale(scale) { - this.current.textHScale = scale / 100; - } - setRenderingIntent(intent) {} - setFlatness(flatness) {} - setGState(states) { - for (const [key, value] of states) { - switch (key) { - case "LW": - this.setLineWidth(value); - break; - case "LC": - this.setLineCap(value); - break; - case "LJ": - this.setLineJoin(value); - break; - case "ML": - this.setMiterLimit(value); - break; - case "D": - this.setDash(value[0], value[1]); - break; - case "RI": - this.setRenderingIntent(value); - break; - case "FL": - this.setFlatness(value); - break; - case "Font": - this.setFont(value); - break; - case "CA": - this.setStrokeAlpha(value); - break; - case "ca": - this.setFillAlpha(value); - break; - default: - (0, _util.warn)(`Unimplemented graphic state operator ${key}`); - break; - } - } - } - fill() { - const current = this.current; - if (current.element) { - current.element.setAttributeNS(null, "fill", current.fillColor); - current.element.setAttributeNS(null, "fill-opacity", current.fillAlpha); - this.endPath(); - } - } - stroke() { - const current = this.current; - if (current.element) { - this._setStrokeAttributes(current.element); - current.element.setAttributeNS(null, "fill", "none"); - this.endPath(); - } - } - _setStrokeAttributes(element, lineWidthScale = 1) { - const current = this.current; - let dashArray = current.dashArray; - if (lineWidthScale !== 1 && dashArray.length > 0) { - dashArray = dashArray.map(function (value) { - return lineWidthScale * value; + static #getCtx(lang = null) { + if (!this.#canvasCtx) { + const canvas = document.createElement("canvas"); + canvas.className = "hiddenCanvasElement"; + document.body.append(canvas); + this.#canvasCtx = canvas.getContext("2d", { + alpha: false }); } - element.setAttributeNS(null, "stroke", current.strokeColor); - element.setAttributeNS(null, "stroke-opacity", current.strokeAlpha); - element.setAttributeNS(null, "stroke-miterlimit", pf(current.miterLimit)); - element.setAttributeNS(null, "stroke-linecap", current.lineCap); - element.setAttributeNS(null, "stroke-linejoin", current.lineJoin); - element.setAttributeNS(null, "stroke-width", pf(lineWidthScale * current.lineWidth) + "px"); - element.setAttributeNS(null, "stroke-dasharray", dashArray.map(pf).join(" ")); - element.setAttributeNS(null, "stroke-dashoffset", pf(lineWidthScale * current.dashPhase) + "px"); + return this.#canvasCtx; } - eoFill() { - this.current.element?.setAttributeNS(null, "fill-rule", "evenodd"); - this.fill(); - } - fillStroke() { - this.stroke(); - this.fill(); - } - eoFillStroke() { - this.current.element?.setAttributeNS(null, "fill-rule", "evenodd"); - this.fillStroke(); - } - closeStroke() { - this.closePath(); - this.stroke(); - } - closeFillStroke() { - this.closePath(); - this.fillStroke(); - } - closeEOFillStroke() { - this.closePath(); - this.eoFillStroke(); - } - paintSolidColorImageMask() { - const rect = this.svgFactory.createElement("svg:rect"); - rect.setAttributeNS(null, "x", "0"); - rect.setAttributeNS(null, "y", "0"); - rect.setAttributeNS(null, "width", "1px"); - rect.setAttributeNS(null, "height", "1px"); - rect.setAttributeNS(null, "fill", this.current.fillColor); - this._ensureTransformGroup().append(rect); - } - paintImageXObject(objId) { - const imgData = this.getObject(objId); - if (!imgData) { - (0, _util.warn)(`Dependent image with object ID ${objId} is not ready yet`); - return; + static #getAscent(fontFamily, lang) { + const cachedAscent = this.#ascentCache.get(fontFamily); + if (cachedAscent) { + return cachedAscent; } - this.paintInlineImageXObject(imgData); - } - paintInlineImageXObject(imgData, mask) { - const width = imgData.width; - const height = imgData.height; - const imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask); - const cliprect = this.svgFactory.createElement("svg:rect"); - cliprect.setAttributeNS(null, "x", "0"); - cliprect.setAttributeNS(null, "y", "0"); - cliprect.setAttributeNS(null, "width", pf(width)); - cliprect.setAttributeNS(null, "height", pf(height)); - this.current.element = cliprect; - this.clip("nonzero"); - const imgEl = this.svgFactory.createElement("svg:image"); - imgEl.setAttributeNS(XLINK_NS, "xlink:href", imgSrc); - imgEl.setAttributeNS(null, "x", "0"); - imgEl.setAttributeNS(null, "y", pf(-height)); - imgEl.setAttributeNS(null, "width", pf(width) + "px"); - imgEl.setAttributeNS(null, "height", pf(height) + "px"); - imgEl.setAttributeNS(null, "transform", `scale(${pf(1 / width)} ${pf(-1 / height)})`); - if (mask) { - mask.append(imgEl); - } else { - this._ensureTransformGroup().append(imgEl); + const ctx = this.#getCtx(lang); + const savedFont = ctx.font; + ctx.canvas.width = ctx.canvas.height = DEFAULT_FONT_SIZE; + ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`; + const metrics = ctx.measureText(""); + let ascent = metrics.fontBoundingBoxAscent; + let descent = Math.abs(metrics.fontBoundingBoxDescent); + if (ascent) { + const ratio = ascent / (ascent + descent); + this.#ascentCache.set(fontFamily, ratio); + ctx.canvas.width = ctx.canvas.height = 0; + ctx.font = savedFont; + return ratio; } - } - paintImageMaskXObject(img) { - const imgData = this.getObject(img.data, img); - if (imgData.bitmap) { - (0, _util.warn)("paintImageMaskXObject: ImageBitmap support is not implemented, " + "ensure that the `isOffscreenCanvasSupported` API parameter is disabled."); - return; - } - const current = this.current; - const width = imgData.width; - const height = imgData.height; - const fillColor = current.fillColor; - current.maskId = `mask${maskCount++}`; - const mask = this.svgFactory.createElement("svg:mask"); - mask.setAttributeNS(null, "id", current.maskId); - const rect = this.svgFactory.createElement("svg:rect"); - rect.setAttributeNS(null, "x", "0"); - rect.setAttributeNS(null, "y", "0"); - rect.setAttributeNS(null, "width", pf(width)); - rect.setAttributeNS(null, "height", pf(height)); - rect.setAttributeNS(null, "fill", fillColor); - rect.setAttributeNS(null, "mask", `url(#${current.maskId})`); - this.defs.append(mask); - this._ensureTransformGroup().append(rect); - this.paintInlineImageXObject(imgData, mask); - } - paintFormXObjectBegin(matrix, bbox) { - if (Array.isArray(matrix) && matrix.length === 6) { - this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]); - } - if (bbox) { - const width = bbox[2] - bbox[0]; - const height = bbox[3] - bbox[1]; - const cliprect = this.svgFactory.createElement("svg:rect"); - cliprect.setAttributeNS(null, "x", bbox[0]); - cliprect.setAttributeNS(null, "y", bbox[1]); - cliprect.setAttributeNS(null, "width", pf(width)); - cliprect.setAttributeNS(null, "height", pf(height)); - this.current.element = cliprect; - this.clip("nonzero"); - this.endPath(); - } - } - paintFormXObjectEnd() {} - _initialize(viewport) { - const svg = this.svgFactory.create(viewport.width, viewport.height); - const definitions = this.svgFactory.createElement("svg:defs"); - svg.append(definitions); - this.defs = definitions; - const rootGroup = this.svgFactory.createElement("svg:g"); - rootGroup.setAttributeNS(null, "transform", pm(viewport.transform)); - svg.append(rootGroup); - this.svg = rootGroup; - return svg; - } - _ensureClipGroup() { - if (!this.current.clipGroup) { - const clipGroup = this.svgFactory.createElement("svg:g"); - clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl); - this.svg.append(clipGroup); - this.current.clipGroup = clipGroup; - } - return this.current.clipGroup; - } - _ensureTransformGroup() { - if (!this.tgrp) { - this.tgrp = this.svgFactory.createElement("svg:g"); - this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix)); - if (this.current.activeClipUrl) { - this._ensureClipGroup().append(this.tgrp); - } else { - this.svg.append(this.tgrp); + ctx.strokeStyle = "red"; + ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); + ctx.strokeText("g", 0, 0); + let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; + descent = 0; + for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) { + if (pixels[i] > 0) { + descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE); + break; } } - return this.tgrp; + ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); + ctx.strokeText("A", 0, DEFAULT_FONT_SIZE); + pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; + ascent = 0; + for (let i = 0, ii = pixels.length; i < ii; i += 4) { + if (pixels[i] > 0) { + ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE); + break; + } + } + ctx.canvas.width = ctx.canvas.height = 0; + ctx.font = savedFont; + const ratio = ascent ? ascent / (ascent + descent) : DEFAULT_FONT_ASCENT; + this.#ascentCache.set(fontFamily, ratio); + return ratio; } } -exports.SVGGraphics = SVGGraphics; +function renderTextLayer() { + deprecated("`renderTextLayer`, please use `TextLayer` instead."); + const { + textContentSource, + container, + viewport, + ...rest + } = arguments[0]; + const restKeys = Object.keys(rest); + if (restKeys.length > 0) { + warn("Ignoring `renderTextLayer` parameters: " + restKeys.join(", ")); + } + const textLayer = new TextLayer({ + textContentSource, + container, + viewport + }); + const { + textDivs, + textContentItemsStr + } = textLayer; + const promise = textLayer.render(); + return { + promise, + textDivs, + textContentItemsStr + }; +} +function updateTextLayer() { + deprecated("`updateTextLayer`, please use `TextLayer` instead."); +} -/***/ }), -/* 25 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XfaText = void 0; +;// CONCATENATED MODULE: ./src/display/xfa_text.js class XfaText { static textContent(xfa) { const items = []; @@ -12452,1401 +10609,2169 @@ class XfaText { return !(name === "textarea" || name === "input" || name === "option" || name === "select"); } } -exports.XfaText = XfaText; -/***/ }), -/* 26 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +;// CONCATENATED MODULE: ./src/display/api.js -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.TextLayerRenderTask = void 0; -exports.renderTextLayer = renderTextLayer; -exports.updateTextLayer = updateTextLayer; -var _util = __w_pdfjs_require__(1); -var _display_utils = __w_pdfjs_require__(6); -const MAX_TEXT_DIVS_TO_RENDER = 100000; -const DEFAULT_FONT_SIZE = 30; -const DEFAULT_FONT_ASCENT = 0.8; -const ascentCache = new Map(); -function getCtx(size, isOffscreenCanvasSupported) { - let ctx; - if (isOffscreenCanvasSupported && _util.FeatureTest.isOffscreenCanvasSupported) { - ctx = new OffscreenCanvas(size, size).getContext("2d", { - alpha: false - }); - } else { - const canvas = document.createElement("canvas"); - canvas.width = canvas.height = size; - ctx = canvas.getContext("2d", { - alpha: false - }); - } - return ctx; -} -function getAscent(fontFamily, isOffscreenCanvasSupported) { - const cachedAscent = ascentCache.get(fontFamily); - if (cachedAscent) { - return cachedAscent; - } - const ctx = getCtx(DEFAULT_FONT_SIZE, isOffscreenCanvasSupported); - ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`; - const metrics = ctx.measureText(""); - let ascent = metrics.fontBoundingBoxAscent; - let descent = Math.abs(metrics.fontBoundingBoxDescent); - if (ascent) { - const ratio = ascent / (ascent + descent); - ascentCache.set(fontFamily, ratio); - ctx.canvas.width = ctx.canvas.height = 0; - return ratio; - } - ctx.strokeStyle = "red"; - ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); - ctx.strokeText("g", 0, 0); - let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; - descent = 0; - for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) { - if (pixels[i] > 0) { - descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE); - break; - } - } - ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); - ctx.strokeText("A", 0, DEFAULT_FONT_SIZE); - pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; - ascent = 0; - for (let i = 0, ii = pixels.length; i < ii; i += 4) { - if (pixels[i] > 0) { - ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE); - break; - } - } - ctx.canvas.width = ctx.canvas.height = 0; - if (ascent) { - const ratio = ascent / (ascent + descent); - ascentCache.set(fontFamily, ratio); - return ratio; - } - ascentCache.set(fontFamily, DEFAULT_FONT_ASCENT); - return DEFAULT_FONT_ASCENT; -} -function appendText(task, geom, styles) { - const textDiv = document.createElement("span"); - const textDivProperties = { - angle: 0, - canvasWidth: 0, - hasText: geom.str !== "", - hasEOL: geom.hasEOL, - fontSize: 0 - }; - task._textDivs.push(textDiv); - const tx = _util.Util.transform(task._transform, geom.transform); - let angle = Math.atan2(tx[1], tx[0]); - const style = styles[geom.fontName]; - if (style.vertical) { - angle += Math.PI / 2; - } - const fontHeight = Math.hypot(tx[2], tx[3]); - const fontAscent = fontHeight * getAscent(style.fontFamily, task._isOffscreenCanvasSupported); - let left, top; - if (angle === 0) { - left = tx[4]; - top = tx[5] - fontAscent; - } else { - left = tx[4] + fontAscent * Math.sin(angle); - top = tx[5] - fontAscent * Math.cos(angle); - } - const scaleFactorStr = "calc(var(--scale-factor)*"; - const divStyle = textDiv.style; - if (task._container === task._rootContainer) { - divStyle.left = `${(100 * left / task._pageWidth).toFixed(2)}%`; - divStyle.top = `${(100 * top / task._pageHeight).toFixed(2)}%`; - } else { - divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`; - divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`; - } - divStyle.fontSize = `${scaleFactorStr}${fontHeight.toFixed(2)}px)`; - divStyle.fontFamily = style.fontFamily; - textDivProperties.fontSize = fontHeight; - textDiv.setAttribute("role", "presentation"); - textDiv.textContent = geom.str; - textDiv.dir = geom.dir; - if (task._fontInspectorEnabled) { - textDiv.dataset.fontName = geom.fontName; - } - if (angle !== 0) { - textDivProperties.angle = angle * (180 / Math.PI); - } - let shouldScaleText = false; - if (geom.str.length > 1) { - shouldScaleText = true; - } else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) { - const absScaleX = Math.abs(geom.transform[0]), - absScaleY = Math.abs(geom.transform[3]); - if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) { - shouldScaleText = true; - } - } - if (shouldScaleText) { - textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width; - } - task._textDivProperties.set(textDiv, textDivProperties); - if (task._isReadableStream) { - task._layoutText(textDiv); - } -} -function layout(params) { - const { - div, - scale, - properties, - ctx, - prevFontSize, - prevFontFamily - } = params; - const { - style - } = div; - let transform = ""; - if (properties.canvasWidth !== 0 && properties.hasText) { - const { - fontFamily - } = style; - const { - canvasWidth, - fontSize - } = properties; - if (prevFontSize !== fontSize || prevFontFamily !== fontFamily) { - ctx.font = `${fontSize * scale}px ${fontFamily}`; - params.prevFontSize = fontSize; - params.prevFontFamily = fontFamily; - } - const { - width - } = ctx.measureText(div.textContent); - if (width > 0) { - transform = `scaleX(${canvasWidth * scale / width})`; - } - } - if (properties.angle !== 0) { - transform = `rotate(${properties.angle}deg) ${transform}`; - } - if (transform.length > 0) { - style.transform = transform; - } -} -function render(task) { - if (task._canceled) { - return; - } - const textDivs = task._textDivs; - const capability = task._capability; - const textDivsLength = textDivs.length; - if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { - capability.resolve(); - return; - } - if (!task._isReadableStream) { - for (const textDiv of textDivs) { - task._layoutText(textDiv); - } - } - capability.resolve(); -} -class TextLayerRenderTask { - constructor({ - textContentSource, - container, - viewport, - textDivs, - textDivProperties, - textContentItemsStr, - isOffscreenCanvasSupported - }) { - this._textContentSource = textContentSource; - this._isReadableStream = textContentSource instanceof ReadableStream; - this._container = this._rootContainer = container; - this._textDivs = textDivs || []; - this._textContentItemsStr = textContentItemsStr || []; - this._isOffscreenCanvasSupported = isOffscreenCanvasSupported; - this._fontInspectorEnabled = !!globalThis.FontInspector?.enabled; - this._reader = null; - this._textDivProperties = textDivProperties || new WeakMap(); - this._canceled = false; - this._capability = new _util.PromiseCapability(); - this._layoutTextParams = { - prevFontSize: null, - prevFontFamily: null, - div: null, - scale: viewport.scale * (globalThis.devicePixelRatio || 1), - properties: null, - ctx: getCtx(0, isOffscreenCanvasSupported) + + + + + + + + + + + + + +const DEFAULT_RANGE_CHUNK_SIZE = 65536; +const RENDERING_CANCELLED_TIMEOUT = 100; +const DELAYED_CLEANUP_TIMEOUT = 5000; +const DefaultCanvasFactory = isNodeJS ? NodeCanvasFactory : DOMCanvasFactory; +const DefaultCMapReaderFactory = isNodeJS ? NodeCMapReaderFactory : DOMCMapReaderFactory; +const DefaultFilterFactory = isNodeJS ? NodeFilterFactory : DOMFilterFactory; +const DefaultStandardFontDataFactory = isNodeJS ? NodeStandardFontDataFactory : DOMStandardFontDataFactory; +function getDocument(src) { + if (typeof src === "string" || src instanceof URL) { + src = { + url: src }; - const { - pageWidth, - pageHeight, - pageX, - pageY - } = viewport.rawDims; - this._transform = [1, 0, 0, -1, -pageX, pageY + pageHeight]; - this._pageWidth = pageWidth; - this._pageHeight = pageHeight; - (0, _display_utils.setLayerDimensions)(container, viewport); - this._capability.promise.finally(() => { - this._layoutTextParams = null; - }).catch(() => {}); + } else if (src instanceof ArrayBuffer || ArrayBuffer.isView(src)) { + src = { + data: src + }; + } + if (typeof src !== "object") { + throw new Error("Invalid parameter in getDocument, need parameter object."); + } + if (!src.url && !src.data && !src.range) { + throw new Error("Invalid parameter object: need either .data, .range or .url"); + } + const task = new PDFDocumentLoadingTask(); + const { + docId + } = task; + const url = src.url ? getUrlProp(src.url) : null; + const data = src.data ? getDataProp(src.data) : null; + const httpHeaders = src.httpHeaders || null; + const withCredentials = src.withCredentials === true; + const password = src.password ?? null; + const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null; + const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : DEFAULT_RANGE_CHUNK_SIZE; + let worker = src.worker instanceof PDFWorker ? src.worker : null; + const verbosity = src.verbosity; + const docBaseUrl = typeof src.docBaseUrl === "string" && !isDataScheme(src.docBaseUrl) ? src.docBaseUrl : null; + const cMapUrl = typeof src.cMapUrl === "string" ? src.cMapUrl : null; + const cMapPacked = src.cMapPacked !== false; + const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory; + const standardFontDataUrl = typeof src.standardFontDataUrl === "string" ? src.standardFontDataUrl : null; + const StandardFontDataFactory = src.StandardFontDataFactory || DefaultStandardFontDataFactory; + const ignoreErrors = src.stopAtErrors !== true; + const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1; + const isEvalSupported = src.isEvalSupported !== false; + const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !isNodeJS; + const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1; + const disableFontFace = typeof src.disableFontFace === "boolean" ? src.disableFontFace : isNodeJS; + const fontExtraProperties = src.fontExtraProperties === true; + const enableXfa = src.enableXfa === true; + const ownerDocument = src.ownerDocument || globalThis.document; + const disableRange = src.disableRange === true; + const disableStream = src.disableStream === true; + const disableAutoFetch = src.disableAutoFetch === true; + const pdfBug = src.pdfBug === true; + const length = rangeTransport ? rangeTransport.length : src.length ?? NaN; + const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !isNodeJS && !disableFontFace; + const useWorkerFetch = typeof src.useWorkerFetch === "boolean" ? src.useWorkerFetch : CMapReaderFactory === DOMCMapReaderFactory && StandardFontDataFactory === DOMStandardFontDataFactory && cMapUrl && standardFontDataUrl && isValidFetchUrl(cMapUrl, document.baseURI) && isValidFetchUrl(standardFontDataUrl, document.baseURI); + const canvasFactory = src.canvasFactory || new DefaultCanvasFactory({ + ownerDocument + }); + const filterFactory = src.filterFactory || new DefaultFilterFactory({ + docId, + ownerDocument + }); + const styleElement = null; + setVerbosityLevel(verbosity); + const transportFactory = { + canvasFactory, + filterFactory + }; + if (!useWorkerFetch) { + transportFactory.cMapReaderFactory = new CMapReaderFactory({ + baseUrl: cMapUrl, + isCompressed: cMapPacked + }); + transportFactory.standardFontDataFactory = new StandardFontDataFactory({ + baseUrl: standardFontDataUrl + }); + } + if (!worker) { + const workerParams = { + verbosity, + port: GlobalWorkerOptions.workerPort + }; + worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); + task._worker = worker; + } + const docParams = { + docId, + apiVersion: "4.3.98", + data, + password, + disableAutoFetch, + rangeChunkSize, + length, + docBaseUrl, + enableXfa, + evaluatorOptions: { + maxImageSize, + disableFontFace, + ignoreErrors, + isEvalSupported, + isOffscreenCanvasSupported, + canvasMaxAreaInBytes, + fontExtraProperties, + useSystemFonts, + cMapUrl: useWorkerFetch ? cMapUrl : null, + standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null + } + }; + const transportParams = { + disableFontFace, + fontExtraProperties, + enableXfa, + ownerDocument, + disableAutoFetch, + pdfBug, + styleElement + }; + worker.promise.then(function () { + if (task.destroyed) { + throw new Error("Loading aborted"); + } + if (worker.destroyed) { + throw new Error("Worker was destroyed"); + } + const workerIdPromise = worker.messageHandler.sendWithPromise("GetDocRequest", docParams, data ? [data.buffer] : null); + let networkStream; + if (rangeTransport) { + networkStream = new PDFDataTransportStream(rangeTransport, { + disableRange, + disableStream + }); + } else if (!data) { + const createPDFNetworkStream = params => { + if (isNodeJS) { + const isFetchSupported = function () { + return typeof fetch !== "undefined" && typeof Response !== "undefined" && "body" in Response.prototype; + }; + return isFetchSupported() && isValidFetchUrl(params.url) ? new PDFFetchStream(params) : new PDFNodeStream(params); + } + return isValidFetchUrl(params.url) ? new PDFFetchStream(params) : new PDFNetworkStream(params); + }; + networkStream = createPDFNetworkStream({ + url, + length, + httpHeaders, + withCredentials, + rangeChunkSize, + disableRange, + disableStream + }); + } + return workerIdPromise.then(workerId => { + if (task.destroyed) { + throw new Error("Loading aborted"); + } + if (worker.destroyed) { + throw new Error("Worker was destroyed"); + } + const messageHandler = new MessageHandler(docId, workerId, worker.port); + const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory); + task._transport = transport; + messageHandler.send("Ready", null); + }); + }).catch(task._capability.reject); + return task; +} +function getUrlProp(val) { + if (val instanceof URL) { + return val.href; + } + try { + return new URL(val, window.location).href; + } catch { + if (isNodeJS && typeof val === "string") { + return val; + } + } + throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property."); +} +function getDataProp(val) { + if (isNodeJS && typeof Buffer !== "undefined" && val instanceof Buffer) { + throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`."); + } + if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) { + return val; + } + if (typeof val === "string") { + return stringToBytes(val); + } + if (val instanceof ArrayBuffer || ArrayBuffer.isView(val) || typeof val === "object" && !isNaN(val?.length)) { + return new Uint8Array(val); + } + throw new Error("Invalid PDF binary data: either TypedArray, " + "string, or array-like object is expected in the data property."); +} +function isRefProxy(ref) { + return typeof ref === "object" && Number.isInteger(ref?.num) && ref.num >= 0 && Number.isInteger(ref?.gen) && ref.gen >= 0; +} +class PDFDocumentLoadingTask { + static #docId = 0; + constructor() { + this._capability = Promise.withResolvers(); + this._transport = null; + this._worker = null; + this.docId = `d${PDFDocumentLoadingTask.#docId++}`; + this.destroyed = false; + this.onPassword = null; + this.onProgress = null; } get promise() { return this._capability.promise; } - cancel() { - this._canceled = true; - if (this._reader) { - this._reader.cancel(new _util.AbortException("TextLayer task cancelled.")).catch(() => {}); - this._reader = null; - } - this._capability.reject(new _util.AbortException("TextLayer task cancelled.")); - } - _processItems(items, styleCache) { - for (const item of items) { - if (item.str === undefined) { - if (item.type === "beginMarkedContentProps" || item.type === "beginMarkedContent") { - const parent = this._container; - this._container = document.createElement("span"); - this._container.classList.add("markedContent"); - if (item.id !== null) { - this._container.setAttribute("id", `${item.id}`); - } - parent.append(this._container); - } else if (item.type === "endMarkedContent") { - this._container = this._container.parentNode; - } - continue; + async destroy() { + this.destroyed = true; + try { + if (this._worker?.port) { + this._worker._pendingDestroy = true; } - this._textContentItemsStr.push(item.str); - appendText(this, item, styleCache); + await this._transport?.destroy(); + } catch (ex) { + if (this._worker?.port) { + delete this._worker._pendingDestroy; + } + throw ex; } - } - _layoutText(textDiv) { - const textDivProperties = this._layoutTextParams.properties = this._textDivProperties.get(textDiv); - this._layoutTextParams.div = textDiv; - layout(this._layoutTextParams); - if (textDivProperties.hasText) { - this._container.append(textDiv); - } - if (textDivProperties.hasEOL) { - const br = document.createElement("br"); - br.setAttribute("role", "presentation"); - this._container.append(br); - } - } - _render() { - const capability = new _util.PromiseCapability(); - let styleCache = Object.create(null); - if (this._isReadableStream) { - const pump = () => { - this._reader.read().then(({ - value, - done - }) => { - if (done) { - capability.resolve(); - return; - } - Object.assign(styleCache, value.styles); - this._processItems(value.items, styleCache); - pump(); - }, capability.reject); - }; - this._reader = this._textContentSource.getReader(); - pump(); - } else if (this._textContentSource) { - const { - items, - styles - } = this._textContentSource; - this._processItems(items, styles); - capability.resolve(); - } else { - throw new Error('No "textContentSource" parameter specified.'); - } - capability.promise.then(() => { - styleCache = null; - render(this); - }, this._capability.reject); - } -} -exports.TextLayerRenderTask = TextLayerRenderTask; -function renderTextLayer(params) { - if (!params.textContentSource && (params.textContent || params.textContentStream)) { - (0, _display_utils.deprecated)("The TextLayerRender `textContent`/`textContentStream` parameters " + "will be removed in the future, please use `textContentSource` instead."); - params.textContentSource = params.textContent || params.textContentStream; - } - const { - container, - viewport - } = params; - const style = getComputedStyle(container); - const visibility = style.getPropertyValue("visibility"); - const scaleFactor = parseFloat(style.getPropertyValue("--scale-factor")); - if (visibility === "visible" && (!scaleFactor || Math.abs(scaleFactor - viewport.scale) > 1e-5)) { - console.error("The `--scale-factor` CSS-variable must be set, " + "to the same value as `viewport.scale`, " + "either on the `container`-element itself or higher up in the DOM."); - } - const task = new TextLayerRenderTask(params); - task._render(); - return task; -} -function updateTextLayer({ - container, - viewport, - textDivs, - textDivProperties, - isOffscreenCanvasSupported, - mustRotate = true, - mustRescale = true -}) { - if (mustRotate) { - (0, _display_utils.setLayerDimensions)(container, { - rotation: viewport.rotation - }); - } - if (mustRescale) { - const ctx = getCtx(0, isOffscreenCanvasSupported); - const scale = viewport.scale * (globalThis.devicePixelRatio || 1); - const params = { - prevFontSize: null, - prevFontFamily: null, - div: null, - scale, - properties: null, - ctx - }; - for (const div of textDivs) { - params.properties = textDivProperties.get(div); - params.div = div; - layout(params); + this._transport = null; + if (this._worker) { + this._worker.destroy(); + this._worker = null; } } } - -/***/ }), -/* 27 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.AnnotationEditorLayer = void 0; -var _util = __w_pdfjs_require__(1); -var _editor = __w_pdfjs_require__(4); -var _freetext = __w_pdfjs_require__(28); -var _ink = __w_pdfjs_require__(33); -var _display_utils = __w_pdfjs_require__(6); -var _stamp = __w_pdfjs_require__(34); -class AnnotationEditorLayer { - #accessibilityManager; - #allowClick = false; - #annotationLayer = null; - #boundPointerup = this.pointerup.bind(this); - #boundPointerdown = this.pointerdown.bind(this); - #editors = new Map(); - #hadPointerDown = false; - #isCleaningUp = false; - #isDisabling = false; - #uiManager; - static _initialized = false; - constructor({ - uiManager, - pageIndex, - div, - accessibilityManager, - annotationLayer, - viewport, - l10n - }) { - const editorTypes = [_freetext.FreeTextEditor, _ink.InkEditor, _stamp.StampEditor]; - if (!AnnotationEditorLayer._initialized) { - AnnotationEditorLayer._initialized = true; - for (const editorType of editorTypes) { - editorType.initialize(l10n); +class PDFDataRangeTransport { + constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) { + this.length = length; + this.initialData = initialData; + this.progressiveDone = progressiveDone; + this.contentDispositionFilename = contentDispositionFilename; + this._rangeListeners = []; + this._progressListeners = []; + this._progressiveReadListeners = []; + this._progressiveDoneListeners = []; + this._readyCapability = Promise.withResolvers(); + } + addRangeListener(listener) { + this._rangeListeners.push(listener); + } + addProgressListener(listener) { + this._progressListeners.push(listener); + } + addProgressiveReadListener(listener) { + this._progressiveReadListeners.push(listener); + } + addProgressiveDoneListener(listener) { + this._progressiveDoneListeners.push(listener); + } + onDataRange(begin, chunk) { + for (const listener of this._rangeListeners) { + listener(begin, chunk); + } + } + onDataProgress(loaded, total) { + this._readyCapability.promise.then(() => { + for (const listener of this._progressListeners) { + listener(loaded, total); } - } - uiManager.registerEditorTypes(editorTypes); - this.#uiManager = uiManager; - this.pageIndex = pageIndex; - this.div = div; - this.#accessibilityManager = accessibilityManager; - this.#annotationLayer = annotationLayer; - this.viewport = viewport; - this.#uiManager.addLayer(this); - } - get isEmpty() { - return this.#editors.size === 0; - } - updateToolbar(mode) { - this.#uiManager.updateToolbar(mode); - } - updateMode(mode = this.#uiManager.getMode()) { - this.#cleanup(); - if (mode === _util.AnnotationEditorType.INK) { - this.addInkEditorIfNeeded(false); - this.disableClick(); - } else { - this.enableClick(); - } - if (mode !== _util.AnnotationEditorType.NONE) { - this.div.classList.toggle("freeTextEditing", mode === _util.AnnotationEditorType.FREETEXT); - this.div.classList.toggle("inkEditing", mode === _util.AnnotationEditorType.INK); - this.div.classList.toggle("stampEditing", mode === _util.AnnotationEditorType.STAMP); - this.div.hidden = false; - } - } - addInkEditorIfNeeded(isCommitting) { - if (!isCommitting && this.#uiManager.getMode() !== _util.AnnotationEditorType.INK) { - return; - } - if (!isCommitting) { - for (const editor of this.#editors.values()) { - if (editor.isEmpty()) { - editor.setInBackground(); - return; - } - } - } - const editor = this.#createAndAddNewEditor({ - offsetX: 0, - offsetY: 0 - }, false); - editor.setInBackground(); - } - setEditingState(isEditing) { - this.#uiManager.setEditingState(isEditing); - } - addCommands(params) { - this.#uiManager.addCommands(params); - } - enable() { - this.div.style.pointerEvents = "auto"; - const annotationElementIds = new Set(); - for (const editor of this.#editors.values()) { - editor.enableEditing(); - if (editor.annotationElementId) { - annotationElementIds.add(editor.annotationElementId); - } - } - if (!this.#annotationLayer) { - return; - } - const editables = this.#annotationLayer.getEditableAnnotations(); - for (const editable of editables) { - editable.hide(); - if (this.#uiManager.isDeletedAnnotationElement(editable.data.id)) { - continue; - } - if (annotationElementIds.has(editable.data.id)) { - continue; - } - const editor = this.deserialize(editable); - if (!editor) { - continue; - } - this.addOrRebuild(editor); - editor.enableEditing(); - } - } - disable() { - this.#isDisabling = true; - this.div.style.pointerEvents = "none"; - const hiddenAnnotationIds = new Set(); - for (const editor of this.#editors.values()) { - editor.disableEditing(); - if (!editor.annotationElementId || editor.serialize() !== null) { - hiddenAnnotationIds.add(editor.annotationElementId); - continue; - } - this.getEditableAnnotation(editor.annotationElementId)?.show(); - editor.remove(); - } - if (this.#annotationLayer) { - const editables = this.#annotationLayer.getEditableAnnotations(); - for (const editable of editables) { - const { - id - } = editable.data; - if (hiddenAnnotationIds.has(id) || this.#uiManager.isDeletedAnnotationElement(id)) { - continue; - } - editable.show(); - } - } - this.#cleanup(); - if (this.isEmpty) { - this.div.hidden = true; - } - this.#isDisabling = false; - } - getEditableAnnotation(id) { - return this.#annotationLayer?.getEditableAnnotation(id) || null; - } - setActiveEditor(editor) { - const currentActive = this.#uiManager.getActive(); - if (currentActive === editor) { - return; - } - this.#uiManager.setActiveEditor(editor); - } - enableClick() { - this.div.addEventListener("pointerdown", this.#boundPointerdown); - this.div.addEventListener("pointerup", this.#boundPointerup); - } - disableClick() { - this.div.removeEventListener("pointerdown", this.#boundPointerdown); - this.div.removeEventListener("pointerup", this.#boundPointerup); - } - attach(editor) { - this.#editors.set(editor.id, editor); - const { - annotationElementId - } = editor; - if (annotationElementId && this.#uiManager.isDeletedAnnotationElement(annotationElementId)) { - this.#uiManager.removeDeletedAnnotationElement(editor); - } - } - detach(editor) { - this.#editors.delete(editor.id); - this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv); - if (!this.#isDisabling && editor.annotationElementId) { - this.#uiManager.addDeletedAnnotationElement(editor); - } - } - remove(editor) { - this.detach(editor); - this.#uiManager.removeEditor(editor); - if (editor.div.contains(document.activeElement)) { - setTimeout(() => { - this.#uiManager.focusMainContainer(); - }, 0); - } - editor.div.remove(); - editor.isAttachedToDOM = false; - if (!this.#isCleaningUp) { - this.addInkEditorIfNeeded(false); - } - } - changeParent(editor) { - if (editor.parent === this) { - return; - } - if (editor.annotationElementId) { - this.#uiManager.addDeletedAnnotationElement(editor.annotationElementId); - _editor.AnnotationEditor.deleteAnnotationElement(editor); - editor.annotationElementId = null; - } - this.attach(editor); - editor.parent?.detach(editor); - editor.setParent(this); - if (editor.div && editor.isAttachedToDOM) { - editor.div.remove(); - this.div.append(editor.div); - } - } - add(editor) { - this.changeParent(editor); - this.#uiManager.addEditor(editor); - this.attach(editor); - if (!editor.isAttachedToDOM) { - const div = editor.render(); - this.div.append(div); - editor.isAttachedToDOM = true; - } - editor.fixAndSetPosition(); - editor.onceAdded(); - this.#uiManager.addToAnnotationStorage(editor); - } - moveEditorInDOM(editor) { - if (!editor.isAttachedToDOM) { - return; - } - const { - activeElement - } = document; - if (editor.div.contains(activeElement)) { - editor._focusEventsAllowed = false; - setTimeout(() => { - if (!editor.div.contains(document.activeElement)) { - editor.div.addEventListener("focusin", () => { - editor._focusEventsAllowed = true; - }, { - once: true - }); - activeElement.focus(); - } else { - editor._focusEventsAllowed = true; - } - }, 0); - } - editor._structTreeParentId = this.#accessibilityManager?.moveElementInDOM(this.div, editor.div, editor.contentDiv, true); - } - addOrRebuild(editor) { - if (editor.needsToBeRebuilt()) { - editor.rebuild(); - } else { - this.add(editor); - } - } - addUndoableEditor(editor) { - const cmd = () => editor._uiManager.rebuild(editor); - const undo = () => { - editor.remove(); - }; - this.addCommands({ - cmd, - undo, - mustExec: false }); } - getNextId() { - return this.#uiManager.getId(); - } - #createNewEditor(params) { - switch (this.#uiManager.getMode()) { - case _util.AnnotationEditorType.FREETEXT: - return new _freetext.FreeTextEditor(params); - case _util.AnnotationEditorType.INK: - return new _ink.InkEditor(params); - case _util.AnnotationEditorType.STAMP: - return new _stamp.StampEditor(params); - } - return null; - } - pasteEditor(mode, params) { - this.#uiManager.updateToolbar(mode); - this.#uiManager.updateMode(mode); - const { - offsetX, - offsetY - } = this.#getCenterPoint(); - const id = this.getNextId(); - const editor = this.#createNewEditor({ - parent: this, - id, - x: offsetX, - y: offsetY, - uiManager: this.#uiManager, - isCentered: true, - ...params + onDataProgressiveRead(chunk) { + this._readyCapability.promise.then(() => { + for (const listener of this._progressiveReadListeners) { + listener(chunk); + } }); - if (editor) { - this.add(editor); - } } - deserialize(data) { - switch (data.annotationType ?? data.annotationEditorType) { - case _util.AnnotationEditorType.FREETEXT: - return _freetext.FreeTextEditor.deserialize(data, this, this.#uiManager); - case _util.AnnotationEditorType.INK: - return _ink.InkEditor.deserialize(data, this, this.#uiManager); - case _util.AnnotationEditorType.STAMP: - return _stamp.StampEditor.deserialize(data, this, this.#uiManager); - } - return null; - } - #createAndAddNewEditor(event, isCentered) { - const id = this.getNextId(); - const editor = this.#createNewEditor({ - parent: this, - id, - x: event.offsetX, - y: event.offsetY, - uiManager: this.#uiManager, - isCentered + onDataProgressiveDone() { + this._readyCapability.promise.then(() => { + for (const listener of this._progressiveDoneListeners) { + listener(); + } }); - if (editor) { - this.add(editor); - } - return editor; } - #getCenterPoint() { + transportReady() { + this._readyCapability.resolve(); + } + requestDataRange(begin, end) { + unreachable("Abstract method PDFDataRangeTransport.requestDataRange"); + } + abort() {} +} +class PDFDocumentProxy { + constructor(pdfInfo, transport) { + this._pdfInfo = pdfInfo; + this._transport = transport; + } + get annotationStorage() { + return this._transport.annotationStorage; + } + get filterFactory() { + return this._transport.filterFactory; + } + get numPages() { + return this._pdfInfo.numPages; + } + get fingerprints() { + return this._pdfInfo.fingerprints; + } + get isPureXfa() { + return shadow(this, "isPureXfa", !!this._transport._htmlForXfa); + } + get allXfaHtml() { + return this._transport._htmlForXfa; + } + getPage(pageNumber) { + return this._transport.getPage(pageNumber); + } + getPageIndex(ref) { + return this._transport.getPageIndex(ref); + } + getDestinations() { + return this._transport.getDestinations(); + } + getDestination(id) { + return this._transport.getDestination(id); + } + getPageLabels() { + return this._transport.getPageLabels(); + } + getPageLayout() { + return this._transport.getPageLayout(); + } + getPageMode() { + return this._transport.getPageMode(); + } + getViewerPreferences() { + return this._transport.getViewerPreferences(); + } + getOpenAction() { + return this._transport.getOpenAction(); + } + getAttachments() { + return this._transport.getAttachments(); + } + getJSActions() { + return this._transport.getDocJSActions(); + } + getOutline() { + return this._transport.getOutline(); + } + getOptionalContentConfig({ + intent = "display" + } = {}) { const { - x, - y, - width, - height - } = this.div.getBoundingClientRect(); - const tlX = Math.max(0, x); - const tlY = Math.max(0, y); - const brX = Math.min(window.innerWidth, x + width); - const brY = Math.min(window.innerHeight, y + height); - const centerX = (tlX + brX) / 2 - x; - const centerY = (tlY + brY) / 2 - y; - const [offsetX, offsetY] = this.viewport.rotation % 180 === 0 ? [centerX, centerY] : [centerY, centerX]; - return { - offsetX, - offsetY - }; + renderingIntent + } = this._transport.getRenderingIntent(intent); + return this._transport.getOptionalContentConfig(renderingIntent); } - addNewEditor() { - this.#createAndAddNewEditor(this.#getCenterPoint(), true); + getPermissions() { + return this._transport.getPermissions(); } - setSelected(editor) { - this.#uiManager.setSelected(editor); + getMetadata() { + return this._transport.getMetadata(); } - toggleSelected(editor) { - this.#uiManager.toggleSelected(editor); + getMarkInfo() { + return this._transport.getMarkInfo(); } - isSelected(editor) { - return this.#uiManager.isSelected(editor); + getData() { + return this._transport.getData(); } - unselect(editor) { - this.#uiManager.unselect(editor); + saveDocument() { + return this._transport.saveDocument(); } - pointerup(event) { - const { - isMac - } = _util.FeatureTest.platform; - if (event.button !== 0 || event.ctrlKey && isMac) { - return; - } - if (event.target !== this.div) { - return; - } - if (!this.#hadPointerDown) { - return; - } - this.#hadPointerDown = false; - if (!this.#allowClick) { - this.#allowClick = true; - return; - } - if (this.#uiManager.getMode() === _util.AnnotationEditorType.STAMP) { - this.#uiManager.unselectAll(); - return; - } - this.#createAndAddNewEditor(event, false); + getDownloadInfo() { + return this._transport.downloadInfoCapability.promise; } - pointerdown(event) { - if (this.#hadPointerDown) { - this.#hadPointerDown = false; - return; - } - const { - isMac - } = _util.FeatureTest.platform; - if (event.button !== 0 || event.ctrlKey && isMac) { - return; - } - if (event.target !== this.div) { - return; - } - this.#hadPointerDown = true; - const editor = this.#uiManager.getActive(); - this.#allowClick = !editor || editor.isEmpty(); - } - findNewParent(editor, x, y) { - const layer = this.#uiManager.findParent(x, y); - if (layer === null || layer === this) { - return false; - } - layer.changeParent(editor); - return true; + cleanup(keepLoadedFonts = false) { + return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa); } destroy() { - if (this.#uiManager.getActive()?.parent === this) { - this.#uiManager.commitOrRemove(); - this.#uiManager.setActiveEditor(null); - } - for (const editor of this.#editors.values()) { - this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv); - editor.setParent(null); - editor.isAttachedToDOM = false; - editor.div.remove(); - } - this.div = null; - this.#editors.clear(); - this.#uiManager.removeLayer(this); + return this.loadingTask.destroy(); } - #cleanup() { - this.#isCleaningUp = true; - for (const editor of this.#editors.values()) { - if (editor.isEmpty()) { - editor.remove(); - } - } - this.#isCleaningUp = false; + cachedPageNumber(ref) { + return this._transport.cachedPageNumber(ref); + } + get loadingParams() { + return this._transport.loadingParams; + } + get loadingTask() { + return this._transport.loadingTask; + } + getFieldObjects() { + return this._transport.getFieldObjects(); + } + hasJSActions() { + return this._transport.hasJSActions(); + } + getCalculationOrderIds() { + return this._transport.getCalculationOrderIds(); + } +} +class PDFPageProxy { + #delayedCleanupTimeout = null; + #pendingCleanup = false; + constructor(pageIndex, pageInfo, transport, pdfBug = false) { + this._pageIndex = pageIndex; + this._pageInfo = pageInfo; + this._transport = transport; + this._stats = pdfBug ? new StatTimer() : null; + this._pdfBug = pdfBug; + this.commonObjs = transport.commonObjs; + this.objs = new PDFObjects(); + this._maybeCleanupAfterRender = false; + this._intentStates = new Map(); + this.destroyed = false; + } + get pageNumber() { + return this._pageIndex + 1; + } + get rotate() { + return this._pageInfo.rotate; + } + get ref() { + return this._pageInfo.ref; + } + get userUnit() { + return this._pageInfo.userUnit; + } + get view() { + return this._pageInfo.view; + } + getViewport({ + scale, + rotation = this.rotate, + offsetX = 0, + offsetY = 0, + dontFlip = false + } = {}) { + return new PageViewport({ + viewBox: this.view, + scale, + rotation, + offsetX, + offsetY, + dontFlip + }); + } + getAnnotations({ + intent = "display" + } = {}) { + const { + renderingIntent + } = this._transport.getRenderingIntent(intent); + return this._transport.getAnnotations(this._pageIndex, renderingIntent); + } + getJSActions() { + return this._transport.getPageJSActions(this._pageIndex); + } + get filterFactory() { + return this._transport.filterFactory; + } + get isPureXfa() { + return shadow(this, "isPureXfa", !!this._transport._htmlForXfa); + } + async getXfa() { + return this._transport._htmlForXfa?.children[this._pageIndex] || null; } render({ - viewport + canvasContext, + viewport, + intent = "display", + annotationMode = AnnotationMode.ENABLE, + transform = null, + background = null, + optionalContentConfigPromise = null, + annotationCanvasMap = null, + pageColors = null, + printAnnotationStorage = null }) { - this.viewport = viewport; - (0, _display_utils.setLayerDimensions)(this.div, viewport); - for (const editor of this.#uiManager.getEditors(this.pageIndex)) { - this.add(editor); - } - this.updateMode(); - } - update({ - viewport - }) { - this.#uiManager.commitOrRemove(); - this.viewport = viewport; - (0, _display_utils.setLayerDimensions)(this.div, { - rotation: viewport.rotation - }); - this.updateMode(); - } - get pageDimensions() { + this._stats?.time("Overall"); + const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage); const { - pageWidth, - pageHeight - } = this.viewport.rawDims; - return [pageWidth, pageHeight]; - } -} -exports.AnnotationEditorLayer = AnnotationEditorLayer; - -/***/ }), -/* 28 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.FreeTextEditor = void 0; -var _util = __w_pdfjs_require__(1); -var _tools = __w_pdfjs_require__(5); -var _editor = __w_pdfjs_require__(4); -var _annotation_layer = __w_pdfjs_require__(29); -class FreeTextEditor extends _editor.AnnotationEditor { - #boundEditorDivBlur = this.editorDivBlur.bind(this); - #boundEditorDivFocus = this.editorDivFocus.bind(this); - #boundEditorDivInput = this.editorDivInput.bind(this); - #boundEditorDivKeydown = this.editorDivKeydown.bind(this); - #color; - #content = ""; - #editorDivId = `${this.id}-editor`; - #fontSize; - #initialData = null; - static _freeTextDefaultContent = ""; - static _internalPadding = 0; - static _defaultColor = null; - static _defaultFontSize = 10; - static get _keyboardManager() { - const proto = FreeTextEditor.prototype; - const arrowChecker = self => self.isEmpty(); - const small = _tools.AnnotationEditorUIManager.TRANSLATE_SMALL; - const big = _tools.AnnotationEditorUIManager.TRANSLATE_BIG; - return (0, _util.shadow)(this, "_keyboardManager", new _tools.KeyboardManager([[["ctrl+s", "mac+meta+s", "ctrl+p", "mac+meta+p"], proto.commitOrRemove, { - bubbles: true - }], [["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], proto.commitOrRemove], [["ArrowLeft", "mac+ArrowLeft"], proto._translateEmpty, { - args: [-small, 0], - checker: arrowChecker - }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto._translateEmpty, { - args: [-big, 0], - checker: arrowChecker - }], [["ArrowRight", "mac+ArrowRight"], proto._translateEmpty, { - args: [small, 0], - checker: arrowChecker - }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto._translateEmpty, { - args: [big, 0], - checker: arrowChecker - }], [["ArrowUp", "mac+ArrowUp"], proto._translateEmpty, { - args: [0, -small], - checker: arrowChecker - }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto._translateEmpty, { - args: [0, -big], - checker: arrowChecker - }], [["ArrowDown", "mac+ArrowDown"], proto._translateEmpty, { - args: [0, small], - checker: arrowChecker - }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto._translateEmpty, { - args: [0, big], - checker: arrowChecker - }]])); - } - static _type = "freetext"; - constructor(params) { - super({ - ...params, - name: "freeTextEditor" - }); - this.#color = params.color || FreeTextEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor; - this.#fontSize = params.fontSize || FreeTextEditor._defaultFontSize; - } - static initialize(l10n) { - _editor.AnnotationEditor.initialize(l10n, { - strings: ["free_text2_default_content", "editor_free_text2_aria_label"] - }); - const style = getComputedStyle(document.documentElement); - this._internalPadding = parseFloat(style.getPropertyValue("--freetext-padding")); - } - static updateDefaultParams(type, value) { - switch (type) { - case _util.AnnotationEditorParamsType.FREETEXT_SIZE: - FreeTextEditor._defaultFontSize = value; - break; - case _util.AnnotationEditorParamsType.FREETEXT_COLOR: - FreeTextEditor._defaultColor = value; - break; + renderingIntent, + cacheKey + } = intentArgs; + this.#pendingCleanup = false; + this.#abortDelayedCleanup(); + optionalContentConfigPromise ||= this._transport.getOptionalContentConfig(renderingIntent); + let intentState = this._intentStates.get(cacheKey); + if (!intentState) { + intentState = Object.create(null); + this._intentStates.set(cacheKey, intentState); } - } - updateParams(type, value) { - switch (type) { - case _util.AnnotationEditorParamsType.FREETEXT_SIZE: - this.#updateFontSize(value); - break; - case _util.AnnotationEditorParamsType.FREETEXT_COLOR: - this.#updateColor(value); - break; + if (intentState.streamReaderCancelTimeout) { + clearTimeout(intentState.streamReaderCancelTimeout); + intentState.streamReaderCancelTimeout = null; } - } - static get defaultPropertiesToUpdate() { - return [[_util.AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [_util.AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor]]; - } - get propertiesToUpdate() { - return [[_util.AnnotationEditorParamsType.FREETEXT_SIZE, this.#fontSize], [_util.AnnotationEditorParamsType.FREETEXT_COLOR, this.#color]]; - } - #updateFontSize(fontSize) { - const setFontsize = size => { - this.editorDiv.style.fontSize = `calc(${size}px * var(--scale-factor))`; - this.translate(0, -(size - this.#fontSize) * this.parentScale); - this.#fontSize = size; - this.#setEditorDimensions(); + const intentPrint = !!(renderingIntent & RenderingIntentFlag.PRINT); + if (!intentState.displayReadyCapability) { + intentState.displayReadyCapability = Promise.withResolvers(); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false, + separateAnnots: null + }; + this._stats?.time("Page Request"); + this._pumpOperatorList(intentArgs); + } + const complete = error => { + intentState.renderTasks.delete(internalRenderTask); + if (this._maybeCleanupAfterRender || intentPrint) { + this.#pendingCleanup = true; + } + this.#tryCleanup(!intentPrint); + if (error) { + internalRenderTask.capability.reject(error); + this._abortOperatorList({ + intentState, + reason: error instanceof Error ? error : new Error(error) + }); + } else { + internalRenderTask.capability.resolve(); + } + if (this._stats) { + this._stats.timeEnd("Rendering"); + this._stats.timeEnd("Overall"); + if (globalThis.Stats?.enabled) { + globalThis.Stats.add(this.pageNumber, this._stats); + } + } }; - const savedFontsize = this.#fontSize; - this.addCommands({ - cmd: () => { - setFontsize(fontSize); + const internalRenderTask = new InternalRenderTask({ + callback: complete, + params: { + canvasContext, + viewport, + transform, + background }, - undo: () => { - setFontsize(savedFontsize); - }, - mustExec: true, - type: _util.AnnotationEditorParamsType.FREETEXT_SIZE, - overwriteIfSameType: true, - keepUndo: true + objs: this.objs, + commonObjs: this.commonObjs, + annotationCanvasMap, + operatorList: intentState.operatorList, + pageIndex: this._pageIndex, + canvasFactory: this._transport.canvasFactory, + filterFactory: this._transport.filterFactory, + useRequestAnimationFrame: !intentPrint, + pdfBug: this._pdfBug, + pageColors }); - } - #updateColor(color) { - const savedColor = this.#color; - this.addCommands({ - cmd: () => { - this.#color = this.editorDiv.style.color = color; - }, - undo: () => { - this.#color = this.editorDiv.style.color = savedColor; - }, - mustExec: true, - type: _util.AnnotationEditorParamsType.FREETEXT_COLOR, - overwriteIfSameType: true, - keepUndo: true - }); - } - _translateEmpty(x, y) { - this._uiManager.translateSelectedEditors(x, y, true); - } - getInitialTranslation() { - const scale = this.parentScale; - return [-FreeTextEditor._internalPadding * scale, -(FreeTextEditor._internalPadding + this.#fontSize) * scale]; - } - rebuild() { - if (!this.parent) { - return; - } - super.rebuild(); - if (this.div === null) { - return; - } - if (!this.isAttachedToDOM) { - this.parent.add(this); - } - } - enableEditMode() { - if (this.isInEditMode()) { - return; - } - this.parent.setEditingState(false); - this.parent.updateToolbar(_util.AnnotationEditorType.FREETEXT); - super.enableEditMode(); - this.overlayDiv.classList.remove("enabled"); - this.editorDiv.contentEditable = true; - this._isDraggable = false; - this.div.removeAttribute("aria-activedescendant"); - this.editorDiv.addEventListener("keydown", this.#boundEditorDivKeydown); - this.editorDiv.addEventListener("focus", this.#boundEditorDivFocus); - this.editorDiv.addEventListener("blur", this.#boundEditorDivBlur); - this.editorDiv.addEventListener("input", this.#boundEditorDivInput); - } - disableEditMode() { - if (!this.isInEditMode()) { - return; - } - this.parent.setEditingState(true); - super.disableEditMode(); - this.overlayDiv.classList.add("enabled"); - this.editorDiv.contentEditable = false; - this.div.setAttribute("aria-activedescendant", this.#editorDivId); - this._isDraggable = true; - this.editorDiv.removeEventListener("keydown", this.#boundEditorDivKeydown); - this.editorDiv.removeEventListener("focus", this.#boundEditorDivFocus); - this.editorDiv.removeEventListener("blur", this.#boundEditorDivBlur); - this.editorDiv.removeEventListener("input", this.#boundEditorDivInput); - this.div.focus({ - preventScroll: true - }); - this.isEditing = false; - this.parent.div.classList.add("freeTextEditing"); - } - focusin(event) { - if (!this._focusEventsAllowed) { - return; - } - super.focusin(event); - if (event.target !== this.editorDiv) { - this.editorDiv.focus(); - } - } - onceAdded() { - if (this.width) { - this.#cheatInitialRect(); - return; - } - this.enableEditMode(); - this.editorDiv.focus(); - if (this._initialOptions?.isCentered) { - this.center(); - } - this._initialOptions = null; - } - isEmpty() { - return !this.editorDiv || this.editorDiv.innerText.trim() === ""; - } - remove() { - this.isEditing = false; - if (this.parent) { - this.parent.setEditingState(true); - this.parent.div.classList.add("freeTextEditing"); - } - super.remove(); - } - #extractText() { - const divs = this.editorDiv.getElementsByTagName("div"); - if (divs.length === 0) { - return this.editorDiv.innerText; - } - const buffer = []; - for (const div of divs) { - buffer.push(div.innerText.replace(/\r\n?|\n/, "")); - } - return buffer.join("\n"); - } - #setEditorDimensions() { - const [parentWidth, parentHeight] = this.parentDimensions; - let rect; - if (this.isAttachedToDOM) { - rect = this.div.getBoundingClientRect(); - } else { - const { - currentLayer, - div - } = this; - const savedDisplay = div.style.display; - div.style.display = "hidden"; - currentLayer.div.append(this.div); - rect = div.getBoundingClientRect(); - div.remove(); - div.style.display = savedDisplay; - } - if (this.rotation % 180 === this.parentRotation % 180) { - this.width = rect.width / parentWidth; - this.height = rect.height / parentHeight; - } else { - this.width = rect.height / parentWidth; - this.height = rect.width / parentHeight; - } - this.fixAndSetPosition(); - } - commit() { - if (!this.isInEditMode()) { - return; - } - super.commit(); - this.disableEditMode(); - const savedText = this.#content; - const newText = this.#content = this.#extractText().trimEnd(); - if (savedText === newText) { - return; - } - const setText = text => { - this.#content = text; - if (!text) { - this.remove(); + (intentState.renderTasks ||= new Set()).add(internalRenderTask); + const renderTask = internalRenderTask.task; + Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => { + if (this.destroyed) { + complete(); return; } - this.#setContent(); - this._uiManager.rebuild(this); - this.#setEditorDimensions(); - }; - this.addCommands({ - cmd: () => { - setText(newText); - }, - undo: () => { - setText(savedText); - }, - mustExec: false + this._stats?.time("Rendering"); + if (!(optionalContentConfig.renderingIntent & renderingIntent)) { + throw new Error("Must use the same `intent`-argument when calling the `PDFPageProxy.render` " + "and `PDFDocumentProxy.getOptionalContentConfig` methods."); + } + internalRenderTask.initializeGraphics({ + transparency, + optionalContentConfig + }); + internalRenderTask.operatorListChanged(); + }).catch(complete); + return renderTask; + } + getOperatorList({ + intent = "display", + annotationMode = AnnotationMode.ENABLE, + printAnnotationStorage = null + } = {}) { + function operatorListChanged() { + if (intentState.operatorList.lastChunk) { + intentState.opListReadCapability.resolve(intentState.operatorList); + intentState.renderTasks.delete(opListTask); + } + } + const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, true); + let intentState = this._intentStates.get(intentArgs.cacheKey); + if (!intentState) { + intentState = Object.create(null); + this._intentStates.set(intentArgs.cacheKey, intentState); + } + let opListTask; + if (!intentState.opListReadCapability) { + opListTask = Object.create(null); + opListTask.operatorListChanged = operatorListChanged; + intentState.opListReadCapability = Promise.withResolvers(); + (intentState.renderTasks ||= new Set()).add(opListTask); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false, + separateAnnots: null + }; + this._stats?.time("Page Request"); + this._pumpOperatorList(intentArgs); + } + return intentState.opListReadCapability.promise; + } + streamTextContent({ + includeMarkedContent = false, + disableNormalization = false + } = {}) { + const TEXT_CONTENT_CHUNK_SIZE = 100; + return this._transport.messageHandler.sendWithStream("GetTextContent", { + pageIndex: this._pageIndex, + includeMarkedContent: includeMarkedContent === true, + disableNormalization: disableNormalization === true + }, { + highWaterMark: TEXT_CONTENT_CHUNK_SIZE, + size(textContent) { + return textContent.items.length; + } }); - this.#setEditorDimensions(); } - shouldGetKeyboardEvents() { - return this.isInEditMode(); - } - enterInEditMode() { - this.enableEditMode(); - this.editorDiv.focus(); - } - dblclick(event) { - this.enterInEditMode(); - } - keydown(event) { - if (event.target === this.div && event.key === "Enter") { - this.enterInEditMode(); - event.preventDefault(); + getTextContent(params = {}) { + if (this._transport._htmlForXfa) { + return this.getXfa().then(xfa => XfaText.textContent(xfa)); } - } - editorDivKeydown(event) { - FreeTextEditor._keyboardManager.exec(this, event); - } - editorDivFocus(event) { - this.isEditing = true; - } - editorDivBlur(event) { - this.isEditing = false; - } - editorDivInput(event) { - this.parent.div.classList.toggle("freeTextEditing", this.isEmpty()); - } - disableEditing() { - this.editorDiv.setAttribute("role", "comment"); - this.editorDiv.removeAttribute("aria-multiline"); - } - enableEditing() { - this.editorDiv.setAttribute("role", "textbox"); - this.editorDiv.setAttribute("aria-multiline", true); - } - render() { - if (this.div) { - return this.div; - } - let baseX, baseY; - if (this.width) { - baseX = this.x; - baseY = this.y; - } - super.render(); - this.editorDiv = document.createElement("div"); - this.editorDiv.className = "internal"; - this.editorDiv.setAttribute("id", this.#editorDivId); - this.enableEditing(); - _editor.AnnotationEditor._l10nPromise.get("editor_free_text2_aria_label").then(msg => this.editorDiv?.setAttribute("aria-label", msg)); - _editor.AnnotationEditor._l10nPromise.get("free_text2_default_content").then(msg => this.editorDiv?.setAttribute("default-content", msg)); - this.editorDiv.contentEditable = true; - const { - style - } = this.editorDiv; - style.fontSize = `calc(${this.#fontSize}px * var(--scale-factor))`; - style.color = this.#color; - this.div.append(this.editorDiv); - this.overlayDiv = document.createElement("div"); - this.overlayDiv.classList.add("overlay", "enabled"); - this.div.append(this.overlayDiv); - (0, _tools.bindEvents)(this, this.div, ["dblclick", "keydown"]); - if (this.width) { - const [parentWidth, parentHeight] = this.parentDimensions; - if (this.annotationElementId) { - const { - position - } = this.#initialData; - let [tx, ty] = this.getInitialTranslation(); - [tx, ty] = this.pageTranslationToScreen(tx, ty); - const [pageWidth, pageHeight] = this.pageDimensions; - const [pageX, pageY] = this.pageTranslation; - let posX, posY; - switch (this.rotation) { - case 0: - posX = baseX + (position[0] - pageX) / pageWidth; - posY = baseY + this.height - (position[1] - pageY) / pageHeight; - break; - case 90: - posX = baseX + (position[0] - pageX) / pageWidth; - posY = baseY - (position[1] - pageY) / pageHeight; - [tx, ty] = [ty, -tx]; - break; - case 180: - posX = baseX - this.width + (position[0] - pageX) / pageWidth; - posY = baseY - (position[1] - pageY) / pageHeight; - [tx, ty] = [-tx, -ty]; - break; - case 270: - posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth; - posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight; - [tx, ty] = [-ty, tx]; - break; - } - this.setAt(posX * parentWidth, posY * parentHeight, tx, ty); - } else { - this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); - } - this.#setContent(); - this._isDraggable = true; - this.editorDiv.contentEditable = false; - } else { - this._isDraggable = false; - this.editorDiv.contentEditable = true; - } - return this.div; - } - #setContent() { - this.editorDiv.replaceChildren(); - if (!this.#content) { - return; - } - for (const line of this.#content.split("\n")) { - const div = document.createElement("div"); - div.append(line ? document.createTextNode(line) : document.createElement("br")); - this.editorDiv.append(div); - } - } - get contentDiv() { - return this.editorDiv; - } - static deserialize(data, parent, uiManager) { - let initialData = null; - if (data instanceof _annotation_layer.FreeTextAnnotationElement) { - const { - data: { - defaultAppearanceData: { - fontSize, - fontColor - }, - rect, - rotation, - id - }, - textContent, - textPosition, - parent: { - page: { - pageNumber + const readableStream = this.streamTextContent(params); + return new Promise(function (resolve, reject) { + function pump() { + reader.read().then(function ({ + value, + done + }) { + if (done) { + resolve(textContent); + return; } - } - } = data; - if (!textContent || textContent.length === 0) { - return null; + textContent.lang ??= value.lang; + Object.assign(textContent.styles, value.styles); + textContent.items.push(...value.items); + pump(); + }, reject); } - initialData = data = { - annotationType: _util.AnnotationEditorType.FREETEXT, - color: Array.from(fontColor), - fontSize, - value: textContent.join("\n"), - position: textPosition, - pageIndex: pageNumber - 1, - rect, - rotation, - id, - deleted: false + const reader = readableStream.getReader(); + const textContent = { + items: [], + styles: Object.create(null), + lang: null }; - } - const editor = super.deserialize(data, parent, uiManager); - editor.#fontSize = data.fontSize; - editor.#color = _util.Util.makeHexColor(...data.color); - editor.#content = data.value; - editor.annotationElementId = data.id || null; - editor.#initialData = initialData; - return editor; + pump(); + }); } - serialize(isForCopying = false) { - if (this.isEmpty()) { - return null; - } - if (this.deleted) { - return { - pageIndex: this.pageIndex, - id: this.annotationElementId, - deleted: true - }; - } - const padding = FreeTextEditor._internalPadding * this.parentScale; - const rect = this.getRect(padding, padding); - const color = _editor.AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : this.#color); - const serialized = { - annotationType: _util.AnnotationEditorType.FREETEXT, - color, - fontSize: this.#fontSize, - value: this.#content, - pageIndex: this.pageIndex, - rect, - rotation: this.rotation, - structTreeParentId: this._structTreeParentId - }; - if (isForCopying) { - return serialized; - } - if (this.annotationElementId && !this.#hasElementChanged(serialized)) { - return null; - } - serialized.id = this.annotationElementId; - return serialized; + getStructTree() { + return this._transport.getStructTree(this._pageIndex); } - #hasElementChanged(serialized) { + _destroy() { + this.destroyed = true; + const waitOn = []; + for (const intentState of this._intentStates.values()) { + this._abortOperatorList({ + intentState, + reason: new Error("Page was destroyed."), + force: true + }); + if (intentState.opListReadCapability) { + continue; + } + for (const internalRenderTask of intentState.renderTasks) { + waitOn.push(internalRenderTask.completed); + internalRenderTask.cancel(); + } + } + this.objs.clear(); + this.#pendingCleanup = false; + this.#abortDelayedCleanup(); + return Promise.all(waitOn); + } + cleanup(resetStats = false) { + this.#pendingCleanup = true; + const success = this.#tryCleanup(false); + if (resetStats && success) { + this._stats &&= new StatTimer(); + } + return success; + } + #tryCleanup(delayed = false) { + this.#abortDelayedCleanup(); + if (!this.#pendingCleanup || this.destroyed) { + return false; + } + if (delayed) { + this.#delayedCleanupTimeout = setTimeout(() => { + this.#delayedCleanupTimeout = null; + this.#tryCleanup(false); + }, DELAYED_CLEANUP_TIMEOUT); + return false; + } + for (const { + renderTasks, + operatorList + } of this._intentStates.values()) { + if (renderTasks.size > 0 || !operatorList.lastChunk) { + return false; + } + } + this._intentStates.clear(); + this.objs.clear(); + this.#pendingCleanup = false; + return true; + } + #abortDelayedCleanup() { + if (this.#delayedCleanupTimeout) { + clearTimeout(this.#delayedCleanupTimeout); + this.#delayedCleanupTimeout = null; + } + } + _startRenderPage(transparency, cacheKey) { + const intentState = this._intentStates.get(cacheKey); + if (!intentState) { + return; + } + this._stats?.timeEnd("Page Request"); + intentState.displayReadyCapability?.resolve(transparency); + } + _renderPageChunk(operatorListChunk, intentState) { + for (let i = 0, ii = operatorListChunk.length; i < ii; i++) { + intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); + intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); + } + intentState.operatorList.lastChunk = operatorListChunk.lastChunk; + intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots; + for (const internalRenderTask of intentState.renderTasks) { + internalRenderTask.operatorListChanged(); + } + if (operatorListChunk.lastChunk) { + this.#tryCleanup(true); + } + } + _pumpOperatorList({ + renderingIntent, + cacheKey, + annotationStorageSerializable + }) { const { - value, - fontSize, - color, - rect, - pageIndex - } = this.#initialData; - return serialized.value !== value || serialized.fontSize !== fontSize || serialized.rect.some((x, i) => Math.abs(x - rect[i]) >= 1) || serialized.color.some((c, i) => c !== color[i]) || serialized.pageIndex !== pageIndex; + map, + transfer + } = annotationStorageSerializable; + const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", { + pageIndex: this._pageIndex, + intent: renderingIntent, + cacheKey, + annotationStorage: map + }, transfer); + const reader = readableStream.getReader(); + const intentState = this._intentStates.get(cacheKey); + intentState.streamReader = reader; + const pump = () => { + reader.read().then(({ + value, + done + }) => { + if (done) { + intentState.streamReader = null; + return; + } + if (this._transport.destroyed) { + return; + } + this._renderPageChunk(value, intentState); + pump(); + }, reason => { + intentState.streamReader = null; + if (this._transport.destroyed) { + return; + } + if (intentState.operatorList) { + intentState.operatorList.lastChunk = true; + for (const internalRenderTask of intentState.renderTasks) { + internalRenderTask.operatorListChanged(); + } + this.#tryCleanup(true); + } + if (intentState.displayReadyCapability) { + intentState.displayReadyCapability.reject(reason); + } else if (intentState.opListReadCapability) { + intentState.opListReadCapability.reject(reason); + } else { + throw reason; + } + }); + }; + pump(); } - #cheatInitialRect(delayed = false) { - if (!this.annotationElementId) { + _abortOperatorList({ + intentState, + reason, + force = false + }) { + if (!intentState.streamReader) { return; } - this.#setEditorDimensions(); - if (!delayed && (this.width === 0 || this.height === 0)) { - setTimeout(() => this.#cheatInitialRect(true), 0); + if (intentState.streamReaderCancelTimeout) { + clearTimeout(intentState.streamReaderCancelTimeout); + intentState.streamReaderCancelTimeout = null; + } + if (!force) { + if (intentState.renderTasks.size > 0) { + return; + } + if (reason instanceof RenderingCancelledException) { + let delay = RENDERING_CANCELLED_TIMEOUT; + if (reason.extraDelay > 0 && reason.extraDelay < 1000) { + delay += reason.extraDelay; + } + intentState.streamReaderCancelTimeout = setTimeout(() => { + intentState.streamReaderCancelTimeout = null; + this._abortOperatorList({ + intentState, + reason, + force: true + }); + }, delay); + return; + } + } + intentState.streamReader.cancel(new AbortException(reason.message)).catch(() => {}); + intentState.streamReader = null; + if (this._transport.destroyed) { return; } - const padding = FreeTextEditor._internalPadding * this.parentScale; - this.#initialData.rect = this.getRect(padding, padding); + for (const [curCacheKey, curIntentState] of this._intentStates) { + if (curIntentState === intentState) { + this._intentStates.delete(curCacheKey); + break; + } + } + this.cleanup(); + } + get stats() { + return this._stats; } } -exports.FreeTextEditor = FreeTextEditor; +class LoopbackPort { + #listeners = new Set(); + #deferred = Promise.resolve(); + postMessage(obj, transfer) { + const event = { + data: structuredClone(obj, transfer ? { + transfer + } : null) + }; + this.#deferred.then(() => { + for (const listener of this.#listeners) { + listener.call(this, event); + } + }); + } + addEventListener(name, listener) { + this.#listeners.add(listener); + } + removeEventListener(name, listener) { + this.#listeners.delete(listener); + } + terminate() { + this.#listeners.clear(); + } +} +const PDFWorkerUtil = { + isWorkerDisabled: false, + fakeWorkerId: 0 +}; +{ + if (isNodeJS) { + PDFWorkerUtil.isWorkerDisabled = true; + GlobalWorkerOptions.workerSrc ||= "./pdf.worker.mjs"; + } + PDFWorkerUtil.isSameOrigin = function (baseUrl, otherUrl) { + let base; + try { + base = new URL(baseUrl); + if (!base.origin || base.origin === "null") { + return false; + } + } catch { + return false; + } + const other = new URL(otherUrl, base); + return base.origin === other.origin; + }; + PDFWorkerUtil.createCDNWrapper = function (url) { + const wrapper = `await import("${url}");`; + return URL.createObjectURL(new Blob([wrapper], { + type: "text/javascript" + })); + }; +} +class PDFWorker { + static #workerPorts; + constructor({ + name = null, + port = null, + verbosity = getVerbosityLevel() + } = {}) { + this.name = name; + this.destroyed = false; + this.verbosity = verbosity; + this._readyCapability = Promise.withResolvers(); + this._port = null; + this._webWorker = null; + this._messageHandler = null; + if (port) { + if (PDFWorker.#workerPorts?.has(port)) { + throw new Error("Cannot use more than one PDFWorker per port."); + } + (PDFWorker.#workerPorts ||= new WeakMap()).set(port, this); + this._initializeFromPort(port); + return; + } + this._initialize(); + } + get promise() { + if (isNodeJS) { + return Promise.all([NodePackages.promise, this._readyCapability.promise]); + } + return this._readyCapability.promise; + } + get port() { + return this._port; + } + get messageHandler() { + return this._messageHandler; + } + _initializeFromPort(port) { + this._port = port; + this._messageHandler = new MessageHandler("main", "worker", port); + this._messageHandler.on("ready", function () {}); + this._readyCapability.resolve(); + this._messageHandler.send("configure", { + verbosity: this.verbosity + }); + } + _initialize() { + if (!PDFWorkerUtil.isWorkerDisabled && !PDFWorker.#mainThreadWorkerMessageHandler) { + let { + workerSrc + } = PDFWorker; + try { + if (!PDFWorkerUtil.isSameOrigin(window.location.href, workerSrc)) { + workerSrc = PDFWorkerUtil.createCDNWrapper(new URL(workerSrc, window.location).href); + } + const worker = new Worker(workerSrc, { + type: "module" + }); + const messageHandler = new MessageHandler("main", "worker", worker); + const terminateEarly = () => { + worker.removeEventListener("error", onWorkerError); + messageHandler.destroy(); + worker.terminate(); + if (this.destroyed) { + this._readyCapability.reject(new Error("Worker was destroyed")); + } else { + this._setupFakeWorker(); + } + }; + const onWorkerError = () => { + if (!this._webWorker) { + terminateEarly(); + } + }; + worker.addEventListener("error", onWorkerError); + messageHandler.on("test", data => { + worker.removeEventListener("error", onWorkerError); + if (this.destroyed) { + terminateEarly(); + return; + } + if (data) { + this._messageHandler = messageHandler; + this._port = worker; + this._webWorker = worker; + this._readyCapability.resolve(); + messageHandler.send("configure", { + verbosity: this.verbosity + }); + } else { + this._setupFakeWorker(); + messageHandler.destroy(); + worker.terminate(); + } + }); + messageHandler.on("ready", data => { + worker.removeEventListener("error", onWorkerError); + if (this.destroyed) { + terminateEarly(); + return; + } + try { + sendTest(); + } catch { + this._setupFakeWorker(); + } + }); + const sendTest = () => { + const testObj = new Uint8Array(); + messageHandler.send("test", testObj, [testObj.buffer]); + }; + sendTest(); + return; + } catch { + info("The worker has been disabled."); + } + } + this._setupFakeWorker(); + } + _setupFakeWorker() { + if (!PDFWorkerUtil.isWorkerDisabled) { + warn("Setting up fake worker."); + PDFWorkerUtil.isWorkerDisabled = true; + } + PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => { + if (this.destroyed) { + this._readyCapability.reject(new Error("Worker was destroyed")); + return; + } + const port = new LoopbackPort(); + this._port = port; + const id = `fake${PDFWorkerUtil.fakeWorkerId++}`; + const workerHandler = new MessageHandler(id + "_worker", id, port); + WorkerMessageHandler.setup(workerHandler, port); + const messageHandler = new MessageHandler(id, id + "_worker", port); + this._messageHandler = messageHandler; + this._readyCapability.resolve(); + messageHandler.send("configure", { + verbosity: this.verbosity + }); + }).catch(reason => { + this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); + }); + } + destroy() { + this.destroyed = true; + if (this._webWorker) { + this._webWorker.terminate(); + this._webWorker = null; + } + PDFWorker.#workerPorts?.delete(this._port); + this._port = null; + if (this._messageHandler) { + this._messageHandler.destroy(); + this._messageHandler = null; + } + } + static fromPort(params) { + if (!params?.port) { + throw new Error("PDFWorker.fromPort - invalid method signature."); + } + const cachedPort = this.#workerPorts?.get(params.port); + if (cachedPort) { + if (cachedPort._pendingDestroy) { + throw new Error("PDFWorker.fromPort - the worker is being destroyed.\n" + "Please remember to await `PDFDocumentLoadingTask.destroy()`-calls."); + } + return cachedPort; + } + return new PDFWorker(params); + } + static get workerSrc() { + if (GlobalWorkerOptions.workerSrc) { + return GlobalWorkerOptions.workerSrc; + } + throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); + } + static get #mainThreadWorkerMessageHandler() { + try { + return globalThis.pdfjsWorker?.WorkerMessageHandler || null; + } catch { + return null; + } + } + static get _setupFakeWorkerGlobal() { + const loader = async () => { + if (this.#mainThreadWorkerMessageHandler) { + return this.#mainThreadWorkerMessageHandler; + } + const worker = await import( /*webpackIgnore: true*/this.workerSrc); + return worker.WorkerMessageHandler; + }; + return shadow(this, "_setupFakeWorkerGlobal", loader()); + } +} +class WorkerTransport { + #methodPromises = new Map(); + #pageCache = new Map(); + #pagePromises = new Map(); + #pageRefCache = new Map(); + #passwordCapability = null; + constructor(messageHandler, loadingTask, networkStream, params, factory) { + this.messageHandler = messageHandler; + this.loadingTask = loadingTask; + this.commonObjs = new PDFObjects(); + this.fontLoader = new FontLoader({ + ownerDocument: params.ownerDocument, + styleElement: params.styleElement + }); + this._params = params; + this.canvasFactory = factory.canvasFactory; + this.filterFactory = factory.filterFactory; + this.cMapReaderFactory = factory.cMapReaderFactory; + this.standardFontDataFactory = factory.standardFontDataFactory; + this.destroyed = false; + this.destroyCapability = null; + this._networkStream = networkStream; + this._fullReader = null; + this._lastProgress = null; + this.downloadInfoCapability = Promise.withResolvers(); + this.setupMessageHandler(); + } + #cacheSimpleMethod(name, data = null) { + const cachedPromise = this.#methodPromises.get(name); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise(name, data); + this.#methodPromises.set(name, promise); + return promise; + } + get annotationStorage() { + return shadow(this, "annotationStorage", new AnnotationStorage()); + } + getRenderingIntent(intent, annotationMode = AnnotationMode.ENABLE, printAnnotationStorage = null, isOpList = false) { + let renderingIntent = RenderingIntentFlag.DISPLAY; + let annotationStorageSerializable = SerializableEmpty; + switch (intent) { + case "any": + renderingIntent = RenderingIntentFlag.ANY; + break; + case "display": + break; + case "print": + renderingIntent = RenderingIntentFlag.PRINT; + break; + default: + warn(`getRenderingIntent - invalid intent: ${intent}`); + } + switch (annotationMode) { + case AnnotationMode.DISABLE: + renderingIntent += RenderingIntentFlag.ANNOTATIONS_DISABLE; + break; + case AnnotationMode.ENABLE: + break; + case AnnotationMode.ENABLE_FORMS: + renderingIntent += RenderingIntentFlag.ANNOTATIONS_FORMS; + break; + case AnnotationMode.ENABLE_STORAGE: + renderingIntent += RenderingIntentFlag.ANNOTATIONS_STORAGE; + const annotationStorage = renderingIntent & RenderingIntentFlag.PRINT && printAnnotationStorage instanceof PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage; + annotationStorageSerializable = annotationStorage.serializable; + break; + default: + warn(`getRenderingIntent - invalid annotationMode: ${annotationMode}`); + } + if (isOpList) { + renderingIntent += RenderingIntentFlag.OPLIST; + } + return { + renderingIntent, + cacheKey: `${renderingIntent}_${annotationStorageSerializable.hash}`, + annotationStorageSerializable + }; + } + destroy() { + if (this.destroyCapability) { + return this.destroyCapability.promise; + } + this.destroyed = true; + this.destroyCapability = Promise.withResolvers(); + this.#passwordCapability?.reject(new Error("Worker was destroyed during onPassword callback")); + const waitOn = []; + for (const page of this.#pageCache.values()) { + waitOn.push(page._destroy()); + } + this.#pageCache.clear(); + this.#pagePromises.clear(); + this.#pageRefCache.clear(); + if (this.hasOwnProperty("annotationStorage")) { + this.annotationStorage.resetModified(); + } + const terminated = this.messageHandler.sendWithPromise("Terminate", null); + waitOn.push(terminated); + Promise.all(waitOn).then(() => { + this.commonObjs.clear(); + this.fontLoader.clear(); + this.#methodPromises.clear(); + this.filterFactory.destroy(); + TextLayer.cleanup(); + this._networkStream?.cancelAllRequests(new AbortException("Worker was terminated.")); + if (this.messageHandler) { + this.messageHandler.destroy(); + this.messageHandler = null; + } + this.destroyCapability.resolve(); + }, this.destroyCapability.reject); + return this.destroyCapability.promise; + } + setupMessageHandler() { + const { + messageHandler, + loadingTask + } = this; + messageHandler.on("GetReader", (data, sink) => { + assert(this._networkStream, "GetReader - no `IPDFStream` instance available."); + this._fullReader = this._networkStream.getFullReader(); + this._fullReader.onProgress = evt => { + this._lastProgress = { + loaded: evt.loaded, + total: evt.total + }; + }; + sink.onPull = () => { + this._fullReader.read().then(function ({ + value, + done + }) { + if (done) { + sink.close(); + return; + } + assert(value instanceof ArrayBuffer, "GetReader - expected an ArrayBuffer."); + sink.enqueue(new Uint8Array(value), 1, [value]); + }).catch(reason => { + sink.error(reason); + }); + }; + sink.onCancel = reason => { + this._fullReader.cancel(reason); + sink.ready.catch(readyReason => { + if (this.destroyed) { + return; + } + throw readyReason; + }); + }; + }); + messageHandler.on("ReaderHeadersReady", data => { + const headersCapability = Promise.withResolvers(); + const fullReader = this._fullReader; + fullReader.headersReady.then(() => { + if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { + if (this._lastProgress) { + loadingTask.onProgress?.(this._lastProgress); + } + fullReader.onProgress = evt => { + loadingTask.onProgress?.({ + loaded: evt.loaded, + total: evt.total + }); + }; + } + headersCapability.resolve({ + isStreamingSupported: fullReader.isStreamingSupported, + isRangeSupported: fullReader.isRangeSupported, + contentLength: fullReader.contentLength + }); + }, headersCapability.reject); + return headersCapability.promise; + }); + messageHandler.on("GetRangeReader", (data, sink) => { + assert(this._networkStream, "GetRangeReader - no `IPDFStream` instance available."); + const rangeReader = this._networkStream.getRangeReader(data.begin, data.end); + if (!rangeReader) { + sink.close(); + return; + } + sink.onPull = () => { + rangeReader.read().then(function ({ + value, + done + }) { + if (done) { + sink.close(); + return; + } + assert(value instanceof ArrayBuffer, "GetRangeReader - expected an ArrayBuffer."); + sink.enqueue(new Uint8Array(value), 1, [value]); + }).catch(reason => { + sink.error(reason); + }); + }; + sink.onCancel = reason => { + rangeReader.cancel(reason); + sink.ready.catch(readyReason => { + if (this.destroyed) { + return; + } + throw readyReason; + }); + }; + }); + messageHandler.on("GetDoc", ({ + pdfInfo + }) => { + this._numPages = pdfInfo.numPages; + this._htmlForXfa = pdfInfo.htmlForXfa; + delete pdfInfo.htmlForXfa; + loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); + }); + messageHandler.on("DocException", function (ex) { + let reason; + switch (ex.name) { + case "PasswordException": + reason = new PasswordException(ex.message, ex.code); + break; + case "InvalidPDFException": + reason = new InvalidPDFException(ex.message); + break; + case "MissingPDFException": + reason = new MissingPDFException(ex.message); + break; + case "UnexpectedResponseException": + reason = new UnexpectedResponseException(ex.message, ex.status); + break; + case "UnknownErrorException": + reason = new UnknownErrorException(ex.message, ex.details); + break; + default: + unreachable("DocException - expected a valid Error."); + } + loadingTask._capability.reject(reason); + }); + messageHandler.on("PasswordRequest", exception => { + this.#passwordCapability = Promise.withResolvers(); + if (loadingTask.onPassword) { + const updatePassword = password => { + if (password instanceof Error) { + this.#passwordCapability.reject(password); + } else { + this.#passwordCapability.resolve({ + password + }); + } + }; + try { + loadingTask.onPassword(updatePassword, exception.code); + } catch (ex) { + this.#passwordCapability.reject(ex); + } + } else { + this.#passwordCapability.reject(new PasswordException(exception.message, exception.code)); + } + return this.#passwordCapability.promise; + }); + messageHandler.on("DataLoaded", data => { + loadingTask.onProgress?.({ + loaded: data.length, + total: data.length + }); + this.downloadInfoCapability.resolve(data); + }); + messageHandler.on("StartRenderPage", data => { + if (this.destroyed) { + return; + } + const page = this.#pageCache.get(data.pageIndex); + page._startRenderPage(data.transparency, data.cacheKey); + }); + messageHandler.on("commonobj", ([id, type, exportedData]) => { + if (this.destroyed) { + return null; + } + if (this.commonObjs.has(id)) { + return null; + } + switch (type) { + case "Font": + const { + disableFontFace, + fontExtraProperties, + pdfBug + } = this._params; + if ("error" in exportedData) { + const exportedError = exportedData.error; + warn(`Error during font loading: ${exportedError}`); + this.commonObjs.resolve(id, exportedError); + break; + } + const inspectFont = pdfBug && globalThis.FontInspector?.enabled ? (font, url) => globalThis.FontInspector.fontAdded(font, url) : null; + const font = new FontFaceObject(exportedData, { + disableFontFace, + inspectFont + }); + this.fontLoader.bind(font).catch(() => messageHandler.sendWithPromise("FontFallback", { + id + })).finally(() => { + if (!fontExtraProperties && font.data) { + font.data = null; + } + this.commonObjs.resolve(id, font); + }); + break; + case "CopyLocalImage": + const { + imageRef + } = exportedData; + assert(imageRef, "The imageRef must be defined."); + for (const pageProxy of this.#pageCache.values()) { + for (const [, data] of pageProxy.objs) { + if (data?.ref !== imageRef) { + continue; + } + if (!data.dataLen) { + return null; + } + this.commonObjs.resolve(id, structuredClone(data)); + return data.dataLen; + } + } + break; + case "FontPath": + case "Image": + case "Pattern": + this.commonObjs.resolve(id, exportedData); + break; + default: + throw new Error(`Got unknown common object type ${type}`); + } + return null; + }); + messageHandler.on("obj", ([id, pageIndex, type, imageData]) => { + if (this.destroyed) { + return; + } + const pageProxy = this.#pageCache.get(pageIndex); + if (pageProxy.objs.has(id)) { + return; + } + if (pageProxy._intentStates.size === 0) { + imageData?.bitmap?.close(); + return; + } + switch (type) { + case "Image": + pageProxy.objs.resolve(id, imageData); + if (imageData?.dataLen > MAX_IMAGE_SIZE_TO_CACHE) { + pageProxy._maybeCleanupAfterRender = true; + } + break; + case "Pattern": + pageProxy.objs.resolve(id, imageData); + break; + default: + throw new Error(`Got unknown object type ${type}`); + } + }); + messageHandler.on("DocProgress", data => { + if (this.destroyed) { + return; + } + loadingTask.onProgress?.({ + loaded: data.loaded, + total: data.total + }); + }); + messageHandler.on("FetchBuiltInCMap", data => { + if (this.destroyed) { + return Promise.reject(new Error("Worker was destroyed.")); + } + if (!this.cMapReaderFactory) { + return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.")); + } + return this.cMapReaderFactory.fetch(data); + }); + messageHandler.on("FetchStandardFontData", data => { + if (this.destroyed) { + return Promise.reject(new Error("Worker was destroyed.")); + } + if (!this.standardFontDataFactory) { + return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")); + } + return this.standardFontDataFactory.fetch(data); + }); + } + getData() { + return this.messageHandler.sendWithPromise("GetData", null); + } + saveDocument() { + if (this.annotationStorage.size <= 0) { + warn("saveDocument called while `annotationStorage` is empty, " + "please use the getData-method instead."); + } + const { + map, + transfer + } = this.annotationStorage.serializable; + return this.messageHandler.sendWithPromise("SaveDocument", { + isPureXfa: !!this._htmlForXfa, + numPages: this._numPages, + annotationStorage: map, + filename: this._fullReader?.filename ?? null + }, transfer).finally(() => { + this.annotationStorage.resetModified(); + }); + } + getPage(pageNumber) { + if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { + return Promise.reject(new Error("Invalid page request.")); + } + const pageIndex = pageNumber - 1, + cachedPromise = this.#pagePromises.get(pageIndex); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise("GetPage", { + pageIndex + }).then(pageInfo => { + if (this.destroyed) { + throw new Error("Transport destroyed"); + } + if (pageInfo.refStr) { + this.#pageRefCache.set(pageInfo.refStr, pageNumber); + } + const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug); + this.#pageCache.set(pageIndex, page); + return page; + }); + this.#pagePromises.set(pageIndex, promise); + return promise; + } + getPageIndex(ref) { + if (!isRefProxy(ref)) { + return Promise.reject(new Error("Invalid pageIndex request.")); + } + return this.messageHandler.sendWithPromise("GetPageIndex", { + num: ref.num, + gen: ref.gen + }); + } + getAnnotations(pageIndex, intent) { + return this.messageHandler.sendWithPromise("GetAnnotations", { + pageIndex, + intent + }); + } + getFieldObjects() { + return this.#cacheSimpleMethod("GetFieldObjects"); + } + hasJSActions() { + return this.#cacheSimpleMethod("HasJSActions"); + } + getCalculationOrderIds() { + return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null); + } + getDestinations() { + return this.messageHandler.sendWithPromise("GetDestinations", null); + } + getDestination(id) { + if (typeof id !== "string") { + return Promise.reject(new Error("Invalid destination request.")); + } + return this.messageHandler.sendWithPromise("GetDestination", { + id + }); + } + getPageLabels() { + return this.messageHandler.sendWithPromise("GetPageLabels", null); + } + getPageLayout() { + return this.messageHandler.sendWithPromise("GetPageLayout", null); + } + getPageMode() { + return this.messageHandler.sendWithPromise("GetPageMode", null); + } + getViewerPreferences() { + return this.messageHandler.sendWithPromise("GetViewerPreferences", null); + } + getOpenAction() { + return this.messageHandler.sendWithPromise("GetOpenAction", null); + } + getAttachments() { + return this.messageHandler.sendWithPromise("GetAttachments", null); + } + getDocJSActions() { + return this.#cacheSimpleMethod("GetDocJSActions"); + } + getPageJSActions(pageIndex) { + return this.messageHandler.sendWithPromise("GetPageJSActions", { + pageIndex + }); + } + getStructTree(pageIndex) { + return this.messageHandler.sendWithPromise("GetStructTree", { + pageIndex + }); + } + getOutline() { + return this.messageHandler.sendWithPromise("GetOutline", null); + } + getOptionalContentConfig(renderingIntent) { + return this.#cacheSimpleMethod("GetOptionalContentConfig").then(data => new OptionalContentConfig(data, renderingIntent)); + } + getPermissions() { + return this.messageHandler.sendWithPromise("GetPermissions", null); + } + getMetadata() { + const name = "GetMetadata", + cachedPromise = this.#methodPromises.get(name); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise(name, null).then(results => ({ + info: results[0], + metadata: results[1] ? new Metadata(results[1]) : null, + contentDispositionFilename: this._fullReader?.filename ?? null, + contentLength: this._fullReader?.contentLength ?? null + })); + this.#methodPromises.set(name, promise); + return promise; + } + getMarkInfo() { + return this.messageHandler.sendWithPromise("GetMarkInfo", null); + } + async startCleanup(keepLoadedFonts = false) { + if (this.destroyed) { + return; + } + await this.messageHandler.sendWithPromise("Cleanup", null); + for (const page of this.#pageCache.values()) { + const cleanupSuccessful = page.cleanup(); + if (!cleanupSuccessful) { + throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`); + } + } + this.commonObjs.clear(); + if (!keepLoadedFonts) { + this.fontLoader.clear(); + } + this.#methodPromises.clear(); + this.filterFactory.destroy(true); + TextLayer.cleanup(); + } + cachedPageNumber(ref) { + if (!isRefProxy(ref)) { + return null; + } + const refStr = ref.gen === 0 ? `${ref.num}R` : `${ref.num}R${ref.gen}`; + return this.#pageRefCache.get(refStr) ?? null; + } + get loadingParams() { + const { + disableAutoFetch, + enableXfa + } = this._params; + return shadow(this, "loadingParams", { + disableAutoFetch, + enableXfa + }); + } +} +const INITIAL_DATA = Symbol("INITIAL_DATA"); +class PDFObjects { + #objs = Object.create(null); + #ensureObj(objId) { + return this.#objs[objId] ||= { + ...Promise.withResolvers(), + data: INITIAL_DATA + }; + } + get(objId, callback = null) { + if (callback) { + const obj = this.#ensureObj(objId); + obj.promise.then(() => callback(obj.data)); + return null; + } + const obj = this.#objs[objId]; + if (!obj || obj.data === INITIAL_DATA) { + throw new Error(`Requesting object that isn't resolved yet ${objId}.`); + } + return obj.data; + } + has(objId) { + const obj = this.#objs[objId]; + return !!obj && obj.data !== INITIAL_DATA; + } + resolve(objId, data = null) { + const obj = this.#ensureObj(objId); + obj.data = data; + obj.resolve(); + } + clear() { + for (const objId in this.#objs) { + const { + data + } = this.#objs[objId]; + data?.bitmap?.close(); + } + this.#objs = Object.create(null); + } + *[Symbol.iterator]() { + for (const objId in this.#objs) { + const { + data + } = this.#objs[objId]; + if (data === INITIAL_DATA) { + continue; + } + yield [objId, data]; + } + } +} +class RenderTask { + #internalRenderTask = null; + constructor(internalRenderTask) { + this.#internalRenderTask = internalRenderTask; + this.onContinue = null; + } + get promise() { + return this.#internalRenderTask.capability.promise; + } + cancel(extraDelay = 0) { + this.#internalRenderTask.cancel(null, extraDelay); + } + get separateAnnots() { + const { + separateAnnots + } = this.#internalRenderTask.operatorList; + if (!separateAnnots) { + return false; + } + const { + annotationCanvasMap + } = this.#internalRenderTask; + return separateAnnots.form || separateAnnots.canvas && annotationCanvasMap?.size > 0; + } +} +class InternalRenderTask { + static #canvasInUse = new WeakSet(); + constructor({ + callback, + params, + objs, + commonObjs, + annotationCanvasMap, + operatorList, + pageIndex, + canvasFactory, + filterFactory, + useRequestAnimationFrame = false, + pdfBug = false, + pageColors = null + }) { + this.callback = callback; + this.params = params; + this.objs = objs; + this.commonObjs = commonObjs; + this.annotationCanvasMap = annotationCanvasMap; + this.operatorListIdx = null; + this.operatorList = operatorList; + this._pageIndex = pageIndex; + this.canvasFactory = canvasFactory; + this.filterFactory = filterFactory; + this._pdfBug = pdfBug; + this.pageColors = pageColors; + this.running = false; + this.graphicsReadyCallback = null; + this.graphicsReady = false; + this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; + this.cancelled = false; + this.capability = Promise.withResolvers(); + this.task = new RenderTask(this); + this._cancelBound = this.cancel.bind(this); + this._continueBound = this._continue.bind(this); + this._scheduleNextBound = this._scheduleNext.bind(this); + this._nextBound = this._next.bind(this); + this._canvas = params.canvasContext.canvas; + } + get completed() { + return this.capability.promise.catch(function () {}); + } + initializeGraphics({ + transparency = false, + optionalContentConfig + }) { + if (this.cancelled) { + return; + } + if (this._canvas) { + if (InternalRenderTask.#canvasInUse.has(this._canvas)) { + throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed."); + } + InternalRenderTask.#canvasInUse.add(this._canvas); + } + if (this._pdfBug && globalThis.StepperManager?.enabled) { + this.stepper = globalThis.StepperManager.create(this._pageIndex); + this.stepper.init(this.operatorList); + this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); + } + const { + canvasContext, + viewport, + transform, + background + } = this.params; + this.gfx = new CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { + optionalContentConfig + }, this.annotationCanvasMap, this.pageColors); + this.gfx.beginDrawing({ + transform, + viewport, + transparency, + background + }); + this.operatorListIdx = 0; + this.graphicsReady = true; + this.graphicsReadyCallback?.(); + } + cancel(error = null, extraDelay = 0) { + this.running = false; + this.cancelled = true; + this.gfx?.endDrawing(); + InternalRenderTask.#canvasInUse.delete(this._canvas); + this.callback(error || new RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay)); + } + operatorListChanged() { + if (!this.graphicsReady) { + this.graphicsReadyCallback ||= this._continueBound; + return; + } + this.stepper?.updateOperatorList(this.operatorList); + if (this.running) { + return; + } + this._continue(); + } + _continue() { + this.running = true; + if (this.cancelled) { + return; + } + if (this.task.onContinue) { + this.task.onContinue(this._scheduleNextBound); + } else { + this._scheduleNext(); + } + } + _scheduleNext() { + if (this._useRequestAnimationFrame) { + window.requestAnimationFrame(() => { + this._nextBound().catch(this._cancelBound); + }); + } else { + Promise.resolve().then(this._nextBound).catch(this._cancelBound); + } + } + async _next() { + if (this.cancelled) { + return; + } + this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); + if (this.operatorListIdx === this.operatorList.argsArray.length) { + this.running = false; + if (this.operatorList.lastChunk) { + this.gfx.endDrawing(); + InternalRenderTask.#canvasInUse.delete(this._canvas); + this.callback(); + } + } + } +} +const version = "4.3.98"; +const build = "8dba041e6"; + +;// CONCATENATED MODULE: ./src/shared/scripting_utils.js +function makeColorComp(n) { + return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0"); +} +function scaleAndClamp(x) { + return Math.max(0, Math.min(255, 255 * x)); +} +class ColorConverters { + static CMYK_G([c, y, m, k]) { + return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)]; + } + static G_CMYK([g]) { + return ["CMYK", 0, 0, 0, 1 - g]; + } + static G_RGB([g]) { + return ["RGB", g, g, g]; + } + static G_rgb([g]) { + g = scaleAndClamp(g); + return [g, g, g]; + } + static G_HTML([g]) { + const G = makeColorComp(g); + return `#${G}${G}${G}`; + } + static RGB_G([r, g, b]) { + return ["G", 0.3 * r + 0.59 * g + 0.11 * b]; + } + static RGB_rgb(color) { + return color.map(scaleAndClamp); + } + static RGB_HTML(color) { + return `#${color.map(makeColorComp).join("")}`; + } + static T_HTML() { + return "#00000000"; + } + static T_rgb() { + return [null]; + } + static CMYK_RGB([c, y, m, k]) { + return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)]; + } + static CMYK_rgb([c, y, m, k]) { + return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))]; + } + static CMYK_HTML(components) { + const rgb = this.CMYK_RGB(components).slice(1); + return this.RGB_HTML(rgb); + } + static RGB_CMYK([r, g, b]) { + const c = 1 - r; + const m = 1 - g; + const y = 1 - b; + const k = Math.min(c, m, y); + return ["CMYK", c, m, y, k]; + } +} + +;// CONCATENATED MODULE: ./src/display/xfa_layer.js + +class XfaLayer { + static setupStorage(html, id, element, storage, intent) { + const storedData = storage.getValue(id, { + value: null + }); + switch (element.name) { + case "textarea": + if (storedData.value !== null) { + html.textContent = storedData.value; + } + if (intent === "print") { + break; + } + html.addEventListener("input", event => { + storage.setValue(id, { + value: event.target.value + }); + }); + break; + case "input": + if (element.attributes.type === "radio" || element.attributes.type === "checkbox") { + if (storedData.value === element.attributes.xfaOn) { + html.setAttribute("checked", true); + } else if (storedData.value === element.attributes.xfaOff) { + html.removeAttribute("checked"); + } + if (intent === "print") { + break; + } + html.addEventListener("change", event => { + storage.setValue(id, { + value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff") + }); + }); + } else { + if (storedData.value !== null) { + html.setAttribute("value", storedData.value); + } + if (intent === "print") { + break; + } + html.addEventListener("input", event => { + storage.setValue(id, { + value: event.target.value + }); + }); + } + break; + case "select": + if (storedData.value !== null) { + html.setAttribute("value", storedData.value); + for (const option of element.children) { + if (option.attributes.value === storedData.value) { + option.attributes.selected = true; + } else if (option.attributes.hasOwnProperty("selected")) { + delete option.attributes.selected; + } + } + } + html.addEventListener("input", event => { + const options = event.target.options; + const value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value; + storage.setValue(id, { + value + }); + }); + break; + } + } + static setAttributes({ + html, + element, + storage = null, + intent, + linkService + }) { + const { + attributes + } = element; + const isHTMLAnchorElement = html instanceof HTMLAnchorElement; + if (attributes.type === "radio") { + attributes.name = `${attributes.name}-${intent}`; + } + for (const [key, value] of Object.entries(attributes)) { + if (value === null || value === undefined) { + continue; + } + switch (key) { + case "class": + if (value.length) { + html.setAttribute(key, value.join(" ")); + } + break; + case "dataId": + break; + case "id": + html.setAttribute("data-element-id", value); + break; + case "style": + Object.assign(html.style, value); + break; + case "textContent": + html.textContent = value; + break; + default: + if (!isHTMLAnchorElement || key !== "href" && key !== "newWindow") { + html.setAttribute(key, value); + } + } + } + if (isHTMLAnchorElement) { + linkService.addLinkAttributes(html, attributes.href, attributes.newWindow); + } + if (storage && attributes.dataId) { + this.setupStorage(html, attributes.dataId, element, storage); + } + } + static render(parameters) { + const storage = parameters.annotationStorage; + const linkService = parameters.linkService; + const root = parameters.xfaHtml; + const intent = parameters.intent || "display"; + const rootHtml = document.createElement(root.name); + if (root.attributes) { + this.setAttributes({ + html: rootHtml, + element: root, + intent, + linkService + }); + } + const isNotForRichText = intent !== "richText"; + const rootDiv = parameters.div; + rootDiv.append(rootHtml); + if (parameters.viewport) { + const transform = `matrix(${parameters.viewport.transform.join(",")})`; + rootDiv.style.transform = transform; + } + if (isNotForRichText) { + rootDiv.setAttribute("class", "xfaLayer xfaFont"); + } + const textDivs = []; + if (root.children.length === 0) { + if (root.value) { + const node = document.createTextNode(root.value); + rootHtml.append(node); + if (isNotForRichText && XfaText.shouldBuildText(root.name)) { + textDivs.push(node); + } + } + return { + textDivs + }; + } + const stack = [[root, -1, rootHtml]]; + while (stack.length > 0) { + const [parent, i, html] = stack.at(-1); + if (i + 1 === parent.children.length) { + stack.pop(); + continue; + } + const child = parent.children[++stack.at(-1)[1]]; + if (child === null) { + continue; + } + const { + name + } = child; + if (name === "#text") { + const node = document.createTextNode(child.value); + textDivs.push(node); + html.append(node); + continue; + } + const childHtml = child?.attributes?.xmlns ? document.createElementNS(child.attributes.xmlns, name) : document.createElement(name); + html.append(childHtml); + if (child.attributes) { + this.setAttributes({ + html: childHtml, + element: child, + storage, + intent, + linkService + }); + } + if (child.children?.length > 0) { + stack.push([child, -1, childHtml]); + } else if (child.value) { + const node = document.createTextNode(child.value); + if (isNotForRichText && XfaText.shouldBuildText(name)) { + textDivs.push(node); + } + childHtml.append(node); + } + } + for (const el of rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")) { + el.setAttribute("readOnly", true); + } + return { + textDivs + }; + } + static update(parameters) { + const transform = `matrix(${parameters.viewport.transform.join(",")})`; + parameters.div.style.transform = transform; + parameters.div.hidden = false; + } +} + +;// CONCATENATED MODULE: ./src/display/annotation_layer.js + -/***/ }), -/* 29 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.StampAnnotationElement = exports.InkAnnotationElement = exports.FreeTextAnnotationElement = exports.AnnotationLayer = void 0; -var _util = __w_pdfjs_require__(1); -var _display_utils = __w_pdfjs_require__(6); -var _annotation_storage = __w_pdfjs_require__(3); -var _scripting_utils = __w_pdfjs_require__(30); -var _displayL10n_utils = __w_pdfjs_require__(31); -var _xfa_layer = __w_pdfjs_require__(32); const DEFAULT_TAB_INDEX = 1000; -const DEFAULT_FONT_SIZE = 9; +const annotation_layer_DEFAULT_FONT_SIZE = 9; const GetElementsByNameSet = new WeakSet(); function getRectDims(rect) { return { @@ -13858,11 +12783,11 @@ class AnnotationElementFactory { static create(parameters) { const subtype = parameters.data.annotationType; switch (subtype) { - case _util.AnnotationType.LINK: + case AnnotationType.LINK: return new LinkAnnotationElement(parameters); - case _util.AnnotationType.TEXT: + case AnnotationType.TEXT: return new TextAnnotationElement(parameters); - case _util.AnnotationType.WIDGET: + case AnnotationType.WIDGET: const fieldType = parameters.data.fieldType; switch (fieldType) { case "Tx": @@ -13880,35 +12805,35 @@ class AnnotationElementFactory { return new SignatureWidgetAnnotationElement(parameters); } return new WidgetAnnotationElement(parameters); - case _util.AnnotationType.POPUP: + case AnnotationType.POPUP: return new PopupAnnotationElement(parameters); - case _util.AnnotationType.FREETEXT: + case AnnotationType.FREETEXT: return new FreeTextAnnotationElement(parameters); - case _util.AnnotationType.LINE: + case AnnotationType.LINE: return new LineAnnotationElement(parameters); - case _util.AnnotationType.SQUARE: + case AnnotationType.SQUARE: return new SquareAnnotationElement(parameters); - case _util.AnnotationType.CIRCLE: + case AnnotationType.CIRCLE: return new CircleAnnotationElement(parameters); - case _util.AnnotationType.POLYLINE: + case AnnotationType.POLYLINE: return new PolylineAnnotationElement(parameters); - case _util.AnnotationType.CARET: + case AnnotationType.CARET: return new CaretAnnotationElement(parameters); - case _util.AnnotationType.INK: + case AnnotationType.INK: return new InkAnnotationElement(parameters); - case _util.AnnotationType.POLYGON: + case AnnotationType.POLYGON: return new PolygonAnnotationElement(parameters); - case _util.AnnotationType.HIGHLIGHT: + case AnnotationType.HIGHLIGHT: return new HighlightAnnotationElement(parameters); - case _util.AnnotationType.UNDERLINE: + case AnnotationType.UNDERLINE: return new UnderlineAnnotationElement(parameters); - case _util.AnnotationType.SQUIGGLY: + case AnnotationType.SQUIGGLY: return new SquigglyAnnotationElement(parameters); - case _util.AnnotationType.STRIKEOUT: + case AnnotationType.STRIKEOUT: return new StrikeOutAnnotationElement(parameters); - case _util.AnnotationType.STAMP: + case AnnotationType.STAMP: return new StampAnnotationElement(parameters); - case _util.AnnotationType.FILEATTACHMENT: + case AnnotationType.FILEATTACHMENT: return new FileAttachmentAnnotationElement(parameters); default: return new AnnotationElement(parameters); @@ -13916,7 +12841,9 @@ class AnnotationElementFactory { } } class AnnotationElement { + #updates = null; #hasBorder = false; + #popupElement = null; constructor(parameters, { isRenderable = false, ignoreBorder = false, @@ -13952,6 +12879,63 @@ class AnnotationElement { get hasPopupData() { return AnnotationElement._hasPopupData(this.data); } + updateEdited(params) { + if (!this.container) { + return; + } + this.#updates ||= { + rect: this.data.rect.slice(0) + }; + const { + rect + } = params; + if (rect) { + this.#setRectEdited(rect); + } + this.#popupElement?.popup.updateEdited(params); + } + resetEdited() { + if (!this.#updates) { + return; + } + this.#setRectEdited(this.#updates.rect); + this.#popupElement?.popup.resetEdited(); + this.#updates = null; + } + #setRectEdited(rect) { + const { + container: { + style + }, + data: { + rect: currentRect, + rotation + }, + parent: { + viewport: { + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } + } + } = this; + currentRect?.splice(0, 4, ...rect); + const { + width, + height + } = getRectDims(rect); + style.left = `${100 * (rect[0] - pageX) / pageWidth}%`; + style.top = `${100 * (pageHeight - rect[3] + pageY) / pageHeight}%`; + if (rotation === 0) { + style.width = `${100 * width / pageWidth}%`; + style.height = `${100 * height / pageHeight}%`; + } else { + this.setRotation(rotation); + } + } _createContainer(ignoreBorder) { const { data, @@ -13965,19 +12949,19 @@ class AnnotationElement { if (!(this instanceof WidgetAnnotationElement)) { container.tabIndex = DEFAULT_TAB_INDEX; } - container.style.zIndex = this.parent.zIndex++; - if (this.data.popupRef) { + const { + style + } = container; + style.zIndex = this.parent.zIndex++; + if (data.popupRef) { container.setAttribute("aria-haspopup", "dialog"); } + if (data.alternativeText) { + container.title = data.alternativeText; + } if (data.noRotate) { container.classList.add("norotate"); } - const { - pageWidth, - pageHeight, - pageX, - pageY - } = viewport.rawDims; if (!data.rect || this instanceof PopupAnnotationElement) { const { rotation @@ -13991,33 +12975,32 @@ class AnnotationElement { width, height } = getRectDims(data.rect); - const rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); if (!ignoreBorder && data.borderStyle.width > 0) { - container.style.borderWidth = `${data.borderStyle.width}px`; + style.borderWidth = `${data.borderStyle.width}px`; const horizontalRadius = data.borderStyle.horizontalCornerRadius; const verticalRadius = data.borderStyle.verticalCornerRadius; if (horizontalRadius > 0 || verticalRadius > 0) { const radius = `calc(${horizontalRadius}px * var(--scale-factor)) / calc(${verticalRadius}px * var(--scale-factor))`; - container.style.borderRadius = radius; + style.borderRadius = radius; } else if (this instanceof RadioButtonWidgetAnnotationElement) { const radius = `calc(${width}px * var(--scale-factor)) / calc(${height}px * var(--scale-factor))`; - container.style.borderRadius = radius; + style.borderRadius = radius; } switch (data.borderStyle.style) { - case _util.AnnotationBorderStyleType.SOLID: - container.style.borderStyle = "solid"; + case AnnotationBorderStyleType.SOLID: + style.borderStyle = "solid"; break; - case _util.AnnotationBorderStyleType.DASHED: - container.style.borderStyle = "dashed"; + case AnnotationBorderStyleType.DASHED: + style.borderStyle = "dashed"; break; - case _util.AnnotationBorderStyleType.BEVELED: - (0, _util.warn)("Unimplemented border style: beveled"); + case AnnotationBorderStyleType.BEVELED: + warn("Unimplemented border style: beveled"); break; - case _util.AnnotationBorderStyleType.INSET: - (0, _util.warn)("Unimplemented border style: inset"); + case AnnotationBorderStyleType.INSET: + warn("Unimplemented border style: inset"); break; - case _util.AnnotationBorderStyleType.UNDERLINE: - container.style.borderBottomStyle = "solid"; + case AnnotationBorderStyleType.UNDERLINE: + style.borderBottomStyle = "solid"; break; default: break; @@ -14025,19 +13008,26 @@ class AnnotationElement { const borderColor = data.borderColor || null; if (borderColor) { this.#hasBorder = true; - container.style.borderColor = _util.Util.makeHexColor(borderColor[0] | 0, borderColor[1] | 0, borderColor[2] | 0); + style.borderColor = Util.makeHexColor(borderColor[0] | 0, borderColor[1] | 0, borderColor[2] | 0); } else { - container.style.borderWidth = 0; + style.borderWidth = 0; } } - container.style.left = `${100 * (rect[0] - pageX) / pageWidth}%`; - container.style.top = `${100 * (rect[1] - pageY) / pageHeight}%`; + const rect = Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); + const { + pageWidth, + pageHeight, + pageX, + pageY + } = viewport.rawDims; + style.left = `${100 * (rect[0] - pageX) / pageWidth}%`; + style.top = `${100 * (rect[1] - pageY) / pageHeight}%`; const { rotation } = data; if (data.hasOwnCanvas || rotation === 0) { - container.style.width = `${100 * width / pageWidth}%`; - container.style.height = `${100 * height / pageHeight}%`; + style.width = `${100 * width / pageWidth}%`; + style.height = `${100 * height / pageHeight}%`; } else { this.setRotation(rotation, container); } @@ -14072,12 +13062,12 @@ class AnnotationElement { const color = event.detail[jsName]; const colorType = color[0]; const colorArray = color.slice(1); - event.target.style[styleName] = _scripting_utils.ColorConverters[`${colorType}_HTML`](colorArray); + event.target.style[styleName] = ColorConverters[`${colorType}_HTML`](colorArray); this.annotationStorage.setValue(this.data.id, { - [styleName]: _scripting_utils.ColorConverters[`${colorType}_rgb`](colorArray) + [styleName]: ColorConverters[`${colorType}_rgb`](colorArray) }); }; - return (0, _util.shadow)(this, "_commonActions", { + return shadow(this, "_commonActions", { display: event => { const { display @@ -14259,7 +13249,7 @@ class AnnotationElement { data } = this; container.setAttribute("aria-haspopup", "dialog"); - const popup = new PopupAnnotationElement({ + const popup = this.#popupElement = new PopupAnnotationElement({ data: { color: data.color, titleObj: data.titleObj, @@ -14277,7 +13267,7 @@ class AnnotationElement { this.parent.div.append(popup.render()); } render() { - (0, _util.unreachable)("Abstract method `AnnotationElement.render` called"); + unreachable("Abstract method `AnnotationElement.render` called"); } _getElementsByName(name, skipId = null) { const fields = []; @@ -14298,7 +13288,7 @@ class AnnotationElement { const exportValue = typeof exportValues === "string" ? exportValues : null; const domElement = document.querySelector(`[data-element-id="${id}"]`); if (domElement && !GetElementsByNameSet.has(domElement)) { - (0, _util.warn)(`_getElementsByName - element not allowed: ${id}`); + warn(`_getElementsByName - element not allowed: ${id}`); continue; } fields.push({ @@ -14354,7 +13344,13 @@ class AnnotationElement { triggers.classList.add("highlightArea"); } } + get _isEditable() { + return false; + } _editOnDoubleClick() { + if (!this._isEditable) { + return; + } const { annotationEditorType: mode, data: { @@ -14394,7 +13390,7 @@ class LinkAnnotationElement extends AnnotationElement { this._bindNamedAction(link, data.action); isBound = true; } else if (data.attachment) { - this._bindAttachment(link, data.attachment); + this.#bindAttachment(link, data.attachment, data.attachmentDest); isBound = true; } else if (data.setOCGState) { this.#bindSetOCGState(link, data.setOCGState); @@ -14444,10 +13440,13 @@ class LinkAnnotationElement extends AnnotationElement { }; this.#setInternalLink(); } - _bindAttachment(link, attachment) { + #bindAttachment(link, attachment, dest = null) { link.href = this.linkService.getAnchorUrl(""); + if (attachment.description) { + link.title = attachment.description; + } link.onclick = () => { - this.downloadManager?.openOrDownloadData(this.container, attachment.content, attachment.filename); + this.downloadManager?.openOrDownloadData(attachment.content, attachment.filename, dest); return false; }; this.#setInternalLink(); @@ -14491,7 +13490,7 @@ class LinkAnnotationElement extends AnnotationElement { } this.#setInternalLink(); if (!this._fieldObjects) { - (0, _util.warn)(`_bindResetFormAction - "resetForm" action not supported, ` + "ensure that the `fieldObjects` parameter is provided."); + warn(`_bindResetFormAction - "resetForm" action not supported, ` + "ensure that the `fieldObjects` parameter is provided."); if (!otherClickAction) { link.onclick = () => false; } @@ -14568,7 +13567,7 @@ class LinkAnnotationElement extends AnnotationElement { if (!domElement) { continue; } else if (!GetElementsByNameSet.has(domElement)) { - (0, _util.warn)(`_bindResetFormAction - element not allowed: ${id}`); + warn(`_bindResetFormAction - element not allowed: ${id}`); continue; } domElement.dispatchEvent(new Event("resetform")); @@ -14597,11 +13596,10 @@ class TextAnnotationElement extends AnnotationElement { this.container.classList.add("textAnnotation"); const image = document.createElement("img"); image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg"; - image.alt = "[{{type}} Annotation]"; - image.dataset.l10nId = "text_annotation_type"; - image.dataset.l10nArgs = JSON.stringify({ + image.setAttribute("data-l10n-id", "pdfjs-text-annotation-type"); + image.setAttribute("data-l10n-args", JSON.stringify({ type: this.data.name - }); + })); if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } @@ -14611,9 +13609,6 @@ class TextAnnotationElement extends AnnotationElement { } class WidgetAnnotationElement extends AnnotationElement { render() { - if (this.data.alternativeText) { - this.container.title = this.data.alternativeText; - } return this.container; } showElementAndHideCanvas(element) { @@ -14625,11 +13620,7 @@ class WidgetAnnotationElement extends AnnotationElement { } } _getKeyModifier(event) { - const { - isWin, - isMac - } = _util.FeatureTest.platform; - return isWin && event.ctrlKey || isMac && event.metaKey; + return util_FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey; } _setEventListener(element, elementData, baseName, eventName, valueGetter) { if (baseName.includes("mouse")) { @@ -14691,29 +13682,29 @@ class WidgetAnnotationElement extends AnnotationElement { } _setBackgroundColor(element) { const color = this.data.backgroundColor || null; - element.style.backgroundColor = color === null ? "transparent" : _util.Util.makeHexColor(color[0], color[1], color[2]); + element.style.backgroundColor = color === null ? "transparent" : Util.makeHexColor(color[0], color[1], color[2]); } _setTextStyle(element) { const TEXT_ALIGNMENT = ["left", "center", "right"]; const { fontColor } = this.data.defaultAppearanceData; - const fontSize = this.data.defaultAppearanceData.fontSize || DEFAULT_FONT_SIZE; + const fontSize = this.data.defaultAppearanceData.fontSize || annotation_layer_DEFAULT_FONT_SIZE; const style = element.style; let computedFontSize; const BORDER_SIZE = 2; const roundToOneDecimal = x => Math.round(10 * x) / 10; if (this.data.multiLine) { const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); - const numberOfLines = Math.round(height / (_util.LINE_FACTOR * fontSize)) || 1; + const numberOfLines = Math.round(height / (LINE_FACTOR * fontSize)) || 1; const lineHeight = height / numberOfLines; - computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / _util.LINE_FACTOR)); + computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / LINE_FACTOR)); } else { const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); - computedFontSize = Math.min(fontSize, roundToOneDecimal(height / _util.LINE_FACTOR)); + computedFontSize = Math.min(fontSize, roundToOneDecimal(height / LINE_FACTOR)); } style.fontSize = `calc(${computedFontSize}px * var(--scale-factor))`; - style.color = _util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); + style.color = Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); if (this.data.textAlignment !== null) { style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; } @@ -14729,7 +13720,7 @@ class WidgetAnnotationElement extends AnnotationElement { } class TextWidgetAnnotationElement extends WidgetAnnotationElement { constructor(parameters) { - const isRenderable = parameters.renderForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue; + const isRenderable = parameters.renderForms || parameters.data.hasOwnCanvas || !parameters.data.hasAppearance && !!parameters.data.fieldValue; super(parameters, { isRenderable }); @@ -14832,7 +13823,9 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement { } elementData.lastCommittedValue = target.value; elementData.commitKey = 1; - elementData.focused = true; + if (!this.data.actions?.Focus) { + elementData.focused = true; + } }); element.addEventListener("updatefromsandbox", jsEvent => { this.showElementAndHideCanvas(jsEvent.target); @@ -14936,7 +13929,9 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement { if (!elementData.focused || !event.relatedTarget) { return; } - elementData.focused = false; + if (!this.data.actions?.Blur) { + elementData.focused = false; + } const { value } = event.target; @@ -15030,6 +14025,9 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement { element.textContent = this.data.fieldValue; element.style.verticalAlign = "middle"; element.style.display = "table-cell"; + if (this.data.hasOwnCanvas) { + element.hidden = true; + } } this._setTextStyle(element); this._setBackgroundColor(element); @@ -15139,6 +14137,13 @@ class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement { value }); } + if (value) { + for (const radio of this._getElementsByName(data.fieldName, id)) { + storage.setValue(radio.id, { + value: false + }); + } + } const element = document.createElement("input"); GetElementsByNameSet.add(element); element.setAttribute("data-element-id", id); @@ -15204,9 +14209,6 @@ class PushButtonWidgetAnnotationElement extends LinkAnnotationElement { render() { const container = super.render(); container.classList.add("buttonWidgetAnnotation", "pushButton"); - if (this.data.alternativeText) { - container.title = this.data.alternativeText; - } const linkElement = container.lastChild; if (this.enableScripting && this.hasJSActions && linkElement) { this._setDefaultPropertiesFromJS(linkElement); @@ -15288,12 +14290,10 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { let selectedValues = getValue(false); const getItems = event => { const options = event.target.options; - return Array.prototype.map.call(options, option => { - return { - displayValue: option.textContent, - exportValue: option.value - }; - }); + return Array.prototype.map.call(options, option => ({ + displayValue: option.textContent, + exportValue: option.value + })); }; if (this.enableScripting && this.hasJSActions) { selectElement.addEventListener("updatefromsandbox", jsEvent => { @@ -15405,6 +14405,7 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { }); selectElement.addEventListener("input", event => { const exportValue = getValue(true); + const change = getValue(false); storage.setValue(id, { value: exportValue }); @@ -15415,6 +14416,7 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { id, name: "Keystroke", value: selectedValues, + change, changeEx: exportValue, willCommit: false, commitKey: 1, @@ -15449,10 +14451,11 @@ class PopupAnnotationElement extends AnnotationElement { isRenderable: AnnotationElement._hasPopupData(data) }); this.elements = elements; + this.popup = null; } render() { this.container.classList.add("popupAnnotation"); - const popup = new PopupElement({ + const popup = this.popup = new PopupElement({ container: this.container, color: this.data.color, titleObj: this.data.titleObj, @@ -15471,12 +14474,11 @@ class PopupAnnotationElement extends AnnotationElement { elementIds.push(element.data.id); element.addHighlightArea(); } - this.container.setAttribute("aria-controls", elementIds.map(id => `${_util.AnnotationPrefix}${id}`).join(",")); + this.container.setAttribute("aria-controls", elementIds.map(id => `${AnnotationPrefix}${id}`).join(",")); return this.container; } } class PopupElement { - #dateTimePromise = null; #boundKeyDown = this.#keyDown.bind(this); #boundHide = this.#hide.bind(this); #boundShow = this.#show.bind(this); @@ -15484,14 +14486,17 @@ class PopupElement { #color = null; #container = null; #contentsObj = null; + #dateObj = null; #elements = null; #parent = null; #parentRect = null; #pinned = false; #popup = null; + #position = null; #rect = null; #richText = null; #titleObj = null; + #updates = null; #wasVisible = false; constructor({ container, @@ -15515,13 +14520,7 @@ class PopupElement { this.#rect = rect; this.#parentRect = parentRect; this.#elements = elements; - const dateObject = _display_utils.PDFDateString.toDateObject(modificationDate); - if (dateObject) { - this.#dateTimePromise = parent.l10n.get("annotation_date_string", { - date: dateObject.toLocaleDateString(), - time: dateObject.toLocaleTimeString() - }); - } + this.#dateObj = PDFDateString.toDateObject(modificationDate); this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup()); for (const element of this.trigger) { element.addEventListener("click", this.#boundToggle); @@ -15541,28 +14540,15 @@ class PopupElement { if (this.#popup) { return; } - const { - page: { - view - }, - viewport: { - rawDims: { - pageWidth, - pageHeight, - pageX, - pageY - } - } - } = this.#parent; const popup = this.#popup = document.createElement("div"); popup.className = "popup"; if (this.#color) { - const baseColor = popup.style.outlineColor = _util.Util.makeHexColor(...this.#color); + const baseColor = popup.style.outlineColor = Util.makeHexColor(...this.#color); if (CSS.supports("background-color", "color-mix(in srgb, red 30%, white)")) { popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`; } else { const BACKGROUND_ENLIGHT = 0.7; - popup.style.backgroundColor = _util.Util.makeHexColor(...this.#color.map(c => Math.floor(BACKGROUND_ENLIGHT * (255 - c) + c))); + popup.style.backgroundColor = Util.makeHexColor(...this.#color.map(c => Math.floor(BACKGROUND_ENLIGHT * (255 - c) + c))); } } const header = document.createElement("span"); @@ -15574,48 +14560,74 @@ class PopupElement { str: title.textContent } = this.#titleObj); popup.append(header); - if (this.#dateTimePromise) { + if (this.#dateObj) { const modificationDate = document.createElement("span"); modificationDate.classList.add("popupDate"); - this.#dateTimePromise.then(localized => { - modificationDate.textContent = localized; - }); + modificationDate.setAttribute("data-l10n-id", "pdfjs-annotation-date-string"); + modificationDate.setAttribute("data-l10n-args", JSON.stringify({ + date: this.#dateObj.toLocaleDateString(), + time: this.#dateObj.toLocaleTimeString() + })); header.append(modificationDate); } - const contentsObj = this.#contentsObj; - const richText = this.#richText; - if (richText?.str && (!contentsObj?.str || contentsObj.str === richText.str)) { - _xfa_layer.XfaLayer.render({ - xfaHtml: richText.html, + const html = this.#html; + if (html) { + XfaLayer.render({ + xfaHtml: html, intent: "richText", div: popup }); popup.lastChild.classList.add("richText", "popupContent"); } else { - const contents = this._formatContents(contentsObj); + const contents = this._formatContents(this.#contentsObj); popup.append(contents); } - let useParentRect = !!this.#parentRect; - let rect = useParentRect ? this.#parentRect : this.#rect; - for (const element of this.#elements) { - if (!rect || _util.Util.intersect(element.data.rect, rect) !== null) { - rect = element.data.rect; - useParentRect = true; - break; - } - } - const normalizedRect = _util.Util.normalizeRect([rect[0], view[3] - rect[1] + view[1], rect[2], view[3] - rect[3] + view[1]]); - const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5; - const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0; - const popupLeft = normalizedRect[0] + parentWidth; - const popupTop = normalizedRect[1]; - const { - style - } = this.#container; - style.left = `${100 * (popupLeft - pageX) / pageWidth}%`; - style.top = `${100 * (popupTop - pageY) / pageHeight}%`; this.#container.append(popup); } + get #html() { + const richText = this.#richText; + const contentsObj = this.#contentsObj; + if (richText?.str && (!contentsObj?.str || contentsObj.str === richText.str)) { + return this.#richText.html || null; + } + return null; + } + get #fontSize() { + return this.#html?.attributes?.style?.fontSize || 0; + } + get #fontColor() { + return this.#html?.attributes?.style?.color || null; + } + #makePopupContent(text) { + const popupLines = []; + const popupContent = { + str: text, + html: { + name: "div", + attributes: { + dir: "auto" + }, + children: [{ + name: "p", + children: popupLines + }] + } + }; + const lineAttributes = { + style: { + color: this.#fontColor, + fontSize: this.#fontSize ? `calc(${this.#fontSize}px * var(--scale-factor))` : "" + } + }; + for (const line of text.split("\n")) { + popupLines.push({ + name: "span", + value: line, + attributes: lineAttributes + }); + } + return popupContent; + } _formatContents({ str, dir @@ -15641,6 +14653,75 @@ class PopupElement { this.#toggle(); } } + updateEdited({ + rect, + popupContent + }) { + this.#updates ||= { + contentsObj: this.#contentsObj, + richText: this.#richText + }; + if (rect) { + this.#position = null; + } + if (popupContent) { + this.#richText = this.#makePopupContent(popupContent); + this.#contentsObj = null; + } + this.#popup?.remove(); + this.#popup = null; + } + resetEdited() { + if (!this.#updates) { + return; + } + ({ + contentsObj: this.#contentsObj, + richText: this.#richText + } = this.#updates); + this.#updates = null; + this.#popup?.remove(); + this.#popup = null; + this.#position = null; + } + #setPosition() { + if (this.#position !== null) { + return; + } + const { + page: { + view + }, + viewport: { + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } + } = this.#parent; + let useParentRect = !!this.#parentRect; + let rect = useParentRect ? this.#parentRect : this.#rect; + for (const element of this.#elements) { + if (!rect || Util.intersect(element.data.rect, rect) !== null) { + rect = element.data.rect; + useParentRect = true; + break; + } + } + const normalizedRect = Util.normalizeRect([rect[0], view[3] - rect[1] + view[1], rect[2], view[3] - rect[3] + view[1]]); + const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5; + const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0; + const popupLeft = normalizedRect[0] + parentWidth; + const popupTop = normalizedRect[1]; + this.#position = [100 * (popupLeft - pageX) / pageWidth, 100 * (popupTop - pageY) / pageHeight]; + const { + style + } = this.#container; + style.left = `${this.#position[0]}%`; + style.top = `${this.#position[1]}%`; + } #toggle() { this.#pinned = !this.#pinned; if (this.#pinned) { @@ -15658,6 +14739,7 @@ class PopupElement { this.render(); } if (!this.isVisible) { + this.#setPosition(); this.#container.hidden = false; this.#container.style.zIndex = parseInt(this.#container.style.zIndex) + 1000; } else if (this.#pinned) { @@ -15683,6 +14765,9 @@ class PopupElement { if (!this.#wasVisible) { return; } + if (!this.#popup) { + this.#show(); + } this.#wasVisible = false; this.#container.hidden = false; } @@ -15698,7 +14783,7 @@ class FreeTextAnnotationElement extends AnnotationElement { }); this.textContent = parameters.data.textContent; this.textPosition = parameters.data.textPosition; - this.annotationEditorType = _util.AnnotationEditorType.FREETEXT; + this.annotationEditorType = AnnotationEditorType.FREETEXT; } render() { this.container.classList.add("freeTextAnnotation"); @@ -15719,8 +14804,10 @@ class FreeTextAnnotationElement extends AnnotationElement { this._editOnDoubleClick(); return this.container; } + get _isEditable() { + return this.data.hasOwnCanvas; + } } -exports.FreeTextAnnotationElement = FreeTextAnnotationElement; class LineAnnotationElement extends AnnotationElement { #line = null; constructor(parameters) { @@ -15912,7 +14999,7 @@ class InkAnnotationElement extends AnnotationElement { }); this.containerClassName = "inkAnnotation"; this.svgElementName = "svg:polyline"; - this.annotationEditorType = _util.AnnotationEditorType.INK; + this.annotationEditorType = AnnotationEditorType.INK; } render() { this.container.classList.add(this.containerClassName); @@ -15951,7 +15038,6 @@ class InkAnnotationElement extends AnnotationElement { this.container.classList.add("highlightArea"); } } -exports.InkAnnotationElement = InkAnnotationElement; class HighlightAnnotationElement extends AnnotationElement { constructor(parameters) { super(parameters, { @@ -16031,7 +15117,6 @@ class StampAnnotationElement extends AnnotationElement { return this.container; } } -exports.StampAnnotationElement = StampAnnotationElement; class FileAttachmentAnnotationElement extends AnnotationElement { #trigger = null; constructor(parameters) { @@ -16039,15 +15124,13 @@ class FileAttachmentAnnotationElement extends AnnotationElement { isRenderable: true }); const { - filename, - content - } = this.data.file; - this.filename = (0, _display_utils.getFilenameFromUrl)(filename, true); - this.content = content; + file + } = this.data; + this.filename = file.filename; + this.content = file.content; this.linkService.eventBus?.dispatch("fileattachmentannotation", { source: this, - filename, - content + ...file }); } render() { @@ -16070,7 +15153,7 @@ class FileAttachmentAnnotationElement extends AnnotationElement { this.#trigger = trigger; const { isMac - } = _util.FeatureTest.platform; + } = util_FeatureTest.platform; container.addEventListener("keydown", evt => { if (evt.key === "Enter" && (isMac ? evt.metaKey : evt.ctrlKey)) { this.#download(); @@ -16091,7 +15174,7 @@ class FileAttachmentAnnotationElement extends AnnotationElement { this.container.classList.add("highlightArea"); } #download() { - this.downloadManager?.openOrDownloadData(this.container, this.content, this.filename); + this.downloadManager?.openOrDownloadData(this.content, this.filename); } } class AnnotationLayer { @@ -16102,22 +15185,21 @@ class AnnotationLayer { div, accessibilityManager, annotationCanvasMap, - l10n, + annotationEditorUIManager, page, viewport }) { this.div = div; this.#accessibilityManager = accessibilityManager; this.#annotationCanvasMap = annotationCanvasMap; - this.l10n = l10n; this.page = page; this.viewport = viewport; this.zIndex = 0; - this.l10n ||= _displayL10n_utils.NullL10n; + this._annotationEditorUIManager = annotationEditorUIManager; } #appendElement(element, id) { const contentElement = element.firstChild || element; - contentElement.id = `${_util.AnnotationPrefix}${id}`; + contentElement.id = `${AnnotationPrefix}${id}`; this.div.append(element); this.#accessibilityManager?.moveElementInDOM(this.div, element, contentElement, false); } @@ -16126,7 +15208,7 @@ class AnnotationLayer { annotations } = params; const layer = this.div; - (0, _display_utils.setLayerDimensions)(layer, this.viewport); + setLayerDimensions(layer, this.viewport); const popupToElements = new Map(); const elementParams = { data: null, @@ -16135,8 +15217,8 @@ class AnnotationLayer { downloadManager: params.downloadManager, imageResourcesPath: params.imageResourcesPath || "", renderForms: params.renderForms !== false, - svgFactory: new _display_utils.DOMSVGFactory(), - annotationStorage: params.annotationStorage || new _annotation_storage.AnnotationStorage(), + svgFactory: new DOMSVGFactory(), + annotationStorage: params.annotationStorage || new AnnotationStorage(), enableScripting: params.enableScripting === true, hasJSActions: params.hasJSActions, fieldObjects: params.fieldObjects, @@ -16147,7 +15229,7 @@ class AnnotationLayer { if (data.noHTML) { continue; } - const isPopupAnnotation = data.annotationType === _util.AnnotationType.POPUP; + const isPopupAnnotation = data.annotationType === AnnotationType.POPUP; if (!isPopupAnnotation) { const { width, @@ -16176,24 +15258,24 @@ class AnnotationLayer { elements.push(element); } } - if (element.annotationEditorType > 0) { - this.#editableAnnotations.set(element.data.id, element); - } const rendered = element.render(); if (data.hidden) { rendered.style.visibility = "hidden"; } this.#appendElement(rendered, data.id); + if (element.annotationEditorType > 0) { + this.#editableAnnotations.set(element.data.id, element); + this._annotationEditorUIManager?.renderAnnotationElement(element); + } } this.#setAnnotationCanvasMap(); - await this.l10n.translate(layer); } update({ viewport }) { const layer = this.div; this.viewport = viewport; - (0, _display_utils.setLayerDimensions)(layer, { + setLayerDimensions(layer, { rotation: viewport.rotation }); this.#setAnnotationCanvasMap(); @@ -16209,6 +15291,7 @@ class AnnotationLayer { if (!element) { continue; } + canvas.className = "annotationContent"; const { firstChild } = element; @@ -16216,8 +15299,10 @@ class AnnotationLayer { element.append(canvas); } else if (firstChild.nodeName === "CANVAS") { firstChild.replaceWith(canvas); - } else { + } else if (!firstChild.classList.contains("annotationContent")) { firstChild.before(canvas); + } else { + firstChild.after(canvas); } } this.#annotationCanvasMap.clear(); @@ -16229,404 +15314,2064 @@ class AnnotationLayer { return this.#editableAnnotations.get(id); } } -exports.AnnotationLayer = AnnotationLayer; -/***/ }), -/* 30 */ -/***/ ((__unused_webpack_module, exports) => { +;// CONCATENATED MODULE: ./src/display/editor/freetext.js -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ColorConverters = void 0; -function makeColorComp(n) { - return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0"); -} -function scaleAndClamp(x) { - return Math.max(0, Math.min(255, 255 * x)); -} -class ColorConverters { - static CMYK_G([c, y, m, k]) { - return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)]; - } - static G_CMYK([g]) { - return ["CMYK", 0, 0, 0, 1 - g]; - } - static G_RGB([g]) { - return ["RGB", g, g, g]; - } - static G_rgb([g]) { - g = scaleAndClamp(g); - return [g, g, g]; - } - static G_HTML([g]) { - const G = makeColorComp(g); - return `#${G}${G}${G}`; - } - static RGB_G([r, g, b]) { - return ["G", 0.3 * r + 0.59 * g + 0.11 * b]; - } - static RGB_rgb(color) { - return color.map(scaleAndClamp); - } - static RGB_HTML(color) { - return `#${color.map(makeColorComp).join("")}`; - } - static T_HTML() { - return "#00000000"; - } - static T_rgb() { - return [null]; - } - static CMYK_RGB([c, y, m, k]) { - return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)]; - } - static CMYK_rgb([c, y, m, k]) { - return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))]; - } - static CMYK_HTML(components) { - const rgb = this.CMYK_RGB(components).slice(1); - return this.RGB_HTML(rgb); - } - static RGB_CMYK([r, g, b]) { - const c = 1 - r; - const m = 1 - g; - const y = 1 - b; - const k = Math.min(c, m, y); - return ["CMYK", c, m, y, k]; - } -} -exports.ColorConverters = ColorConverters; -/***/ }), -/* 31 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.NullL10n = void 0; -exports.getL10nFallback = getL10nFallback; -const DEFAULT_L10N_STRINGS = { - of_pages: "of {{pagesCount}}", - page_of_pages: "({{pageNumber}} of {{pagesCount}})", - document_properties_kb: "{{size_kb}} KB ({{size_b}} bytes)", - document_properties_mb: "{{size_mb}} MB ({{size_b}} bytes)", - document_properties_date_string: "{{date}}, {{time}}", - document_properties_page_size_unit_inches: "in", - document_properties_page_size_unit_millimeters: "mm", - document_properties_page_size_orientation_portrait: "portrait", - document_properties_page_size_orientation_landscape: "landscape", - document_properties_page_size_name_a3: "A3", - document_properties_page_size_name_a4: "A4", - document_properties_page_size_name_letter: "Letter", - document_properties_page_size_name_legal: "Legal", - document_properties_page_size_dimension_string: "{{width}} × {{height}} {{unit}} ({{orientation}})", - document_properties_page_size_dimension_name_string: "{{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})", - document_properties_linearized_yes: "Yes", - document_properties_linearized_no: "No", - additional_layers: "Additional Layers", - page_landmark: "Page {{page}}", - thumb_page_title: "Page {{page}}", - thumb_page_canvas: "Thumbnail of Page {{page}}", - find_reached_top: "Reached top of document, continued from bottom", - find_reached_bottom: "Reached end of document, continued from top", - "find_match_count[one]": "{{current}} of {{total}} match", - "find_match_count[other]": "{{current}} of {{total}} matches", - "find_match_count_limit[one]": "More than {{limit}} match", - "find_match_count_limit[other]": "More than {{limit}} matches", - find_not_found: "Phrase not found", - page_scale_width: "Page Width", - page_scale_fit: "Page Fit", - page_scale_auto: "Automatic Zoom", - page_scale_actual: "Actual Size", - page_scale_percent: "{{scale}}%", - loading_error: "An error occurred while loading the PDF.", - invalid_file_error: "Invalid or corrupted PDF file.", - missing_file_error: "Missing PDF file.", - unexpected_response_error: "Unexpected server response.", - rendering_error: "An error occurred while rendering the page.", - annotation_date_string: "{{date}}, {{time}}", - printing_not_supported: "Warning: Printing is not fully supported by this browser.", - printing_not_ready: "Warning: The PDF is not fully loaded for printing.", - web_fonts_disabled: "Web fonts are disabled: unable to use embedded PDF fonts.", - free_text2_default_content: "Start typing…", - editor_free_text2_aria_label: "Text Editor", - editor_ink2_aria_label: "Draw Editor", - editor_ink_canvas_aria_label: "User-created image", - editor_alt_text_button_label: "Alt text", - editor_alt_text_edit_button_label: "Edit alt text", - editor_alt_text_decorative_tooltip: "Marked as decorative" -}; -{ - DEFAULT_L10N_STRINGS.print_progress_percent = "{{progress}}%"; -} -function getL10nFallback(key, args) { - switch (key) { - case "find_match_count": - key = `find_match_count[${args.total === 1 ? "one" : "other"}]`; - break; - case "find_match_count_limit": - key = `find_match_count_limit[${args.limit === 1 ? "one" : "other"}]`; - break; +const EOL_PATTERN = /\r\n?|\n/g; +class FreeTextEditor extends AnnotationEditor { + #boundEditorDivBlur = this.editorDivBlur.bind(this); + #boundEditorDivFocus = this.editorDivFocus.bind(this); + #boundEditorDivInput = this.editorDivInput.bind(this); + #boundEditorDivKeydown = this.editorDivKeydown.bind(this); + #boundEditorDivPaste = this.editorDivPaste.bind(this); + #color; + #content = ""; + #editorDivId = `${this.id}-editor`; + #fontSize; + #initialData = null; + static _freeTextDefaultContent = ""; + static _internalPadding = 0; + static _defaultColor = null; + static _defaultFontSize = 10; + static get _keyboardManager() { + const proto = FreeTextEditor.prototype; + const arrowChecker = self => self.isEmpty(); + const small = AnnotationEditorUIManager.TRANSLATE_SMALL; + const big = AnnotationEditorUIManager.TRANSLATE_BIG; + return shadow(this, "_keyboardManager", new KeyboardManager([[["ctrl+s", "mac+meta+s", "ctrl+p", "mac+meta+p"], proto.commitOrRemove, { + bubbles: true + }], [["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], proto.commitOrRemove], [["ArrowLeft", "mac+ArrowLeft"], proto._translateEmpty, { + args: [-small, 0], + checker: arrowChecker + }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto._translateEmpty, { + args: [-big, 0], + checker: arrowChecker + }], [["ArrowRight", "mac+ArrowRight"], proto._translateEmpty, { + args: [small, 0], + checker: arrowChecker + }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto._translateEmpty, { + args: [big, 0], + checker: arrowChecker + }], [["ArrowUp", "mac+ArrowUp"], proto._translateEmpty, { + args: [0, -small], + checker: arrowChecker + }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto._translateEmpty, { + args: [0, -big], + checker: arrowChecker + }], [["ArrowDown", "mac+ArrowDown"], proto._translateEmpty, { + args: [0, small], + checker: arrowChecker + }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto._translateEmpty, { + args: [0, big], + checker: arrowChecker + }]])); } - return DEFAULT_L10N_STRINGS[key] || ""; -} -function formatL10nValue(text, args) { - if (!args) { - return text; - } - return text.replaceAll(/\{\{\s*(\w+)\s*\}\}/g, (all, name) => { - return name in args ? args[name] : "{{" + name + "}}"; - }); -} -const NullL10n = exports.NullL10n = { - async getLanguage() { - return "en-us"; - }, - async getDirection() { - return "ltr"; - }, - async get(key, args = null, fallback = getL10nFallback(key, args)) { - return formatL10nValue(fallback, args); - }, - async translate(element) {} -}; - -/***/ }), -/* 32 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XfaLayer = void 0; -var _xfa_text = __w_pdfjs_require__(25); -class XfaLayer { - static setupStorage(html, id, element, storage, intent) { - const storedData = storage.getValue(id, { - value: null + static _type = "freetext"; + static _editorType = AnnotationEditorType.FREETEXT; + constructor(params) { + super({ + ...params, + name: "freeTextEditor" }); - switch (element.name) { - case "textarea": - if (storedData.value !== null) { - html.textContent = storedData.value; - } - if (intent === "print") { - break; - } - html.addEventListener("input", event => { - storage.setValue(id, { - value: event.target.value - }); - }); + this.#color = params.color || FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor; + this.#fontSize = params.fontSize || FreeTextEditor._defaultFontSize; + } + static initialize(l10n, uiManager) { + AnnotationEditor.initialize(l10n, uiManager, { + strings: ["pdfjs-free-text-default-content"] + }); + const style = getComputedStyle(document.documentElement); + this._internalPadding = parseFloat(style.getPropertyValue("--freetext-padding")); + } + static updateDefaultParams(type, value) { + switch (type) { + case AnnotationEditorParamsType.FREETEXT_SIZE: + FreeTextEditor._defaultFontSize = value; break; - case "input": - if (element.attributes.type === "radio" || element.attributes.type === "checkbox") { - if (storedData.value === element.attributes.xfaOn) { - html.setAttribute("checked", true); - } else if (storedData.value === element.attributes.xfaOff) { - html.removeAttribute("checked"); - } - if (intent === "print") { - break; - } - html.addEventListener("change", event => { - storage.setValue(id, { - value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff") - }); - }); - } else { - if (storedData.value !== null) { - html.setAttribute("value", storedData.value); - } - if (intent === "print") { - break; - } - html.addEventListener("input", event => { - storage.setValue(id, { - value: event.target.value - }); - }); - } - break; - case "select": - if (storedData.value !== null) { - html.setAttribute("value", storedData.value); - for (const option of element.children) { - if (option.attributes.value === storedData.value) { - option.attributes.selected = true; - } else if (option.attributes.hasOwnProperty("selected")) { - delete option.attributes.selected; - } - } - } - html.addEventListener("input", event => { - const options = event.target.options; - const value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value; - storage.setValue(id, { - value - }); - }); + case AnnotationEditorParamsType.FREETEXT_COLOR: + FreeTextEditor._defaultColor = value; break; } } - static setAttributes({ - html, - element, - storage = null, - intent, - linkService - }) { - const { - attributes - } = element; - const isHTMLAnchorElement = html instanceof HTMLAnchorElement; - if (attributes.type === "radio") { - attributes.name = `${attributes.name}-${intent}`; - } - for (const [key, value] of Object.entries(attributes)) { - if (value === null || value === undefined) { - continue; - } - switch (key) { - case "class": - if (value.length) { - html.setAttribute(key, value.join(" ")); - } - break; - case "dataId": - break; - case "id": - html.setAttribute("data-element-id", value); - break; - case "style": - Object.assign(html.style, value); - break; - case "textContent": - html.textContent = value; - break; - default: - if (!isHTMLAnchorElement || key !== "href" && key !== "newWindow") { - html.setAttribute(key, value); - } - } - } - if (isHTMLAnchorElement) { - linkService.addLinkAttributes(html, attributes.href, attributes.newWindow); - } - if (storage && attributes.dataId) { - this.setupStorage(html, attributes.dataId, element, storage); + updateParams(type, value) { + switch (type) { + case AnnotationEditorParamsType.FREETEXT_SIZE: + this.#updateFontSize(value); + break; + case AnnotationEditorParamsType.FREETEXT_COLOR: + this.#updateColor(value); + break; } } - static render(parameters) { - const storage = parameters.annotationStorage; - const linkService = parameters.linkService; - const root = parameters.xfaHtml; - const intent = parameters.intent || "display"; - const rootHtml = document.createElement(root.name); - if (root.attributes) { - this.setAttributes({ - html: rootHtml, - element: root, - intent, - linkService - }); + static get defaultPropertiesToUpdate() { + return [[AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor]]; + } + get propertiesToUpdate() { + return [[AnnotationEditorParamsType.FREETEXT_SIZE, this.#fontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, this.#color]]; + } + #updateFontSize(fontSize) { + const setFontsize = size => { + this.editorDiv.style.fontSize = `calc(${size}px * var(--scale-factor))`; + this.translate(0, -(size - this.#fontSize) * this.parentScale); + this.#fontSize = size; + this.#setEditorDimensions(); + }; + const savedFontsize = this.#fontSize; + this.addCommands({ + cmd: setFontsize.bind(this, fontSize), + undo: setFontsize.bind(this, savedFontsize), + post: this._uiManager.updateUI.bind(this._uiManager, this), + mustExec: true, + type: AnnotationEditorParamsType.FREETEXT_SIZE, + overwriteIfSameType: true, + keepUndo: true + }); + } + #updateColor(color) { + const setColor = col => { + this.#color = this.editorDiv.style.color = col; + }; + const savedColor = this.#color; + this.addCommands({ + cmd: setColor.bind(this, color), + undo: setColor.bind(this, savedColor), + post: this._uiManager.updateUI.bind(this._uiManager, this), + mustExec: true, + type: AnnotationEditorParamsType.FREETEXT_COLOR, + overwriteIfSameType: true, + keepUndo: true + }); + } + _translateEmpty(x, y) { + this._uiManager.translateSelectedEditors(x, y, true); + } + getInitialTranslation() { + const scale = this.parentScale; + return [-FreeTextEditor._internalPadding * scale, -(FreeTextEditor._internalPadding + this.#fontSize) * scale]; + } + rebuild() { + if (!this.parent) { + return; } - const stack = [[root, -1, rootHtml]]; - const rootDiv = parameters.div; - rootDiv.append(rootHtml); - if (parameters.viewport) { - const transform = `matrix(${parameters.viewport.transform.join(",")})`; - rootDiv.style.transform = transform; + super.rebuild(); + if (this.div === null) { + return; } - if (intent !== "richText") { - rootDiv.setAttribute("class", "xfaLayer xfaFont"); + if (!this.isAttachedToDOM) { + this.parent.add(this); } - const textDivs = []; - while (stack.length > 0) { - const [parent, i, html] = stack.at(-1); - if (i + 1 === parent.children.length) { - stack.pop(); - continue; - } - const child = parent.children[++stack.at(-1)[1]]; - if (child === null) { - continue; - } + } + enableEditMode() { + if (this.isInEditMode()) { + return; + } + this.parent.setEditingState(false); + this.parent.updateToolbar(AnnotationEditorType.FREETEXT); + super.enableEditMode(); + this.overlayDiv.classList.remove("enabled"); + this.editorDiv.contentEditable = true; + this._isDraggable = false; + this.div.removeAttribute("aria-activedescendant"); + this.editorDiv.addEventListener("keydown", this.#boundEditorDivKeydown); + this.editorDiv.addEventListener("focus", this.#boundEditorDivFocus); + this.editorDiv.addEventListener("blur", this.#boundEditorDivBlur); + this.editorDiv.addEventListener("input", this.#boundEditorDivInput); + this.editorDiv.addEventListener("paste", this.#boundEditorDivPaste); + } + disableEditMode() { + if (!this.isInEditMode()) { + return; + } + this.parent.setEditingState(true); + super.disableEditMode(); + this.overlayDiv.classList.add("enabled"); + this.editorDiv.contentEditable = false; + this.div.setAttribute("aria-activedescendant", this.#editorDivId); + this._isDraggable = true; + this.editorDiv.removeEventListener("keydown", this.#boundEditorDivKeydown); + this.editorDiv.removeEventListener("focus", this.#boundEditorDivFocus); + this.editorDiv.removeEventListener("blur", this.#boundEditorDivBlur); + this.editorDiv.removeEventListener("input", this.#boundEditorDivInput); + this.editorDiv.removeEventListener("paste", this.#boundEditorDivPaste); + this.div.focus({ + preventScroll: true + }); + this.isEditing = false; + this.parent.div.classList.add("freetextEditing"); + } + focusin(event) { + if (!this._focusEventsAllowed) { + return; + } + super.focusin(event); + if (event.target !== this.editorDiv) { + this.editorDiv.focus(); + } + } + onceAdded() { + if (this.width) { + return; + } + this.enableEditMode(); + this.editorDiv.focus(); + if (this._initialOptions?.isCentered) { + this.center(); + } + this._initialOptions = null; + } + isEmpty() { + return !this.editorDiv || this.editorDiv.innerText.trim() === ""; + } + remove() { + this.isEditing = false; + if (this.parent) { + this.parent.setEditingState(true); + this.parent.div.classList.add("freetextEditing"); + } + super.remove(); + } + #extractText() { + const buffer = []; + this.editorDiv.normalize(); + for (const child of this.editorDiv.childNodes) { + buffer.push(FreeTextEditor.#getNodeContent(child)); + } + return buffer.join("\n"); + } + #setEditorDimensions() { + const [parentWidth, parentHeight] = this.parentDimensions; + let rect; + if (this.isAttachedToDOM) { + rect = this.div.getBoundingClientRect(); + } else { const { - name - } = child; - if (name === "#text") { - const node = document.createTextNode(child.value); - textDivs.push(node); - html.append(node); - continue; + currentLayer, + div + } = this; + const savedDisplay = div.style.display; + const savedVisibility = div.classList.contains("hidden"); + div.classList.remove("hidden"); + div.style.display = "hidden"; + currentLayer.div.append(this.div); + rect = div.getBoundingClientRect(); + div.remove(); + div.style.display = savedDisplay; + div.classList.toggle("hidden", savedVisibility); + } + if (this.rotation % 180 === this.parentRotation % 180) { + this.width = rect.width / parentWidth; + this.height = rect.height / parentHeight; + } else { + this.width = rect.height / parentWidth; + this.height = rect.width / parentHeight; + } + this.fixAndSetPosition(); + } + commit() { + if (!this.isInEditMode()) { + return; + } + super.commit(); + this.disableEditMode(); + const savedText = this.#content; + const newText = this.#content = this.#extractText().trimEnd(); + if (savedText === newText) { + return; + } + const setText = text => { + this.#content = text; + if (!text) { + this.remove(); + return; } - const childHtml = child?.attributes?.xmlns ? document.createElementNS(child.attributes.xmlns, name) : document.createElement(name); - html.append(childHtml); - if (child.attributes) { - this.setAttributes({ - html: childHtml, - element: child, - storage, - intent, - linkService - }); - } - if (child.children && child.children.length > 0) { - stack.push([child, -1, childHtml]); - } else if (child.value) { - const node = document.createTextNode(child.value); - if (_xfa_text.XfaText.shouldBuildText(name)) { - textDivs.push(node); + this.#setContent(); + this._uiManager.rebuild(this); + this.#setEditorDimensions(); + }; + this.addCommands({ + cmd: () => { + setText(newText); + }, + undo: () => { + setText(savedText); + }, + mustExec: false + }); + this.#setEditorDimensions(); + } + shouldGetKeyboardEvents() { + return this.isInEditMode(); + } + enterInEditMode() { + this.enableEditMode(); + this.editorDiv.focus(); + } + dblclick(event) { + this.enterInEditMode(); + } + keydown(event) { + if (event.target === this.div && event.key === "Enter") { + this.enterInEditMode(); + event.preventDefault(); + } + } + editorDivKeydown(event) { + FreeTextEditor._keyboardManager.exec(this, event); + } + editorDivFocus(event) { + this.isEditing = true; + } + editorDivBlur(event) { + this.isEditing = false; + } + editorDivInput(event) { + this.parent.div.classList.toggle("freetextEditing", this.isEmpty()); + } + disableEditing() { + this.editorDiv.setAttribute("role", "comment"); + this.editorDiv.removeAttribute("aria-multiline"); + } + enableEditing() { + this.editorDiv.setAttribute("role", "textbox"); + this.editorDiv.setAttribute("aria-multiline", true); + } + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + if (this.width) { + baseX = this.x; + baseY = this.y; + } + super.render(); + this.editorDiv = document.createElement("div"); + this.editorDiv.className = "internal"; + this.editorDiv.setAttribute("id", this.#editorDivId); + this.editorDiv.setAttribute("data-l10n-id", "pdfjs-free-text"); + this.enableEditing(); + AnnotationEditor._l10nPromise.get("pdfjs-free-text-default-content").then(msg => this.editorDiv?.setAttribute("default-content", msg)); + this.editorDiv.contentEditable = true; + const { + style + } = this.editorDiv; + style.fontSize = `calc(${this.#fontSize}px * var(--scale-factor))`; + style.color = this.#color; + this.div.append(this.editorDiv); + this.overlayDiv = document.createElement("div"); + this.overlayDiv.classList.add("overlay", "enabled"); + this.div.append(this.overlayDiv); + bindEvents(this, this.div, ["dblclick", "keydown"]); + if (this.width) { + const [parentWidth, parentHeight] = this.parentDimensions; + if (this.annotationElementId) { + const { + position + } = this.#initialData; + let [tx, ty] = this.getInitialTranslation(); + [tx, ty] = this.pageTranslationToScreen(tx, ty); + const [pageWidth, pageHeight] = this.pageDimensions; + const [pageX, pageY] = this.pageTranslation; + let posX, posY; + switch (this.rotation) { + case 0: + posX = baseX + (position[0] - pageX) / pageWidth; + posY = baseY + this.height - (position[1] - pageY) / pageHeight; + break; + case 90: + posX = baseX + (position[0] - pageX) / pageWidth; + posY = baseY - (position[1] - pageY) / pageHeight; + [tx, ty] = [ty, -tx]; + break; + case 180: + posX = baseX - this.width + (position[0] - pageX) / pageWidth; + posY = baseY - (position[1] - pageY) / pageHeight; + [tx, ty] = [-tx, -ty]; + break; + case 270: + posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth; + posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight; + [tx, ty] = [-ty, tx]; + break; } - childHtml.append(node); + this.setAt(posX * parentWidth, posY * parentHeight, tx, ty); + } else { + this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); + } + this.#setContent(); + this._isDraggable = true; + this.editorDiv.contentEditable = false; + } else { + this._isDraggable = false; + this.editorDiv.contentEditable = true; + } + return this.div; + } + static #getNodeContent(node) { + return (node.nodeType === Node.TEXT_NODE ? node.nodeValue : node.innerText).replaceAll(EOL_PATTERN, ""); + } + editorDivPaste(event) { + const clipboardData = event.clipboardData || window.clipboardData; + const { + types + } = clipboardData; + if (types.length === 1 && types[0] === "text/plain") { + return; + } + event.preventDefault(); + const paste = FreeTextEditor.#deserializeContent(clipboardData.getData("text") || "").replaceAll(EOL_PATTERN, "\n"); + if (!paste) { + return; + } + const selection = window.getSelection(); + if (!selection.rangeCount) { + return; + } + this.editorDiv.normalize(); + selection.deleteFromDocument(); + const range = selection.getRangeAt(0); + if (!paste.includes("\n")) { + range.insertNode(document.createTextNode(paste)); + this.editorDiv.normalize(); + selection.collapseToStart(); + return; + } + const { + startContainer, + startOffset + } = range; + const bufferBefore = []; + const bufferAfter = []; + if (startContainer.nodeType === Node.TEXT_NODE) { + const parent = startContainer.parentElement; + bufferAfter.push(startContainer.nodeValue.slice(startOffset).replaceAll(EOL_PATTERN, "")); + if (parent !== this.editorDiv) { + let buffer = bufferBefore; + for (const child of this.editorDiv.childNodes) { + if (child === parent) { + buffer = bufferAfter; + continue; + } + buffer.push(FreeTextEditor.#getNodeContent(child)); + } + } + bufferBefore.push(startContainer.nodeValue.slice(0, startOffset).replaceAll(EOL_PATTERN, "")); + } else if (startContainer === this.editorDiv) { + let buffer = bufferBefore; + let i = 0; + for (const child of this.editorDiv.childNodes) { + if (i++ === startOffset) { + buffer = bufferAfter; + } + buffer.push(FreeTextEditor.#getNodeContent(child)); } } - for (const el of rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")) { - el.setAttribute("readOnly", true); + this.#content = `${bufferBefore.join("\n")}${paste}${bufferAfter.join("\n")}`; + this.#setContent(); + const newRange = new Range(); + let beforeLength = bufferBefore.reduce((acc, line) => acc + line.length, 0); + for (const { + firstChild + } of this.editorDiv.childNodes) { + if (firstChild.nodeType === Node.TEXT_NODE) { + const length = firstChild.nodeValue.length; + if (beforeLength <= length) { + newRange.setStart(firstChild, beforeLength); + newRange.setEnd(firstChild, beforeLength); + break; + } + beforeLength -= length; + } } - return { - textDivs + selection.removeAllRanges(); + selection.addRange(newRange); + } + #setContent() { + this.editorDiv.replaceChildren(); + if (!this.#content) { + return; + } + for (const line of this.#content.split("\n")) { + const div = document.createElement("div"); + div.append(line ? document.createTextNode(line) : document.createElement("br")); + this.editorDiv.append(div); + } + } + #serializeContent() { + return this.#content.replaceAll("\xa0", " "); + } + static #deserializeContent(content) { + return content.replaceAll(" ", "\xa0"); + } + get contentDiv() { + return this.editorDiv; + } + static deserialize(data, parent, uiManager) { + let initialData = null; + if (data instanceof FreeTextAnnotationElement) { + const { + data: { + defaultAppearanceData: { + fontSize, + fontColor + }, + rect, + rotation, + id + }, + textContent, + textPosition, + parent: { + page: { + pageNumber + } + } + } = data; + if (!textContent || textContent.length === 0) { + return null; + } + initialData = data = { + annotationType: AnnotationEditorType.FREETEXT, + color: Array.from(fontColor), + fontSize, + value: textContent.join("\n"), + position: textPosition, + pageIndex: pageNumber - 1, + rect: rect.slice(0), + rotation, + id, + deleted: false + }; + } + const editor = super.deserialize(data, parent, uiManager); + editor.#fontSize = data.fontSize; + editor.#color = Util.makeHexColor(...data.color); + editor.#content = FreeTextEditor.#deserializeContent(data.value); + editor.annotationElementId = data.id || null; + editor.#initialData = initialData; + return editor; + } + serialize(isForCopying = false) { + if (this.isEmpty()) { + return null; + } + if (this.deleted) { + return { + pageIndex: this.pageIndex, + id: this.annotationElementId, + deleted: true + }; + } + const padding = FreeTextEditor._internalPadding * this.parentScale; + const rect = this.getRect(padding, padding); + const color = AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : this.#color); + const serialized = { + annotationType: AnnotationEditorType.FREETEXT, + color, + fontSize: this.#fontSize, + value: this.#serializeContent(), + pageIndex: this.pageIndex, + rect, + rotation: this.rotation, + structTreeParentId: this._structTreeParentId + }; + if (isForCopying) { + return serialized; + } + if (this.annotationElementId && !this.#hasElementChanged(serialized)) { + return null; + } + serialized.id = this.annotationElementId; + return serialized; + } + #hasElementChanged(serialized) { + const { + value, + fontSize, + color, + pageIndex + } = this.#initialData; + return this._hasBeenMoved || serialized.value !== value || serialized.fontSize !== fontSize || serialized.color.some((c, i) => c !== color[i]) || serialized.pageIndex !== pageIndex; + } + renderAnnotationElement(annotation) { + const content = super.renderAnnotationElement(annotation); + if (this.deleted) { + return content; + } + const { + style + } = content; + style.fontSize = `calc(${this.#fontSize}px * var(--scale-factor))`; + style.color = this.#color; + content.replaceChildren(); + for (const line of this.#content.split("\n")) { + const div = document.createElement("div"); + div.append(line ? document.createTextNode(line) : document.createElement("br")); + content.append(div); + } + const padding = FreeTextEditor._internalPadding * this.parentScale; + annotation.updateEdited({ + rect: this.getRect(padding, padding), + popupContent: this.#content + }); + return content; + } + resetAnnotationElement(annotation) { + super.resetAnnotationElement(annotation); + annotation.resetEdited(); + } +} + +;// CONCATENATED MODULE: ./src/display/editor/outliner.js + +class Outliner { + #box; + #verticalEdges = []; + #intervals = []; + constructor(boxes, borderWidth = 0, innerMargin = 0, isLTR = true) { + let minX = Infinity; + let maxX = -Infinity; + let minY = Infinity; + let maxY = -Infinity; + const NUMBER_OF_DIGITS = 4; + const EPSILON = 10 ** -NUMBER_OF_DIGITS; + for (const { + x, + y, + width, + height + } of boxes) { + const x1 = Math.floor((x - borderWidth) / EPSILON) * EPSILON; + const x2 = Math.ceil((x + width + borderWidth) / EPSILON) * EPSILON; + const y1 = Math.floor((y - borderWidth) / EPSILON) * EPSILON; + const y2 = Math.ceil((y + height + borderWidth) / EPSILON) * EPSILON; + const left = [x1, y1, y2, true]; + const right = [x2, y1, y2, false]; + this.#verticalEdges.push(left, right); + minX = Math.min(minX, x1); + maxX = Math.max(maxX, x2); + minY = Math.min(minY, y1); + maxY = Math.max(maxY, y2); + } + const bboxWidth = maxX - minX + 2 * innerMargin; + const bboxHeight = maxY - minY + 2 * innerMargin; + const shiftedMinX = minX - innerMargin; + const shiftedMinY = minY - innerMargin; + const lastEdge = this.#verticalEdges.at(isLTR ? -1 : -2); + const lastPoint = [lastEdge[0], lastEdge[2]]; + for (const edge of this.#verticalEdges) { + const [x, y1, y2] = edge; + edge[0] = (x - shiftedMinX) / bboxWidth; + edge[1] = (y1 - shiftedMinY) / bboxHeight; + edge[2] = (y2 - shiftedMinY) / bboxHeight; + } + this.#box = { + x: shiftedMinX, + y: shiftedMinY, + width: bboxWidth, + height: bboxHeight, + lastPoint }; } - static update(parameters) { - const transform = `matrix(${parameters.viewport.transform.join(",")})`; - parameters.div.style.transform = transform; - parameters.div.hidden = false; + getOutlines() { + this.#verticalEdges.sort((a, b) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2]); + const outlineVerticalEdges = []; + for (const edge of this.#verticalEdges) { + if (edge[3]) { + outlineVerticalEdges.push(...this.#breakEdge(edge)); + this.#insert(edge); + } else { + this.#remove(edge); + outlineVerticalEdges.push(...this.#breakEdge(edge)); + } + } + return this.#getOutlines(outlineVerticalEdges); + } + #getOutlines(outlineVerticalEdges) { + const edges = []; + const allEdges = new Set(); + for (const edge of outlineVerticalEdges) { + const [x, y1, y2] = edge; + edges.push([x, y1, edge], [x, y2, edge]); + } + edges.sort((a, b) => a[1] - b[1] || a[0] - b[0]); + for (let i = 0, ii = edges.length; i < ii; i += 2) { + const edge1 = edges[i][2]; + const edge2 = edges[i + 1][2]; + edge1.push(edge2); + edge2.push(edge1); + allEdges.add(edge1); + allEdges.add(edge2); + } + const outlines = []; + let outline; + while (allEdges.size > 0) { + const edge = allEdges.values().next().value; + let [x, y1, y2, edge1, edge2] = edge; + allEdges.delete(edge); + let lastPointX = x; + let lastPointY = y1; + outline = [x, y2]; + outlines.push(outline); + while (true) { + let e; + if (allEdges.has(edge1)) { + e = edge1; + } else if (allEdges.has(edge2)) { + e = edge2; + } else { + break; + } + allEdges.delete(e); + [x, y1, y2, edge1, edge2] = e; + if (lastPointX !== x) { + outline.push(lastPointX, lastPointY, x, lastPointY === y1 ? y1 : y2); + lastPointX = x; + } + lastPointY = lastPointY === y1 ? y2 : y1; + } + outline.push(lastPointX, lastPointY); + } + return new HighlightOutline(outlines, this.#box); + } + #binarySearch(y) { + const array = this.#intervals; + let start = 0; + let end = array.length - 1; + while (start <= end) { + const middle = start + end >> 1; + const y1 = array[middle][0]; + if (y1 === y) { + return middle; + } + if (y1 < y) { + start = middle + 1; + } else { + end = middle - 1; + } + } + return end + 1; + } + #insert([, y1, y2]) { + const index = this.#binarySearch(y1); + this.#intervals.splice(index, 0, [y1, y2]); + } + #remove([, y1, y2]) { + const index = this.#binarySearch(y1); + for (let i = index; i < this.#intervals.length; i++) { + const [start, end] = this.#intervals[i]; + if (start !== y1) { + break; + } + if (start === y1 && end === y2) { + this.#intervals.splice(i, 1); + return; + } + } + for (let i = index - 1; i >= 0; i--) { + const [start, end] = this.#intervals[i]; + if (start !== y1) { + break; + } + if (start === y1 && end === y2) { + this.#intervals.splice(i, 1); + return; + } + } + } + #breakEdge(edge) { + const [x, y1, y2] = edge; + const results = [[x, y1, y2]]; + const index = this.#binarySearch(y2); + for (let i = 0; i < index; i++) { + const [start, end] = this.#intervals[i]; + for (let j = 0, jj = results.length; j < jj; j++) { + const [, y3, y4] = results[j]; + if (end <= y3 || y4 <= start) { + continue; + } + if (y3 >= start) { + if (y4 > end) { + results[j][1] = end; + } else { + if (jj === 1) { + return []; + } + results.splice(j, 1); + j--; + jj--; + } + continue; + } + results[j][2] = start; + if (y4 > end) { + results.push([x, end, y4]); + } + } + } + return results; + } +} +class Outline { + toSVGPath() { + throw new Error("Abstract method `toSVGPath` must be implemented."); + } + get box() { + throw new Error("Abstract getter `box` must be implemented."); + } + serialize(_bbox, _rotation) { + throw new Error("Abstract method `serialize` must be implemented."); + } + get free() { + return this instanceof FreeHighlightOutline; + } +} +class HighlightOutline extends Outline { + #box; + #outlines; + constructor(outlines, box) { + super(); + this.#outlines = outlines; + this.#box = box; + } + toSVGPath() { + const buffer = []; + for (const polygon of this.#outlines) { + let [prevX, prevY] = polygon; + buffer.push(`M${prevX} ${prevY}`); + for (let i = 2; i < polygon.length; i += 2) { + const x = polygon[i]; + const y = polygon[i + 1]; + if (x === prevX) { + buffer.push(`V${y}`); + prevY = y; + } else if (y === prevY) { + buffer.push(`H${x}`); + prevX = x; + } + } + buffer.push("Z"); + } + return buffer.join(" "); + } + serialize([blX, blY, trX, trY], _rotation) { + const outlines = []; + const width = trX - blX; + const height = trY - blY; + for (const outline of this.#outlines) { + const points = new Array(outline.length); + for (let i = 0; i < outline.length; i += 2) { + points[i] = blX + outline[i] * width; + points[i + 1] = trY - outline[i + 1] * height; + } + outlines.push(points); + } + return outlines; + } + get box() { + return this.#box; + } +} +class FreeOutliner { + #box; + #bottom = []; + #innerMargin; + #isLTR; + #top = []; + #last = new Float64Array(18); + #lastX; + #lastY; + #min; + #min_dist; + #scaleFactor; + #thickness; + #points = []; + static #MIN_DIST = 8; + static #MIN_DIFF = 2; + static #MIN = FreeOutliner.#MIN_DIST + FreeOutliner.#MIN_DIFF; + constructor({ + x, + y + }, box, scaleFactor, thickness, isLTR, innerMargin = 0) { + this.#box = box; + this.#thickness = thickness * scaleFactor; + this.#isLTR = isLTR; + this.#last.set([NaN, NaN, NaN, NaN, x, y], 6); + this.#innerMargin = innerMargin; + this.#min_dist = FreeOutliner.#MIN_DIST * scaleFactor; + this.#min = FreeOutliner.#MIN * scaleFactor; + this.#scaleFactor = scaleFactor; + this.#points.push(x, y); + } + get free() { + return true; + } + isEmpty() { + return isNaN(this.#last[8]); + } + #getLastCoords() { + const lastTop = this.#last.subarray(4, 6); + const lastBottom = this.#last.subarray(16, 18); + const [x, y, width, height] = this.#box; + return [(this.#lastX + (lastTop[0] - lastBottom[0]) / 2 - x) / width, (this.#lastY + (lastTop[1] - lastBottom[1]) / 2 - y) / height, (this.#lastX + (lastBottom[0] - lastTop[0]) / 2 - x) / width, (this.#lastY + (lastBottom[1] - lastTop[1]) / 2 - y) / height]; + } + add({ + x, + y + }) { + this.#lastX = x; + this.#lastY = y; + const [layerX, layerY, layerWidth, layerHeight] = this.#box; + let [x1, y1, x2, y2] = this.#last.subarray(8, 12); + const diffX = x - x2; + const diffY = y - y2; + const d = Math.hypot(diffX, diffY); + if (d < this.#min) { + return false; + } + const diffD = d - this.#min_dist; + const K = diffD / d; + const shiftX = K * diffX; + const shiftY = K * diffY; + let x0 = x1; + let y0 = y1; + x1 = x2; + y1 = y2; + x2 += shiftX; + y2 += shiftY; + this.#points?.push(x, y); + const nX = -shiftY / diffD; + const nY = shiftX / diffD; + const thX = nX * this.#thickness; + const thY = nY * this.#thickness; + this.#last.set(this.#last.subarray(2, 8), 0); + this.#last.set([x2 + thX, y2 + thY], 4); + this.#last.set(this.#last.subarray(14, 18), 12); + this.#last.set([x2 - thX, y2 - thY], 16); + if (isNaN(this.#last[6])) { + if (this.#top.length === 0) { + this.#last.set([x1 + thX, y1 + thY], 2); + this.#top.push(NaN, NaN, NaN, NaN, (x1 + thX - layerX) / layerWidth, (y1 + thY - layerY) / layerHeight); + this.#last.set([x1 - thX, y1 - thY], 14); + this.#bottom.push(NaN, NaN, NaN, NaN, (x1 - thX - layerX) / layerWidth, (y1 - thY - layerY) / layerHeight); + } + this.#last.set([x0, y0, x1, y1, x2, y2], 6); + return !this.isEmpty(); + } + this.#last.set([x0, y0, x1, y1, x2, y2], 6); + const angle = Math.abs(Math.atan2(y0 - y1, x0 - x1) - Math.atan2(shiftY, shiftX)); + if (angle < Math.PI / 2) { + [x1, y1, x2, y2] = this.#last.subarray(2, 6); + this.#top.push(NaN, NaN, NaN, NaN, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight); + [x1, y1, x0, y0] = this.#last.subarray(14, 18); + this.#bottom.push(NaN, NaN, NaN, NaN, ((x0 + x1) / 2 - layerX) / layerWidth, ((y0 + y1) / 2 - layerY) / layerHeight); + return true; + } + [x0, y0, x1, y1, x2, y2] = this.#last.subarray(0, 6); + this.#top.push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight); + [x2, y2, x1, y1, x0, y0] = this.#last.subarray(12, 18); + this.#bottom.push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight); + return true; + } + toSVGPath() { + if (this.isEmpty()) { + return ""; + } + const top = this.#top; + const bottom = this.#bottom; + const lastTop = this.#last.subarray(4, 6); + const lastBottom = this.#last.subarray(16, 18); + const [x, y, width, height] = this.#box; + const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords(); + if (isNaN(this.#last[6]) && !this.isEmpty()) { + return `M${(this.#last[2] - x) / width} ${(this.#last[3] - y) / height} L${(this.#last[4] - x) / width} ${(this.#last[5] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(this.#last[16] - x) / width} ${(this.#last[17] - y) / height} L${(this.#last[14] - x) / width} ${(this.#last[15] - y) / height} Z`; + } + const buffer = []; + buffer.push(`M${top[4]} ${top[5]}`); + for (let i = 6; i < top.length; i += 6) { + if (isNaN(top[i])) { + buffer.push(`L${top[i + 4]} ${top[i + 5]}`); + } else { + buffer.push(`C${top[i]} ${top[i + 1]} ${top[i + 2]} ${top[i + 3]} ${top[i + 4]} ${top[i + 5]}`); + } + } + buffer.push(`L${(lastTop[0] - x) / width} ${(lastTop[1] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(lastBottom[0] - x) / width} ${(lastBottom[1] - y) / height}`); + for (let i = bottom.length - 6; i >= 6; i -= 6) { + if (isNaN(bottom[i])) { + buffer.push(`L${bottom[i + 4]} ${bottom[i + 5]}`); + } else { + buffer.push(`C${bottom[i]} ${bottom[i + 1]} ${bottom[i + 2]} ${bottom[i + 3]} ${bottom[i + 4]} ${bottom[i + 5]}`); + } + } + buffer.push(`L${bottom[4]} ${bottom[5]} Z`); + return buffer.join(" "); + } + getOutlines() { + const top = this.#top; + const bottom = this.#bottom; + const last = this.#last; + const lastTop = last.subarray(4, 6); + const lastBottom = last.subarray(16, 18); + const [layerX, layerY, layerWidth, layerHeight] = this.#box; + const points = new Float64Array((this.#points?.length ?? 0) + 2); + for (let i = 0, ii = points.length - 2; i < ii; i += 2) { + points[i] = (this.#points[i] - layerX) / layerWidth; + points[i + 1] = (this.#points[i + 1] - layerY) / layerHeight; + } + points[points.length - 2] = (this.#lastX - layerX) / layerWidth; + points[points.length - 1] = (this.#lastY - layerY) / layerHeight; + const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords(); + if (isNaN(last[6]) && !this.isEmpty()) { + const outline = new Float64Array(36); + outline.set([NaN, NaN, NaN, NaN, (last[2] - layerX) / layerWidth, (last[3] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[4] - layerX) / layerWidth, (last[5] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (last[16] - layerX) / layerWidth, (last[17] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[14] - layerX) / layerWidth, (last[15] - layerY) / layerHeight], 0); + return new FreeHighlightOutline(outline, points, this.#box, this.#scaleFactor, this.#innerMargin, this.#isLTR); + } + const outline = new Float64Array(this.#top.length + 24 + this.#bottom.length); + let N = top.length; + for (let i = 0; i < N; i += 2) { + if (isNaN(top[i])) { + outline[i] = outline[i + 1] = NaN; + continue; + } + outline[i] = top[i]; + outline[i + 1] = top[i + 1]; + } + outline.set([NaN, NaN, NaN, NaN, (lastTop[0] - layerX) / layerWidth, (lastTop[1] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (lastBottom[0] - layerX) / layerWidth, (lastBottom[1] - layerY) / layerHeight], N); + N += 24; + for (let i = bottom.length - 6; i >= 6; i -= 6) { + for (let j = 0; j < 6; j += 2) { + if (isNaN(bottom[i + j])) { + outline[N] = outline[N + 1] = NaN; + N += 2; + continue; + } + outline[N] = bottom[i + j]; + outline[N + 1] = bottom[i + j + 1]; + N += 2; + } + } + outline.set([NaN, NaN, NaN, NaN, bottom[4], bottom[5]], N); + return new FreeHighlightOutline(outline, points, this.#box, this.#scaleFactor, this.#innerMargin, this.#isLTR); + } +} +class FreeHighlightOutline extends Outline { + #box; + #bbox = null; + #innerMargin; + #isLTR; + #points; + #scaleFactor; + #outline; + constructor(outline, points, box, scaleFactor, innerMargin, isLTR) { + super(); + this.#outline = outline; + this.#points = points; + this.#box = box; + this.#scaleFactor = scaleFactor; + this.#innerMargin = innerMargin; + this.#isLTR = isLTR; + this.#computeMinMax(isLTR); + const { + x, + y, + width, + height + } = this.#bbox; + for (let i = 0, ii = outline.length; i < ii; i += 2) { + outline[i] = (outline[i] - x) / width; + outline[i + 1] = (outline[i + 1] - y) / height; + } + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] = (points[i] - x) / width; + points[i + 1] = (points[i + 1] - y) / height; + } + } + toSVGPath() { + const buffer = [`M${this.#outline[4]} ${this.#outline[5]}`]; + for (let i = 6, ii = this.#outline.length; i < ii; i += 6) { + if (isNaN(this.#outline[i])) { + buffer.push(`L${this.#outline[i + 4]} ${this.#outline[i + 5]}`); + continue; + } + buffer.push(`C${this.#outline[i]} ${this.#outline[i + 1]} ${this.#outline[i + 2]} ${this.#outline[i + 3]} ${this.#outline[i + 4]} ${this.#outline[i + 5]}`); + } + buffer.push("Z"); + return buffer.join(" "); + } + serialize([blX, blY, trX, trY], rotation) { + const width = trX - blX; + const height = trY - blY; + let outline; + let points; + switch (rotation) { + case 0: + outline = this.#rescale(this.#outline, blX, trY, width, -height); + points = this.#rescale(this.#points, blX, trY, width, -height); + break; + case 90: + outline = this.#rescaleAndSwap(this.#outline, blX, blY, width, height); + points = this.#rescaleAndSwap(this.#points, blX, blY, width, height); + break; + case 180: + outline = this.#rescale(this.#outline, trX, blY, -width, height); + points = this.#rescale(this.#points, trX, blY, -width, height); + break; + case 270: + outline = this.#rescaleAndSwap(this.#outline, trX, trY, -width, -height); + points = this.#rescaleAndSwap(this.#points, trX, trY, -width, -height); + break; + } + return { + outline: Array.from(outline), + points: [Array.from(points)] + }; + } + #rescale(src, tx, ty, sx, sy) { + const dest = new Float64Array(src.length); + for (let i = 0, ii = src.length; i < ii; i += 2) { + dest[i] = tx + src[i] * sx; + dest[i + 1] = ty + src[i + 1] * sy; + } + return dest; + } + #rescaleAndSwap(src, tx, ty, sx, sy) { + const dest = new Float64Array(src.length); + for (let i = 0, ii = src.length; i < ii; i += 2) { + dest[i] = tx + src[i + 1] * sx; + dest[i + 1] = ty + src[i] * sy; + } + return dest; + } + #computeMinMax(isLTR) { + const outline = this.#outline; + let lastX = outline[4]; + let lastY = outline[5]; + let minX = lastX; + let minY = lastY; + let maxX = lastX; + let maxY = lastY; + let lastPointX = lastX; + let lastPointY = lastY; + const ltrCallback = isLTR ? Math.max : Math.min; + for (let i = 6, ii = outline.length; i < ii; i += 6) { + if (isNaN(outline[i])) { + minX = Math.min(minX, outline[i + 4]); + minY = Math.min(minY, outline[i + 5]); + maxX = Math.max(maxX, outline[i + 4]); + maxY = Math.max(maxY, outline[i + 5]); + if (lastPointY < outline[i + 5]) { + lastPointX = outline[i + 4]; + lastPointY = outline[i + 5]; + } else if (lastPointY === outline[i + 5]) { + lastPointX = ltrCallback(lastPointX, outline[i + 4]); + } + } else { + const bbox = Util.bezierBoundingBox(lastX, lastY, ...outline.slice(i, i + 6)); + minX = Math.min(minX, bbox[0]); + minY = Math.min(minY, bbox[1]); + maxX = Math.max(maxX, bbox[2]); + maxY = Math.max(maxY, bbox[3]); + if (lastPointY < bbox[3]) { + lastPointX = bbox[2]; + lastPointY = bbox[3]; + } else if (lastPointY === bbox[3]) { + lastPointX = ltrCallback(lastPointX, bbox[2]); + } + } + lastX = outline[i + 4]; + lastY = outline[i + 5]; + } + const x = minX - this.#innerMargin, + y = minY - this.#innerMargin, + width = maxX - minX + 2 * this.#innerMargin, + height = maxY - minY + 2 * this.#innerMargin; + this.#bbox = { + x, + y, + width, + height, + lastPoint: [lastPointX, lastPointY] + }; + } + get box() { + return this.#bbox; + } + getNewOutline(thickness, innerMargin) { + const { + x, + y, + width, + height + } = this.#bbox; + const [layerX, layerY, layerWidth, layerHeight] = this.#box; + const sx = width * layerWidth; + const sy = height * layerHeight; + const tx = x * layerWidth + layerX; + const ty = y * layerHeight + layerY; + const outliner = new FreeOutliner({ + x: this.#points[0] * sx + tx, + y: this.#points[1] * sy + ty + }, this.#box, this.#scaleFactor, thickness, this.#isLTR, innerMargin ?? this.#innerMargin); + for (let i = 2; i < this.#points.length; i += 2) { + outliner.add({ + x: this.#points[i] * sx + tx, + y: this.#points[i + 1] * sy + ty + }); + } + return outliner.getOutlines(); } } -exports.XfaLayer = XfaLayer; -/***/ }), -/* 33 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +;// CONCATENATED MODULE: ./src/display/editor/color_picker.js -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.InkEditor = void 0; -var _util = __w_pdfjs_require__(1); -var _editor = __w_pdfjs_require__(4); -var _annotation_layer = __w_pdfjs_require__(29); -var _display_utils = __w_pdfjs_require__(6); -var _tools = __w_pdfjs_require__(5); -class InkEditor extends _editor.AnnotationEditor { +class ColorPicker { + #boundKeyDown = this.#keyDown.bind(this); + #boundPointerDown = this.#pointerDown.bind(this); + #button = null; + #buttonSwatch = null; + #defaultColor; + #dropdown = null; + #dropdownWasFromKeyboard = false; + #isMainColorPicker = false; + #editor = null; + #eventBus; + #uiManager = null; + #type; + static get _keyboardManager() { + return shadow(this, "_keyboardManager", new KeyboardManager([[["Escape", "mac+Escape"], ColorPicker.prototype._hideDropdownFromKeyboard], [[" ", "mac+ "], ColorPicker.prototype._colorSelectFromKeyboard], [["ArrowDown", "ArrowRight", "mac+ArrowDown", "mac+ArrowRight"], ColorPicker.prototype._moveToNext], [["ArrowUp", "ArrowLeft", "mac+ArrowUp", "mac+ArrowLeft"], ColorPicker.prototype._moveToPrevious], [["Home", "mac+Home"], ColorPicker.prototype._moveToBeginning], [["End", "mac+End"], ColorPicker.prototype._moveToEnd]])); + } + constructor({ + editor = null, + uiManager = null + }) { + if (editor) { + this.#isMainColorPicker = false; + this.#type = AnnotationEditorParamsType.HIGHLIGHT_COLOR; + this.#editor = editor; + } else { + this.#isMainColorPicker = true; + this.#type = AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR; + } + this.#uiManager = editor?._uiManager || uiManager; + this.#eventBus = this.#uiManager._eventBus; + this.#defaultColor = editor?.color || this.#uiManager?.highlightColors.values().next().value || "#FFFF98"; + } + renderButton() { + const button = this.#button = document.createElement("button"); + button.className = "colorPicker"; + button.tabIndex = "0"; + button.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-button"); + button.setAttribute("aria-haspopup", true); + button.addEventListener("click", this.#openDropdown.bind(this)); + button.addEventListener("keydown", this.#boundKeyDown); + const swatch = this.#buttonSwatch = document.createElement("span"); + swatch.className = "swatch"; + swatch.setAttribute("aria-hidden", true); + swatch.style.backgroundColor = this.#defaultColor; + button.append(swatch); + return button; + } + renderMainDropdown() { + const dropdown = this.#dropdown = this.#getDropdownRoot(); + dropdown.setAttribute("aria-orientation", "horizontal"); + dropdown.setAttribute("aria-labelledby", "highlightColorPickerLabel"); + return dropdown; + } + #getDropdownRoot() { + const div = document.createElement("div"); + div.addEventListener("contextmenu", noContextMenu); + div.className = "dropdown"; + div.role = "listbox"; + div.setAttribute("aria-multiselectable", false); + div.setAttribute("aria-orientation", "vertical"); + div.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-dropdown"); + for (const [name, color] of this.#uiManager.highlightColors) { + const button = document.createElement("button"); + button.tabIndex = "0"; + button.role = "option"; + button.setAttribute("data-color", color); + button.title = name; + button.setAttribute("data-l10n-id", `pdfjs-editor-colorpicker-${name}`); + const swatch = document.createElement("span"); + button.append(swatch); + swatch.className = "swatch"; + swatch.style.backgroundColor = color; + button.setAttribute("aria-selected", color === this.#defaultColor); + button.addEventListener("click", this.#colorSelect.bind(this, color)); + div.append(button); + } + div.addEventListener("keydown", this.#boundKeyDown); + return div; + } + #colorSelect(color, event) { + event.stopPropagation(); + this.#eventBus.dispatch("switchannotationeditorparams", { + source: this, + type: this.#type, + value: color + }); + } + _colorSelectFromKeyboard(event) { + if (event.target === this.#button) { + this.#openDropdown(event); + return; + } + const color = event.target.getAttribute("data-color"); + if (!color) { + return; + } + this.#colorSelect(color, event); + } + _moveToNext(event) { + if (!this.#isDropdownVisible) { + this.#openDropdown(event); + return; + } + if (event.target === this.#button) { + this.#dropdown.firstChild?.focus(); + return; + } + event.target.nextSibling?.focus(); + } + _moveToPrevious(event) { + if (event.target === this.#dropdown?.firstChild || event.target === this.#button) { + if (this.#isDropdownVisible) { + this._hideDropdownFromKeyboard(); + } + return; + } + if (!this.#isDropdownVisible) { + this.#openDropdown(event); + } + event.target.previousSibling?.focus(); + } + _moveToBeginning(event) { + if (!this.#isDropdownVisible) { + this.#openDropdown(event); + return; + } + this.#dropdown.firstChild?.focus(); + } + _moveToEnd(event) { + if (!this.#isDropdownVisible) { + this.#openDropdown(event); + return; + } + this.#dropdown.lastChild?.focus(); + } + #keyDown(event) { + ColorPicker._keyboardManager.exec(this, event); + } + #openDropdown(event) { + if (this.#isDropdownVisible) { + this.hideDropdown(); + return; + } + this.#dropdownWasFromKeyboard = event.detail === 0; + window.addEventListener("pointerdown", this.#boundPointerDown); + if (this.#dropdown) { + this.#dropdown.classList.remove("hidden"); + return; + } + const root = this.#dropdown = this.#getDropdownRoot(); + this.#button.append(root); + } + #pointerDown(event) { + if (this.#dropdown?.contains(event.target)) { + return; + } + this.hideDropdown(); + } + hideDropdown() { + this.#dropdown?.classList.add("hidden"); + window.removeEventListener("pointerdown", this.#boundPointerDown); + } + get #isDropdownVisible() { + return this.#dropdown && !this.#dropdown.classList.contains("hidden"); + } + _hideDropdownFromKeyboard() { + if (this.#isMainColorPicker) { + return; + } + if (!this.#isDropdownVisible) { + this.#editor?.unselect(); + return; + } + this.hideDropdown(); + this.#button.focus({ + preventScroll: true, + focusVisible: this.#dropdownWasFromKeyboard + }); + } + updateColor(color) { + if (this.#buttonSwatch) { + this.#buttonSwatch.style.backgroundColor = color; + } + if (!this.#dropdown) { + return; + } + const i = this.#uiManager.highlightColors.values(); + for (const child of this.#dropdown.children) { + child.setAttribute("aria-selected", i.next().value === color); + } + } + destroy() { + this.#button?.remove(); + this.#button = null; + this.#buttonSwatch = null; + this.#dropdown?.remove(); + this.#dropdown = null; + } +} + +;// CONCATENATED MODULE: ./src/display/editor/highlight.js + + + + + + +class HighlightEditor extends AnnotationEditor { + #anchorNode = null; + #anchorOffset = 0; + #boxes; + #clipPathId = null; + #colorPicker = null; + #focusOutlines = null; + #focusNode = null; + #focusOffset = 0; + #highlightDiv = null; + #highlightOutlines = null; + #id = null; + #isFreeHighlight = false; + #boundKeydown = this.#keydown.bind(this); + #lastPoint = null; + #opacity; + #outlineId = null; + #text = ""; + #thickness; + #methodOfCreation = ""; + static _defaultColor = null; + static _defaultOpacity = 1; + static _defaultThickness = 12; + static _l10nPromise; + static _type = "highlight"; + static _editorType = AnnotationEditorType.HIGHLIGHT; + static _freeHighlightId = -1; + static _freeHighlight = null; + static _freeHighlightClipId = ""; + static get _keyboardManager() { + const proto = HighlightEditor.prototype; + return shadow(this, "_keyboardManager", new KeyboardManager([[["ArrowLeft", "mac+ArrowLeft"], proto._moveCaret, { + args: [0] + }], [["ArrowRight", "mac+ArrowRight"], proto._moveCaret, { + args: [1] + }], [["ArrowUp", "mac+ArrowUp"], proto._moveCaret, { + args: [2] + }], [["ArrowDown", "mac+ArrowDown"], proto._moveCaret, { + args: [3] + }]])); + } + constructor(params) { + super({ + ...params, + name: "highlightEditor" + }); + this.color = params.color || HighlightEditor._defaultColor; + this.#thickness = params.thickness || HighlightEditor._defaultThickness; + this.#opacity = params.opacity || HighlightEditor._defaultOpacity; + this.#boxes = params.boxes || null; + this.#methodOfCreation = params.methodOfCreation || ""; + this.#text = params.text || ""; + this._isDraggable = false; + if (params.highlightId > -1) { + this.#isFreeHighlight = true; + this.#createFreeOutlines(params); + this.#addToDrawLayer(); + } else { + this.#anchorNode = params.anchorNode; + this.#anchorOffset = params.anchorOffset; + this.#focusNode = params.focusNode; + this.#focusOffset = params.focusOffset; + this.#createOutlines(); + this.#addToDrawLayer(); + this.rotate(this.rotation); + } + } + get telemetryInitialData() { + return { + action: "added", + type: this.#isFreeHighlight ? "free_highlight" : "highlight", + color: this._uiManager.highlightColorNames.get(this.color), + thickness: this.#thickness, + methodOfCreation: this.#methodOfCreation + }; + } + get telemetryFinalData() { + return { + type: "highlight", + color: this._uiManager.highlightColorNames.get(this.color) + }; + } + static computeTelemetryFinalData(data) { + return { + numberOfColors: data.get("color").size + }; + } + #createOutlines() { + const outliner = new Outliner(this.#boxes, 0.001); + this.#highlightOutlines = outliner.getOutlines(); + ({ + x: this.x, + y: this.y, + width: this.width, + height: this.height + } = this.#highlightOutlines.box); + const outlinerForOutline = new Outliner(this.#boxes, 0.0025, 0.001, this._uiManager.direction === "ltr"); + this.#focusOutlines = outlinerForOutline.getOutlines(); + const { + lastPoint + } = this.#focusOutlines.box; + this.#lastPoint = [(lastPoint[0] - this.x) / this.width, (lastPoint[1] - this.y) / this.height]; + } + #createFreeOutlines({ + highlightOutlines, + highlightId, + clipPathId + }) { + this.#highlightOutlines = highlightOutlines; + const extraThickness = 1.5; + this.#focusOutlines = highlightOutlines.getNewOutline(this.#thickness / 2 + extraThickness, 0.0025); + if (highlightId >= 0) { + this.#id = highlightId; + this.#clipPathId = clipPathId; + this.parent.drawLayer.finalizeLine(highlightId, highlightOutlines); + this.#outlineId = this.parent.drawLayer.highlightOutline(this.#focusOutlines); + } else if (this.parent) { + const angle = this.parent.viewport.rotation; + this.parent.drawLayer.updateLine(this.#id, highlightOutlines); + this.parent.drawLayer.updateBox(this.#id, HighlightEditor.#rotateBbox(this.#highlightOutlines.box, (angle - this.rotation + 360) % 360)); + this.parent.drawLayer.updateLine(this.#outlineId, this.#focusOutlines); + this.parent.drawLayer.updateBox(this.#outlineId, HighlightEditor.#rotateBbox(this.#focusOutlines.box, angle)); + } + const { + x, + y, + width, + height + } = highlightOutlines.box; + switch (this.rotation) { + case 0: + this.x = x; + this.y = y; + this.width = width; + this.height = height; + break; + case 90: + { + const [pageWidth, pageHeight] = this.parentDimensions; + this.x = y; + this.y = 1 - x; + this.width = width * pageHeight / pageWidth; + this.height = height * pageWidth / pageHeight; + break; + } + case 180: + this.x = 1 - x; + this.y = 1 - y; + this.width = width; + this.height = height; + break; + case 270: + { + const [pageWidth, pageHeight] = this.parentDimensions; + this.x = 1 - y; + this.y = x; + this.width = width * pageHeight / pageWidth; + this.height = height * pageWidth / pageHeight; + break; + } + } + const { + lastPoint + } = this.#focusOutlines.box; + this.#lastPoint = [(lastPoint[0] - x) / width, (lastPoint[1] - y) / height]; + } + static initialize(l10n, uiManager) { + AnnotationEditor.initialize(l10n, uiManager); + HighlightEditor._defaultColor ||= uiManager.highlightColors?.values().next().value || "#fff066"; + } + static updateDefaultParams(type, value) { + switch (type) { + case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR: + HighlightEditor._defaultColor = value; + break; + case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS: + HighlightEditor._defaultThickness = value; + break; + } + } + translateInPage(x, y) {} + get toolbarPosition() { + return this.#lastPoint; + } + updateParams(type, value) { + switch (type) { + case AnnotationEditorParamsType.HIGHLIGHT_COLOR: + this.#updateColor(value); + break; + case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS: + this.#updateThickness(value); + break; + } + } + static get defaultPropertiesToUpdate() { + return [[AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR, HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, HighlightEditor._defaultThickness]]; + } + get propertiesToUpdate() { + return [[AnnotationEditorParamsType.HIGHLIGHT_COLOR, this.color || HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, this.#thickness || HighlightEditor._defaultThickness], [AnnotationEditorParamsType.HIGHLIGHT_FREE, this.#isFreeHighlight]]; + } + #updateColor(color) { + const setColor = col => { + this.color = col; + this.parent?.drawLayer.changeColor(this.#id, col); + this.#colorPicker?.updateColor(col); + }; + const savedColor = this.color; + this.addCommands({ + cmd: setColor.bind(this, color), + undo: setColor.bind(this, savedColor), + post: this._uiManager.updateUI.bind(this._uiManager, this), + mustExec: true, + type: AnnotationEditorParamsType.HIGHLIGHT_COLOR, + overwriteIfSameType: true, + keepUndo: true + }); + this._reportTelemetry({ + action: "color_changed", + color: this._uiManager.highlightColorNames.get(color) + }, true); + } + #updateThickness(thickness) { + const savedThickness = this.#thickness; + const setThickness = th => { + this.#thickness = th; + this.#changeThickness(th); + }; + this.addCommands({ + cmd: setThickness.bind(this, thickness), + undo: setThickness.bind(this, savedThickness), + post: this._uiManager.updateUI.bind(this._uiManager, this), + mustExec: true, + type: AnnotationEditorParamsType.INK_THICKNESS, + overwriteIfSameType: true, + keepUndo: true + }); + this._reportTelemetry({ + action: "thickness_changed", + thickness + }, true); + } + async addEditToolbar() { + const toolbar = await super.addEditToolbar(); + if (!toolbar) { + return null; + } + if (this._uiManager.highlightColors) { + this.#colorPicker = new ColorPicker({ + editor: this + }); + toolbar.addColorPicker(this.#colorPicker); + } + return toolbar; + } + disableEditing() { + super.disableEditing(); + this.div.classList.toggle("disabled", true); + } + enableEditing() { + super.enableEditing(); + this.div.classList.toggle("disabled", false); + } + fixAndSetPosition() { + return super.fixAndSetPosition(this.#getRotation()); + } + getBaseTranslation() { + return [0, 0]; + } + getRect(tx, ty) { + return super.getRect(tx, ty, this.#getRotation()); + } + onceAdded() { + this.parent.addUndoableEditor(this); + this.div.focus(); + } + remove() { + this.#cleanDrawLayer(); + this._reportTelemetry({ + action: "deleted" + }); + super.remove(); + } + rebuild() { + if (!this.parent) { + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + this.#addToDrawLayer(); + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + setParent(parent) { + let mustBeSelected = false; + if (this.parent && !parent) { + this.#cleanDrawLayer(); + } else if (parent) { + this.#addToDrawLayer(parent); + mustBeSelected = !this.parent && this.div?.classList.contains("selectedEditor"); + } + super.setParent(parent); + this.show(this._isVisible); + if (mustBeSelected) { + this.select(); + } + } + #changeThickness(thickness) { + if (!this.#isFreeHighlight) { + return; + } + this.#createFreeOutlines({ + highlightOutlines: this.#highlightOutlines.getNewOutline(thickness / 2) + }); + this.fixAndSetPosition(); + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(this.width * parentWidth, this.height * parentHeight); + } + #cleanDrawLayer() { + if (this.#id === null || !this.parent) { + return; + } + this.parent.drawLayer.remove(this.#id); + this.#id = null; + this.parent.drawLayer.remove(this.#outlineId); + this.#outlineId = null; + } + #addToDrawLayer(parent = this.parent) { + if (this.#id !== null) { + return; + } + ({ + id: this.#id, + clipPathId: this.#clipPathId + } = parent.drawLayer.highlight(this.#highlightOutlines, this.color, this.#opacity)); + this.#outlineId = parent.drawLayer.highlightOutline(this.#focusOutlines); + if (this.#highlightDiv) { + this.#highlightDiv.style.clipPath = this.#clipPathId; + } + } + static #rotateBbox({ + x, + y, + width, + height + }, angle) { + switch (angle) { + case 90: + return { + x: 1 - y - height, + y: x, + width: height, + height: width + }; + case 180: + return { + x: 1 - x - width, + y: 1 - y - height, + width, + height + }; + case 270: + return { + x: y, + y: 1 - x - width, + width: height, + height: width + }; + } + return { + x, + y, + width, + height + }; + } + rotate(angle) { + const { + drawLayer + } = this.parent; + let box; + if (this.#isFreeHighlight) { + angle = (angle - this.rotation + 360) % 360; + box = HighlightEditor.#rotateBbox(this.#highlightOutlines.box, angle); + } else { + box = HighlightEditor.#rotateBbox(this, angle); + } + drawLayer.rotate(this.#id, angle); + drawLayer.rotate(this.#outlineId, angle); + drawLayer.updateBox(this.#id, box); + drawLayer.updateBox(this.#outlineId, HighlightEditor.#rotateBbox(this.#focusOutlines.box, angle)); + } + render() { + if (this.div) { + return this.div; + } + const div = super.render(); + if (this.#text) { + div.setAttribute("aria-label", this.#text); + div.setAttribute("role", "mark"); + } + if (this.#isFreeHighlight) { + div.classList.add("free"); + } else { + this.div.addEventListener("keydown", this.#boundKeydown); + } + const highlightDiv = this.#highlightDiv = document.createElement("div"); + div.append(highlightDiv); + highlightDiv.setAttribute("aria-hidden", "true"); + highlightDiv.className = "internal"; + highlightDiv.style.clipPath = this.#clipPathId; + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(this.width * parentWidth, this.height * parentHeight); + bindEvents(this, this.#highlightDiv, ["pointerover", "pointerleave"]); + this.enableEditing(); + return div; + } + pointerover() { + this.parent.drawLayer.addClass(this.#outlineId, "hovered"); + } + pointerleave() { + this.parent.drawLayer.removeClass(this.#outlineId, "hovered"); + } + #keydown(event) { + HighlightEditor._keyboardManager.exec(this, event); + } + _moveCaret(direction) { + this.parent.unselect(this); + switch (direction) { + case 0: + case 2: + this.#setCaret(true); + break; + case 1: + case 3: + this.#setCaret(false); + break; + } + } + #setCaret(start) { + if (!this.#anchorNode) { + return; + } + const selection = window.getSelection(); + if (start) { + selection.setPosition(this.#anchorNode, this.#anchorOffset); + } else { + selection.setPosition(this.#focusNode, this.#focusOffset); + } + } + select() { + super.select(); + if (!this.#outlineId) { + return; + } + this.parent?.drawLayer.removeClass(this.#outlineId, "hovered"); + this.parent?.drawLayer.addClass(this.#outlineId, "selected"); + } + unselect() { + super.unselect(); + if (!this.#outlineId) { + return; + } + this.parent?.drawLayer.removeClass(this.#outlineId, "selected"); + if (!this.#isFreeHighlight) { + this.#setCaret(false); + } + } + get _mustFixPosition() { + return !this.#isFreeHighlight; + } + show(visible = this._isVisible) { + super.show(visible); + if (this.parent) { + this.parent.drawLayer.show(this.#id, visible); + this.parent.drawLayer.show(this.#outlineId, visible); + } + } + #getRotation() { + return this.#isFreeHighlight ? this.rotation : 0; + } + #serializeBoxes() { + if (this.#isFreeHighlight) { + return null; + } + const [pageWidth, pageHeight] = this.pageDimensions; + const boxes = this.#boxes; + const quadPoints = new Array(boxes.length * 8); + let i = 0; + for (const { + x, + y, + width, + height + } of boxes) { + const sx = x * pageWidth; + const sy = (1 - y - height) * pageHeight; + quadPoints[i] = quadPoints[i + 4] = sx; + quadPoints[i + 1] = quadPoints[i + 3] = sy; + quadPoints[i + 2] = quadPoints[i + 6] = sx + width * pageWidth; + quadPoints[i + 5] = quadPoints[i + 7] = sy + height * pageHeight; + i += 8; + } + return quadPoints; + } + #serializeOutlines(rect) { + return this.#highlightOutlines.serialize(rect, this.#getRotation()); + } + static startHighlighting(parent, isLTR, { + target: textLayer, + x, + y + }) { + const { + x: layerX, + y: layerY, + width: parentWidth, + height: parentHeight + } = textLayer.getBoundingClientRect(); + const pointerMove = e => { + this.#highlightMove(parent, e); + }; + const pointerDownOptions = { + capture: true, + passive: false + }; + const pointerDown = e => { + e.preventDefault(); + e.stopPropagation(); + }; + const pointerUpCallback = e => { + textLayer.removeEventListener("pointermove", pointerMove); + window.removeEventListener("blur", pointerUpCallback); + window.removeEventListener("pointerup", pointerUpCallback); + window.removeEventListener("pointerdown", pointerDown, pointerDownOptions); + window.removeEventListener("contextmenu", noContextMenu); + this.#endHighlight(parent, e); + }; + window.addEventListener("blur", pointerUpCallback); + window.addEventListener("pointerup", pointerUpCallback); + window.addEventListener("pointerdown", pointerDown, pointerDownOptions); + window.addEventListener("contextmenu", noContextMenu); + textLayer.addEventListener("pointermove", pointerMove); + this._freeHighlight = new FreeOutliner({ + x, + y + }, [layerX, layerY, parentWidth, parentHeight], parent.scale, this._defaultThickness / 2, isLTR, 0.001); + ({ + id: this._freeHighlightId, + clipPathId: this._freeHighlightClipId + } = parent.drawLayer.highlight(this._freeHighlight, this._defaultColor, this._defaultOpacity, true)); + } + static #highlightMove(parent, event) { + if (this._freeHighlight.add(event)) { + parent.drawLayer.updatePath(this._freeHighlightId, this._freeHighlight); + } + } + static #endHighlight(parent, event) { + if (!this._freeHighlight.isEmpty()) { + parent.createAndAddNewEditor(event, false, { + highlightId: this._freeHighlightId, + highlightOutlines: this._freeHighlight.getOutlines(), + clipPathId: this._freeHighlightClipId, + methodOfCreation: "main_toolbar" + }); + } else { + parent.drawLayer.removeFreeHighlight(this._freeHighlightId); + } + this._freeHighlightId = -1; + this._freeHighlight = null; + this._freeHighlightClipId = ""; + } + static deserialize(data, parent, uiManager) { + const editor = super.deserialize(data, parent, uiManager); + const { + rect: [blX, blY, trX, trY], + color, + quadPoints + } = data; + editor.color = Util.makeHexColor(...color); + editor.#opacity = data.opacity; + const [pageWidth, pageHeight] = editor.pageDimensions; + editor.width = (trX - blX) / pageWidth; + editor.height = (trY - blY) / pageHeight; + const boxes = editor.#boxes = []; + for (let i = 0; i < quadPoints.length; i += 8) { + boxes.push({ + x: (quadPoints[4] - trX) / pageWidth, + y: (trY - (1 - quadPoints[i + 5])) / pageHeight, + width: (quadPoints[i + 2] - quadPoints[i]) / pageWidth, + height: (quadPoints[i + 5] - quadPoints[i + 1]) / pageHeight + }); + } + editor.#createOutlines(); + return editor; + } + serialize(isForCopying = false) { + if (this.isEmpty() || isForCopying) { + return null; + } + const rect = this.getRect(0, 0); + const color = AnnotationEditor._colorManager.convert(this.color); + return { + annotationType: AnnotationEditorType.HIGHLIGHT, + color, + opacity: this.#opacity, + thickness: this.#thickness, + quadPoints: this.#serializeBoxes(), + outlines: this.#serializeOutlines(rect), + pageIndex: this.pageIndex, + rect, + rotation: this.#getRotation(), + structTreeParentId: this._structTreeParentId + }; + } + static canCreateNewEmptyEditor() { + return false; + } +} + +;// CONCATENATED MODULE: ./src/display/editor/ink.js + + + + + +class InkEditor extends AnnotationEditor { #baseHeight = 0; #baseWidth = 0; #boundCanvasPointermove = this.canvasPointermove.bind(this); #boundCanvasPointerleave = this.canvasPointerleave.bind(this); #boundCanvasPointerup = this.canvasPointerup.bind(this); #boundCanvasPointerdown = this.canvasPointerdown.bind(this); + #canvasContextMenuTimeoutId = null; #currentPath2D = new Path2D(); #disableEditing = false; #hasSomethingToDraw = false; @@ -16639,6 +17384,7 @@ class InkEditor extends _editor.AnnotationEditor { static _defaultOpacity = 1; static _defaultThickness = 1; static _type = "ink"; + static _editorType = AnnotationEditorType.INK; constructor(params) { super({ ...params, @@ -16657,91 +17403,86 @@ class InkEditor extends _editor.AnnotationEditor { this.y = 0; this._willKeepAspectRatio = true; } - static initialize(l10n) { - _editor.AnnotationEditor.initialize(l10n, { - strings: ["editor_ink_canvas_aria_label", "editor_ink2_aria_label"] - }); + static initialize(l10n, uiManager) { + AnnotationEditor.initialize(l10n, uiManager); } static updateDefaultParams(type, value) { switch (type) { - case _util.AnnotationEditorParamsType.INK_THICKNESS: + case AnnotationEditorParamsType.INK_THICKNESS: InkEditor._defaultThickness = value; break; - case _util.AnnotationEditorParamsType.INK_COLOR: + case AnnotationEditorParamsType.INK_COLOR: InkEditor._defaultColor = value; break; - case _util.AnnotationEditorParamsType.INK_OPACITY: + case AnnotationEditorParamsType.INK_OPACITY: InkEditor._defaultOpacity = value / 100; break; } } updateParams(type, value) { switch (type) { - case _util.AnnotationEditorParamsType.INK_THICKNESS: + case AnnotationEditorParamsType.INK_THICKNESS: this.#updateThickness(value); break; - case _util.AnnotationEditorParamsType.INK_COLOR: + case AnnotationEditorParamsType.INK_COLOR: this.#updateColor(value); break; - case _util.AnnotationEditorParamsType.INK_OPACITY: + case AnnotationEditorParamsType.INK_OPACITY: this.#updateOpacity(value); break; } } static get defaultPropertiesToUpdate() { - return [[_util.AnnotationEditorParamsType.INK_THICKNESS, InkEditor._defaultThickness], [_util.AnnotationEditorParamsType.INK_COLOR, InkEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor], [_util.AnnotationEditorParamsType.INK_OPACITY, Math.round(InkEditor._defaultOpacity * 100)]]; + return [[AnnotationEditorParamsType.INK_THICKNESS, InkEditor._defaultThickness], [AnnotationEditorParamsType.INK_COLOR, InkEditor._defaultColor || AnnotationEditor._defaultLineColor], [AnnotationEditorParamsType.INK_OPACITY, Math.round(InkEditor._defaultOpacity * 100)]]; } get propertiesToUpdate() { - return [[_util.AnnotationEditorParamsType.INK_THICKNESS, this.thickness || InkEditor._defaultThickness], [_util.AnnotationEditorParamsType.INK_COLOR, this.color || InkEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor], [_util.AnnotationEditorParamsType.INK_OPACITY, Math.round(100 * (this.opacity ?? InkEditor._defaultOpacity))]]; + return [[AnnotationEditorParamsType.INK_THICKNESS, this.thickness || InkEditor._defaultThickness], [AnnotationEditorParamsType.INK_COLOR, this.color || InkEditor._defaultColor || AnnotationEditor._defaultLineColor], [AnnotationEditorParamsType.INK_OPACITY, Math.round(100 * (this.opacity ?? InkEditor._defaultOpacity))]]; } #updateThickness(thickness) { + const setThickness = th => { + this.thickness = th; + this.#fitToContent(); + }; const savedThickness = this.thickness; this.addCommands({ - cmd: () => { - this.thickness = thickness; - this.#fitToContent(); - }, - undo: () => { - this.thickness = savedThickness; - this.#fitToContent(); - }, + cmd: setThickness.bind(this, thickness), + undo: setThickness.bind(this, savedThickness), + post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, - type: _util.AnnotationEditorParamsType.INK_THICKNESS, + type: AnnotationEditorParamsType.INK_THICKNESS, overwriteIfSameType: true, keepUndo: true }); } #updateColor(color) { + const setColor = col => { + this.color = col; + this.#redraw(); + }; const savedColor = this.color; this.addCommands({ - cmd: () => { - this.color = color; - this.#redraw(); - }, - undo: () => { - this.color = savedColor; - this.#redraw(); - }, + cmd: setColor.bind(this, color), + undo: setColor.bind(this, savedColor), + post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, - type: _util.AnnotationEditorParamsType.INK_COLOR, + type: AnnotationEditorParamsType.INK_COLOR, overwriteIfSameType: true, keepUndo: true }); } #updateOpacity(opacity) { + const setOpacity = op => { + this.opacity = op; + this.#redraw(); + }; opacity /= 100; const savedOpacity = this.opacity; this.addCommands({ - cmd: () => { - this.opacity = opacity; - this.#redraw(); - }, - undo: () => { - this.opacity = savedOpacity; - this.#redraw(); - }, + cmd: setOpacity.bind(this, opacity), + undo: setOpacity.bind(this, savedOpacity), + post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, - type: _util.AnnotationEditorParamsType.INK_OPACITY, + type: AnnotationEditorParamsType.INK_OPACITY, overwriteIfSameType: true, keepUndo: true }); @@ -16774,6 +17515,10 @@ class InkEditor extends _editor.AnnotationEditor { this.canvas.width = this.canvas.height = 0; this.canvas.remove(); this.canvas = null; + if (this.#canvasContextMenuTimeoutId) { + clearTimeout(this.#canvasContextMenuTimeoutId); + this.#canvasContextMenuTimeoutId = null; + } this.#observer.disconnect(); this.#observer = null; super.remove(); @@ -16844,10 +17589,10 @@ class InkEditor extends _editor.AnnotationEditor { ctx.lineCap = "round"; ctx.lineJoin = "round"; ctx.miterLimit = 10; - ctx.strokeStyle = `${color}${(0, _tools.opacityToHex)(opacity)}`; + ctx.strokeStyle = `${color}${opacityToHex(opacity)}`; } #startDrawing(x, y) { - this.canvas.addEventListener("contextmenu", _display_utils.noContextMenu); + this.canvas.addEventListener("contextmenu", noContextMenu); this.canvas.addEventListener("pointerleave", this.#boundCanvasPointerleave); this.canvas.addEventListener("pointermove", this.#boundCanvasPointermove); this.canvas.addEventListener("pointerup", this.#boundCanvasPointerup); @@ -16857,7 +17602,7 @@ class InkEditor extends _editor.AnnotationEditor { this.#isCanvasInitialized = true; this.#setCanvasDims(); this.thickness ||= InkEditor._defaultThickness; - this.color ||= InkEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor; + this.color ||= InkEditor._defaultColor || AnnotationEditor._defaultLineColor; this.opacity ??= InkEditor._defaultOpacity; } this.currentPath.push([x, y]); @@ -16919,7 +17664,7 @@ class InkEditor extends _editor.AnnotationEditor { this.allRawPaths.push(currentPath); this.paths.push(bezier); this.bezierPath2D.push(path2D); - this.rebuild(); + this._uiManager.rebuild(this); }; const undo = () => { this.allRawPaths.pop(); @@ -17025,7 +17770,7 @@ class InkEditor extends _editor.AnnotationEditor { this.#disableEditing = true; this.div.classList.add("disabled"); this.#fitToContent(true); - this.makeResizable(); + this.select(); this.parent.addInkEditorIfNeeded(true); this.moveInDOM(); this.div.focus({ @@ -17045,8 +17790,10 @@ class InkEditor extends _editor.AnnotationEditor { } this.setInForeground(); event.preventDefault(); - if (event.type !== "mouse") { - this.div.focus(); + if (!this.div.contains(document.activeElement)) { + this.div.focus({ + preventScroll: true + }); } this.#startDrawing(event.offsetX, event.offsetY); } @@ -17066,8 +17813,12 @@ class InkEditor extends _editor.AnnotationEditor { this.canvas.removeEventListener("pointermove", this.#boundCanvasPointermove); this.canvas.removeEventListener("pointerup", this.#boundCanvasPointerup); this.canvas.addEventListener("pointerdown", this.#boundCanvasPointerdown); - setTimeout(() => { - this.canvas.removeEventListener("contextmenu", _display_utils.noContextMenu); + if (this.#canvasContextMenuTimeoutId) { + clearTimeout(this.#canvasContextMenuTimeoutId); + } + this.#canvasContextMenuTimeoutId = setTimeout(() => { + this.#canvasContextMenuTimeoutId = null; + this.canvas.removeEventListener("contextmenu", noContextMenu); }, 10); this.#stopDrawing(event.offsetX, event.offsetY); this.addToAnnotationStorage(); @@ -17077,7 +17828,7 @@ class InkEditor extends _editor.AnnotationEditor { this.canvas = document.createElement("canvas"); this.canvas.width = this.canvas.height = 0; this.canvas.className = "inkEditorCanvas"; - _editor.AnnotationEditor._l10nPromise.get("editor_ink_canvas_aria_label").then(msg => this.canvas?.setAttribute("aria-label", msg)); + this.canvas.setAttribute("data-l10n-id", "pdfjs-ink-canvas"); this.div.append(this.canvas); this.ctx = this.canvas.getContext("2d"); } @@ -17103,7 +17854,7 @@ class InkEditor extends _editor.AnnotationEditor { baseY = this.y; } super.render(); - _editor.AnnotationEditor._l10nPromise.get("editor_ink2_aria_label").then(msg => this.div?.setAttribute("aria-label", msg)); + this.div.setAttribute("data-l10n-id", "pdfjs-ink"); const [x, y, w, h] = this.#getInitialBBox(); this.setAt(x, y, 0, 0); this.setDims(w, h); @@ -17253,6 +18004,13 @@ class InkEditor extends _editor.AnnotationEditor { const points = []; for (let j = 0, jj = bezier.length; j < jj; j++) { const [first, control1, control2, second] = bezier[j]; + if (first[0] === second[0] && first[1] === second[1] && jj === 1) { + const p0 = s * first[0] + shiftX; + const p1 = s * first[1] + shiftY; + buffer.push(p0, p1); + points.push(p0, p1); + break; + } const p10 = s * first[0] + shiftX; const p11 = s * first[1] + shiftY; const p20 = s * control1[0] + shiftX; @@ -17285,7 +18043,7 @@ class InkEditor extends _editor.AnnotationEditor { let yMax = -Infinity; for (const path of this.paths) { for (const [first, control1, control2, second] of path) { - const bbox = _util.Util.bezierBoundingBox(...first, ...control1, ...control2, ...second); + const bbox = Util.bezierBoundingBox(...first, ...control1, ...control2, ...second); xMin = Math.min(xMin, bbox[0]); yMin = Math.min(yMin, bbox[1]); xMax = Math.max(xMax, bbox[2]); @@ -17307,8 +18065,8 @@ class InkEditor extends _editor.AnnotationEditor { } const bbox = this.#getBbox(); const padding = this.#getPadding(); - this.#baseWidth = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]); - this.#baseHeight = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]); + this.#baseWidth = Math.max(AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]); + this.#baseHeight = Math.max(AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]); const width = Math.ceil(padding + this.#baseWidth * this.scaleFactor); const height = Math.ceil(padding + this.#baseHeight * this.scaleFactor); const [parentWidth, parentHeight] = this.parentDimensions; @@ -17328,12 +18086,12 @@ class InkEditor extends _editor.AnnotationEditor { this.translate(prevTranslationX - this.translationX - unscaledPadding, prevTranslationY - this.translationY - unscaledPadding); } static deserialize(data, parent, uiManager) { - if (data instanceof _annotation_layer.InkAnnotationElement) { + if (data instanceof InkAnnotationElement) { return null; } const editor = super.deserialize(data, parent, uiManager); editor.thickness = data.thickness; - editor.color = _util.Util.makeHexColor(...data.color); + editor.color = Util.makeHexColor(...data.color); editor.opacity = data.opacity; const [pageWidth, pageHeight] = editor.pageDimensions; const width = editor.width * pageWidth; @@ -17371,8 +18129,8 @@ class InkEditor extends _editor.AnnotationEditor { editor.bezierPath2D.push(path2D); } const bbox = editor.#getBbox(); - editor.#baseWidth = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]); - editor.#baseHeight = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]); + editor.#baseWidth = Math.max(AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]); + editor.#baseHeight = Math.max(AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]); editor.#setScaleFactor(width, height); return editor; } @@ -17381,9 +18139,9 @@ class InkEditor extends _editor.AnnotationEditor { return null; } const rect = this.getRect(0, 0); - const color = _editor.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle); + const color = AnnotationEditor._colorManager.convert(this.ctx.strokeStyle); return { - annotationType: _util.AnnotationEditorType.INK, + annotationType: AnnotationEditorType.INK, color, thickness: this.thickness, opacity: this.opacity, @@ -17395,34 +18153,26 @@ class InkEditor extends _editor.AnnotationEditor { }; } } -exports.InkEditor = InkEditor; -/***/ }), -/* 34 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +;// CONCATENATED MODULE: ./src/display/editor/stamp.js -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.StampEditor = void 0; -var _util = __w_pdfjs_require__(1); -var _editor = __w_pdfjs_require__(4); -var _display_utils = __w_pdfjs_require__(6); -var _annotation_layer = __w_pdfjs_require__(29); -class StampEditor extends _editor.AnnotationEditor { + +class StampEditor extends AnnotationEditor { #bitmap = null; #bitmapId = null; #bitmapPromise = null; #bitmapUrl = null; #bitmapFile = null; + #bitmapFileName = ""; #canvas = null; #observer = null; #resizeTimeoutId = null; #isSvg = false; #hasBeenAddedInUndoStack = false; static _type = "stamp"; + static _editorType = AnnotationEditorType.STAMP; constructor(params) { super({ ...params, @@ -17431,21 +18181,21 @@ class StampEditor extends _editor.AnnotationEditor { this.#bitmapUrl = params.bitmapUrl; this.#bitmapFile = params.bitmapFile; } - static initialize(l10n) { - _editor.AnnotationEditor.initialize(l10n); + static initialize(l10n, uiManager) { + AnnotationEditor.initialize(l10n, uiManager); } static get supportedTypes() { const types = ["apng", "avif", "bmp", "gif", "jpeg", "png", "svg+xml", "webp", "x-icon"]; - return (0, _util.shadow)(this, "supportedTypes", types.map(type => `image/${type}`)); + return shadow(this, "supportedTypes", types.map(type => `image/${type}`)); } static get supportedTypesStr() { - return (0, _util.shadow)(this, "supportedTypesStr", this.supportedTypes.join(",")); + return shadow(this, "supportedTypesStr", this.supportedTypes.join(",")); } static isHandlingMimeForPasting(mime) { return this.supportedTypes.includes(mime); } static paste(item, parent) { - parent.pasteEditor(_util.AnnotationEditorType.STAMP, { + parent.pasteEditor(AnnotationEditorType.STAMP, { bitmapFile: item.getAsFile() }); } @@ -17459,6 +18209,9 @@ class StampEditor extends _editor.AnnotationEditor { this.#bitmapId = data.id; this.#isSvg = data.isSvg; } + if (data.file) { + this.#bitmapFileName = data.file.name; + } this.#createCanvas(); } #getBitmapDone() { @@ -17517,6 +18270,10 @@ class StampEditor extends _editor.AnnotationEditor { this.#canvas = null; this.#observer?.disconnect(); this.#observer = null; + if (this.#resizeTimeoutId) { + clearTimeout(this.#resizeTimeoutId); + this.#resizeTimeoutId = null; + } } super.remove(); } @@ -17531,7 +18288,7 @@ class StampEditor extends _editor.AnnotationEditor { if (this.div === null) { return; } - if (this.#bitmapId) { + if (this.#bitmapId && this.#canvas === null) { this.#getBitmap(); } if (!this.isAttachedToDOM) { @@ -17543,7 +18300,7 @@ class StampEditor extends _editor.AnnotationEditor { this.div.focus(); } isEmpty() { - return !(this.#bitmapPromise || this.#bitmap || this.#bitmapUrl || this.#bitmapFile); + return !(this.#bitmapPromise || this.#bitmap || this.#bitmapUrl || this.#bitmapFile || this.#bitmapId); } get isResizable() { return true; @@ -17559,6 +18316,7 @@ class StampEditor extends _editor.AnnotationEditor { } super.render(); this.div.hidden = true; + this.addAltTextButton(); if (this.#bitmap) { this.#createCanvas(); } else { @@ -17600,17 +18358,12 @@ class StampEditor extends _editor.AnnotationEditor { this.parent.addUndoableEditor(this); this.#hasBeenAddedInUndoStack = true; } - this._uiManager._eventBus.dispatch("reporttelemetry", { - source: this, - details: { - type: "editing", - subtype: this.editorType, - data: { - action: "inserted_image" - } - } + this._reportTelemetry({ + action: "inserted_image" }); - this.addAltTextButton(); + if (this.#bitmapFileName) { + canvas.setAttribute("aria-label", this.#bitmapFileName); + } } #setDimensions(width, height) { const [parentWidth, parentHeight] = this.parentDimensions; @@ -17666,10 +18419,35 @@ class StampEditor extends _editor.AnnotationEditor { canvas.width = width; canvas.height = height; const bitmap = this.#isSvg ? this.#bitmap : this.#scaleBitmap(width, height); + if (this._uiManager.hasMLManager && !this.hasAltText()) { + const offscreen = new OffscreenCanvas(width, height); + const ctx = offscreen.getContext("2d"); + ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height); + this._uiManager.mlGuess({ + service: "image-to-text", + request: { + data: ctx.getImageData(0, 0, width, height).data, + width, + height, + channels: 4 + } + }).then(response => { + const altText = response?.output || ""; + if (this.parent && altText && !this.hasAltText()) { + this.altTextData = { + altText, + decorative: false + }; + } + }); + } const ctx = canvas.getContext("2d"); ctx.filter = this._uiManager.hcmFilter; ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height); } + getImageForAltText() { + return this.#canvas; + } #serializeBitmap(toUrl) { if (toUrl) { if (this.#isSvg) { @@ -17689,8 +18467,8 @@ class StampEditor extends _editor.AnnotationEditor { } if (this.#isSvg) { const [pageWidth, pageHeight] = this.pageDimensions; - const width = Math.round(this.width * pageWidth * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); - const height = Math.round(this.height * pageHeight * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); + const width = Math.round(this.width * pageWidth * PixelsPerInch.PDF_TO_CSS_UNITS); + const height = Math.round(this.height * pageHeight * PixelsPerInch.PDF_TO_CSS_UNITS); const offscreen = new OffscreenCanvas(width, height); const ctx = offscreen.getContext("2d"); ctx.drawImage(this.#bitmap, 0, 0, this.#bitmap.width, this.#bitmap.height, 0, 0, width, height); @@ -17708,7 +18486,7 @@ class StampEditor extends _editor.AnnotationEditor { this.#observer.observe(this.div); } static deserialize(data, parent, uiManager) { - if (data instanceof _annotation_layer.StampAnnotationElement) { + if (data instanceof StampAnnotationElement) { return null; } const editor = super.deserialize(data, parent, uiManager); @@ -17738,7 +18516,7 @@ class StampEditor extends _editor.AnnotationEditor { return null; } const serialized = { - annotationType: _util.AnnotationEditorType.STAMP, + annotationType: AnnotationEditorType.STAMP, bitmapId: this.#bitmapId, pageIndex: this.pageIndex, rect: this.getRect(0, 0), @@ -17783,324 +18561,861 @@ class StampEditor extends _editor.AnnotationEditor { return serialized; } } -exports.StampEditor = StampEditor; -/***/ }) -/******/ ]); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __w_pdfjs_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. -(() => { -var exports = __webpack_exports__; +;// CONCATENATED MODULE: ./src/display/editor/annotation_editor_layer.js -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -Object.defineProperty(exports, "AbortException", ({ - enumerable: true, - get: function () { - return _util.AbortException; - } -})); -Object.defineProperty(exports, "AnnotationEditorLayer", ({ - enumerable: true, - get: function () { - return _annotation_editor_layer.AnnotationEditorLayer; - } -})); -Object.defineProperty(exports, "AnnotationEditorParamsType", ({ - enumerable: true, - get: function () { - return _util.AnnotationEditorParamsType; - } -})); -Object.defineProperty(exports, "AnnotationEditorType", ({ - enumerable: true, - get: function () { - return _util.AnnotationEditorType; - } -})); -Object.defineProperty(exports, "AnnotationEditorUIManager", ({ - enumerable: true, - get: function () { - return _tools.AnnotationEditorUIManager; - } -})); -Object.defineProperty(exports, "AnnotationLayer", ({ - enumerable: true, - get: function () { - return _annotation_layer.AnnotationLayer; - } -})); -Object.defineProperty(exports, "AnnotationMode", ({ - enumerable: true, - get: function () { - return _util.AnnotationMode; - } -})); -Object.defineProperty(exports, "CMapCompressionType", ({ - enumerable: true, - get: function () { - return _util.CMapCompressionType; - } -})); -Object.defineProperty(exports, "DOMSVGFactory", ({ - enumerable: true, - get: function () { - return _display_utils.DOMSVGFactory; - } -})); -Object.defineProperty(exports, "FeatureTest", ({ - enumerable: true, - get: function () { - return _util.FeatureTest; - } -})); -Object.defineProperty(exports, "GlobalWorkerOptions", ({ - enumerable: true, - get: function () { - return _worker_options.GlobalWorkerOptions; - } -})); -Object.defineProperty(exports, "ImageKind", ({ - enumerable: true, - get: function () { - return _util.ImageKind; - } -})); -Object.defineProperty(exports, "InvalidPDFException", ({ - enumerable: true, - get: function () { - return _util.InvalidPDFException; - } -})); -Object.defineProperty(exports, "MissingPDFException", ({ - enumerable: true, - get: function () { - return _util.MissingPDFException; - } -})); -Object.defineProperty(exports, "OPS", ({ - enumerable: true, - get: function () { - return _util.OPS; - } -})); -Object.defineProperty(exports, "PDFDataRangeTransport", ({ - enumerable: true, - get: function () { - return _api.PDFDataRangeTransport; - } -})); -Object.defineProperty(exports, "PDFDateString", ({ - enumerable: true, - get: function () { - return _display_utils.PDFDateString; - } -})); -Object.defineProperty(exports, "PDFWorker", ({ - enumerable: true, - get: function () { - return _api.PDFWorker; - } -})); -Object.defineProperty(exports, "PasswordResponses", ({ - enumerable: true, - get: function () { - return _util.PasswordResponses; - } -})); -Object.defineProperty(exports, "PermissionFlag", ({ - enumerable: true, - get: function () { - return _util.PermissionFlag; - } -})); -Object.defineProperty(exports, "PixelsPerInch", ({ - enumerable: true, - get: function () { - return _display_utils.PixelsPerInch; - } -})); -Object.defineProperty(exports, "PromiseCapability", ({ - enumerable: true, - get: function () { - return _util.PromiseCapability; - } -})); -Object.defineProperty(exports, "RenderingCancelledException", ({ - enumerable: true, - get: function () { - return _display_utils.RenderingCancelledException; - } -})); -Object.defineProperty(exports, "SVGGraphics", ({ - enumerable: true, - get: function () { - return _api.SVGGraphics; - } -})); -Object.defineProperty(exports, "UnexpectedResponseException", ({ - enumerable: true, - get: function () { - return _util.UnexpectedResponseException; - } -})); -Object.defineProperty(exports, "Util", ({ - enumerable: true, - get: function () { - return _util.Util; - } -})); -Object.defineProperty(exports, "VerbosityLevel", ({ - enumerable: true, - get: function () { - return _util.VerbosityLevel; - } -})); -Object.defineProperty(exports, "XfaLayer", ({ - enumerable: true, - get: function () { - return _xfa_layer.XfaLayer; - } -})); -Object.defineProperty(exports, "build", ({ - enumerable: true, - get: function () { - return _api.build; - } -})); -Object.defineProperty(exports, "createValidAbsoluteUrl", ({ - enumerable: true, - get: function () { - return _util.createValidAbsoluteUrl; - } -})); -Object.defineProperty(exports, "getDocument", ({ - enumerable: true, - get: function () { - return _api.getDocument; - } -})); -Object.defineProperty(exports, "getFilenameFromUrl", ({ - enumerable: true, - get: function () { - return _display_utils.getFilenameFromUrl; - } -})); -Object.defineProperty(exports, "getPdfFilenameFromUrl", ({ - enumerable: true, - get: function () { - return _display_utils.getPdfFilenameFromUrl; - } -})); -Object.defineProperty(exports, "getXfaPageViewport", ({ - enumerable: true, - get: function () { - return _display_utils.getXfaPageViewport; - } -})); -Object.defineProperty(exports, "isDataScheme", ({ - enumerable: true, - get: function () { - return _display_utils.isDataScheme; - } -})); -Object.defineProperty(exports, "isPdfFile", ({ - enumerable: true, - get: function () { - return _display_utils.isPdfFile; - } -})); -Object.defineProperty(exports, "loadScript", ({ - enumerable: true, - get: function () { - return _display_utils.loadScript; - } -})); -Object.defineProperty(exports, "noContextMenu", ({ - enumerable: true, - get: function () { - return _display_utils.noContextMenu; - } -})); -Object.defineProperty(exports, "normalizeUnicode", ({ - enumerable: true, - get: function () { - return _util.normalizeUnicode; - } -})); -Object.defineProperty(exports, "renderTextLayer", ({ - enumerable: true, - get: function () { - return _text_layer.renderTextLayer; - } -})); -Object.defineProperty(exports, "setLayerDimensions", ({ - enumerable: true, - get: function () { - return _display_utils.setLayerDimensions; - } -})); -Object.defineProperty(exports, "shadow", ({ - enumerable: true, - get: function () { - return _util.shadow; - } -})); -Object.defineProperty(exports, "updateTextLayer", ({ - enumerable: true, - get: function () { - return _text_layer.updateTextLayer; - } -})); -Object.defineProperty(exports, "version", ({ - enumerable: true, - get: function () { - return _api.version; - } -})); -var _util = __w_pdfjs_require__(1); -var _api = __w_pdfjs_require__(2); -var _display_utils = __w_pdfjs_require__(6); -var _text_layer = __w_pdfjs_require__(26); -var _annotation_editor_layer = __w_pdfjs_require__(27); -var _tools = __w_pdfjs_require__(5); -var _annotation_layer = __w_pdfjs_require__(29); -var _worker_options = __w_pdfjs_require__(14); -var _xfa_layer = __w_pdfjs_require__(32); -const pdfjsVersion = '3.11.176'; -const pdfjsBuild = '92d22853e'; -})(); -/******/ return __webpack_exports__; -/******/ })() -; -}); -//# sourceMappingURL=pdf.js.map \ No newline at end of file + + + + +class AnnotationEditorLayer { + #accessibilityManager; + #allowClick = false; + #annotationLayer = null; + #boundPointerup = null; + #boundPointerdown = null; + #boundTextLayerPointerDown = null; + #editorFocusTimeoutId = null; + #editors = new Map(); + #hadPointerDown = false; + #isCleaningUp = false; + #isDisabling = false; + #textLayer = null; + #uiManager; + static _initialized = false; + static #editorTypes = new Map([FreeTextEditor, InkEditor, StampEditor, HighlightEditor].map(type => [type._editorType, type])); + constructor({ + uiManager, + pageIndex, + div, + accessibilityManager, + annotationLayer, + drawLayer, + textLayer, + viewport, + l10n + }) { + const editorTypes = [...AnnotationEditorLayer.#editorTypes.values()]; + if (!AnnotationEditorLayer._initialized) { + AnnotationEditorLayer._initialized = true; + for (const editorType of editorTypes) { + editorType.initialize(l10n, uiManager); + } + } + uiManager.registerEditorTypes(editorTypes); + this.#uiManager = uiManager; + this.pageIndex = pageIndex; + this.div = div; + this.#accessibilityManager = accessibilityManager; + this.#annotationLayer = annotationLayer; + this.viewport = viewport; + this.#textLayer = textLayer; + this.drawLayer = drawLayer; + this.#uiManager.addLayer(this); + } + get isEmpty() { + return this.#editors.size === 0; + } + get isInvisible() { + return this.isEmpty && this.#uiManager.getMode() === AnnotationEditorType.NONE; + } + updateToolbar(mode) { + this.#uiManager.updateToolbar(mode); + } + updateMode(mode = this.#uiManager.getMode()) { + this.#cleanup(); + switch (mode) { + case AnnotationEditorType.NONE: + this.disableTextSelection(); + this.togglePointerEvents(false); + this.toggleAnnotationLayerPointerEvents(true); + this.disableClick(); + return; + case AnnotationEditorType.INK: + this.addInkEditorIfNeeded(false); + this.disableTextSelection(); + this.togglePointerEvents(true); + this.disableClick(); + break; + case AnnotationEditorType.HIGHLIGHT: + this.enableTextSelection(); + this.togglePointerEvents(false); + this.disableClick(); + break; + default: + this.disableTextSelection(); + this.togglePointerEvents(true); + this.enableClick(); + } + this.toggleAnnotationLayerPointerEvents(false); + const { + classList + } = this.div; + for (const editorType of AnnotationEditorLayer.#editorTypes.values()) { + classList.toggle(`${editorType._type}Editing`, mode === editorType._editorType); + } + this.div.hidden = false; + } + hasTextLayer(textLayer) { + return textLayer === this.#textLayer?.div; + } + addInkEditorIfNeeded(isCommitting) { + if (this.#uiManager.getMode() !== AnnotationEditorType.INK) { + return; + } + if (!isCommitting) { + for (const editor of this.#editors.values()) { + if (editor.isEmpty()) { + editor.setInBackground(); + return; + } + } + } + const editor = this.createAndAddNewEditor({ + offsetX: 0, + offsetY: 0 + }, false); + editor.setInBackground(); + } + setEditingState(isEditing) { + this.#uiManager.setEditingState(isEditing); + } + addCommands(params) { + this.#uiManager.addCommands(params); + } + togglePointerEvents(enabled = false) { + this.div.classList.toggle("disabled", !enabled); + } + toggleAnnotationLayerPointerEvents(enabled = false) { + this.#annotationLayer?.div.classList.toggle("disabled", !enabled); + } + enable() { + this.div.tabIndex = 0; + this.togglePointerEvents(true); + const annotationElementIds = new Set(); + for (const editor of this.#editors.values()) { + editor.enableEditing(); + editor.show(true); + if (editor.annotationElementId) { + this.#uiManager.removeChangedExistingAnnotation(editor); + annotationElementIds.add(editor.annotationElementId); + } + } + if (!this.#annotationLayer) { + return; + } + const editables = this.#annotationLayer.getEditableAnnotations(); + for (const editable of editables) { + editable.hide(); + if (this.#uiManager.isDeletedAnnotationElement(editable.data.id)) { + continue; + } + if (annotationElementIds.has(editable.data.id)) { + continue; + } + const editor = this.deserialize(editable); + if (!editor) { + continue; + } + this.addOrRebuild(editor); + editor.enableEditing(); + } + } + disable() { + this.#isDisabling = true; + this.div.tabIndex = -1; + this.togglePointerEvents(false); + const changedAnnotations = new Map(); + const resetAnnotations = new Map(); + for (const editor of this.#editors.values()) { + editor.disableEditing(); + if (!editor.annotationElementId) { + continue; + } + if (editor.serialize() !== null) { + changedAnnotations.set(editor.annotationElementId, editor); + continue; + } else { + resetAnnotations.set(editor.annotationElementId, editor); + } + this.getEditableAnnotation(editor.annotationElementId)?.show(); + editor.remove(); + } + if (this.#annotationLayer) { + const editables = this.#annotationLayer.getEditableAnnotations(); + for (const editable of editables) { + const { + id + } = editable.data; + if (this.#uiManager.isDeletedAnnotationElement(id)) { + continue; + } + let editor = resetAnnotations.get(id); + if (editor) { + editor.resetAnnotationElement(editable); + editor.show(false); + editable.show(); + continue; + } + editor = changedAnnotations.get(id); + if (editor) { + this.#uiManager.addChangedExistingAnnotation(editor); + editor.renderAnnotationElement(editable); + editor.show(false); + } + editable.show(); + } + } + this.#cleanup(); + if (this.isEmpty) { + this.div.hidden = true; + } + const { + classList + } = this.div; + for (const editorType of AnnotationEditorLayer.#editorTypes.values()) { + classList.remove(`${editorType._type}Editing`); + } + this.disableTextSelection(); + this.toggleAnnotationLayerPointerEvents(true); + this.#isDisabling = false; + } + getEditableAnnotation(id) { + return this.#annotationLayer?.getEditableAnnotation(id) || null; + } + setActiveEditor(editor) { + const currentActive = this.#uiManager.getActive(); + if (currentActive === editor) { + return; + } + this.#uiManager.setActiveEditor(editor); + } + enableTextSelection() { + this.div.tabIndex = -1; + if (this.#textLayer?.div && !this.#boundTextLayerPointerDown) { + this.#boundTextLayerPointerDown = this.#textLayerPointerDown.bind(this); + this.#textLayer.div.addEventListener("pointerdown", this.#boundTextLayerPointerDown); + this.#textLayer.div.classList.add("highlighting"); + } + } + disableTextSelection() { + this.div.tabIndex = 0; + if (this.#textLayer?.div && this.#boundTextLayerPointerDown) { + this.#textLayer.div.removeEventListener("pointerdown", this.#boundTextLayerPointerDown); + this.#boundTextLayerPointerDown = null; + this.#textLayer.div.classList.remove("highlighting"); + } + } + #textLayerPointerDown(event) { + this.#uiManager.unselectAll(); + if (event.target === this.#textLayer.div) { + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + this.#uiManager.showAllEditors("highlight", true, true); + this.#textLayer.div.classList.add("free"); + HighlightEditor.startHighlighting(this, this.#uiManager.direction === "ltr", event); + this.#textLayer.div.addEventListener("pointerup", () => { + this.#textLayer.div.classList.remove("free"); + }, { + once: true + }); + event.preventDefault(); + } + } + enableClick() { + if (this.#boundPointerdown) { + return; + } + this.#boundPointerdown = this.pointerdown.bind(this); + this.#boundPointerup = this.pointerup.bind(this); + this.div.addEventListener("pointerdown", this.#boundPointerdown); + this.div.addEventListener("pointerup", this.#boundPointerup); + } + disableClick() { + if (!this.#boundPointerdown) { + return; + } + this.div.removeEventListener("pointerdown", this.#boundPointerdown); + this.div.removeEventListener("pointerup", this.#boundPointerup); + this.#boundPointerdown = null; + this.#boundPointerup = null; + } + attach(editor) { + this.#editors.set(editor.id, editor); + const { + annotationElementId + } = editor; + if (annotationElementId && this.#uiManager.isDeletedAnnotationElement(annotationElementId)) { + this.#uiManager.removeDeletedAnnotationElement(editor); + } + } + detach(editor) { + this.#editors.delete(editor.id); + this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv); + if (!this.#isDisabling && editor.annotationElementId) { + this.#uiManager.addDeletedAnnotationElement(editor); + } + } + remove(editor) { + this.detach(editor); + this.#uiManager.removeEditor(editor); + editor.div.remove(); + editor.isAttachedToDOM = false; + if (!this.#isCleaningUp) { + this.addInkEditorIfNeeded(false); + } + } + changeParent(editor) { + if (editor.parent === this) { + return; + } + if (editor.parent && editor.annotationElementId) { + this.#uiManager.addDeletedAnnotationElement(editor.annotationElementId); + AnnotationEditor.deleteAnnotationElement(editor); + editor.annotationElementId = null; + } + this.attach(editor); + editor.parent?.detach(editor); + editor.setParent(this); + if (editor.div && editor.isAttachedToDOM) { + editor.div.remove(); + this.div.append(editor.div); + } + } + add(editor) { + if (editor.parent === this && editor.isAttachedToDOM) { + return; + } + this.changeParent(editor); + this.#uiManager.addEditor(editor); + this.attach(editor); + if (!editor.isAttachedToDOM) { + const div = editor.render(); + this.div.append(div); + editor.isAttachedToDOM = true; + } + editor.fixAndSetPosition(); + editor.onceAdded(); + this.#uiManager.addToAnnotationStorage(editor); + editor._reportTelemetry(editor.telemetryInitialData); + } + moveEditorInDOM(editor) { + if (!editor.isAttachedToDOM) { + return; + } + const { + activeElement + } = document; + if (editor.div.contains(activeElement) && !this.#editorFocusTimeoutId) { + editor._focusEventsAllowed = false; + this.#editorFocusTimeoutId = setTimeout(() => { + this.#editorFocusTimeoutId = null; + if (!editor.div.contains(document.activeElement)) { + editor.div.addEventListener("focusin", () => { + editor._focusEventsAllowed = true; + }, { + once: true + }); + activeElement.focus(); + } else { + editor._focusEventsAllowed = true; + } + }, 0); + } + editor._structTreeParentId = this.#accessibilityManager?.moveElementInDOM(this.div, editor.div, editor.contentDiv, true); + } + addOrRebuild(editor) { + if (editor.needsToBeRebuilt()) { + editor.parent ||= this; + editor.rebuild(); + editor.show(); + } else { + this.add(editor); + } + } + addUndoableEditor(editor) { + const cmd = () => editor._uiManager.rebuild(editor); + const undo = () => { + editor.remove(); + }; + this.addCommands({ + cmd, + undo, + mustExec: false + }); + } + getNextId() { + return this.#uiManager.getId(); + } + get #currentEditorType() { + return AnnotationEditorLayer.#editorTypes.get(this.#uiManager.getMode()); + } + #createNewEditor(params) { + const editorType = this.#currentEditorType; + return editorType ? new editorType.prototype.constructor(params) : null; + } + canCreateNewEmptyEditor() { + return this.#currentEditorType?.canCreateNewEmptyEditor(); + } + pasteEditor(mode, params) { + this.#uiManager.updateToolbar(mode); + this.#uiManager.updateMode(mode); + const { + offsetX, + offsetY + } = this.#getCenterPoint(); + const id = this.getNextId(); + const editor = this.#createNewEditor({ + parent: this, + id, + x: offsetX, + y: offsetY, + uiManager: this.#uiManager, + isCentered: true, + ...params + }); + if (editor) { + this.add(editor); + } + } + deserialize(data) { + return AnnotationEditorLayer.#editorTypes.get(data.annotationType ?? data.annotationEditorType)?.deserialize(data, this, this.#uiManager) || null; + } + createAndAddNewEditor(event, isCentered, data = {}) { + const id = this.getNextId(); + const editor = this.#createNewEditor({ + parent: this, + id, + x: event.offsetX, + y: event.offsetY, + uiManager: this.#uiManager, + isCentered, + ...data + }); + if (editor) { + this.add(editor); + } + return editor; + } + #getCenterPoint() { + const { + x, + y, + width, + height + } = this.div.getBoundingClientRect(); + const tlX = Math.max(0, x); + const tlY = Math.max(0, y); + const brX = Math.min(window.innerWidth, x + width); + const brY = Math.min(window.innerHeight, y + height); + const centerX = (tlX + brX) / 2 - x; + const centerY = (tlY + brY) / 2 - y; + const [offsetX, offsetY] = this.viewport.rotation % 180 === 0 ? [centerX, centerY] : [centerY, centerX]; + return { + offsetX, + offsetY + }; + } + addNewEditor() { + this.createAndAddNewEditor(this.#getCenterPoint(), true); + } + setSelected(editor) { + this.#uiManager.setSelected(editor); + } + toggleSelected(editor) { + this.#uiManager.toggleSelected(editor); + } + isSelected(editor) { + return this.#uiManager.isSelected(editor); + } + unselect(editor) { + this.#uiManager.unselect(editor); + } + pointerup(event) { + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + if (event.target !== this.div) { + return; + } + if (!this.#hadPointerDown) { + return; + } + this.#hadPointerDown = false; + if (!this.#allowClick) { + this.#allowClick = true; + return; + } + if (this.#uiManager.getMode() === AnnotationEditorType.STAMP) { + this.#uiManager.unselectAll(); + return; + } + this.createAndAddNewEditor(event, false); + } + pointerdown(event) { + if (this.#uiManager.getMode() === AnnotationEditorType.HIGHLIGHT) { + this.enableTextSelection(); + } + if (this.#hadPointerDown) { + this.#hadPointerDown = false; + return; + } + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + if (event.target !== this.div) { + return; + } + this.#hadPointerDown = true; + const editor = this.#uiManager.getActive(); + this.#allowClick = !editor || editor.isEmpty(); + } + findNewParent(editor, x, y) { + const layer = this.#uiManager.findParent(x, y); + if (layer === null || layer === this) { + return false; + } + layer.changeParent(editor); + return true; + } + destroy() { + if (this.#uiManager.getActive()?.parent === this) { + this.#uiManager.commitOrRemove(); + this.#uiManager.setActiveEditor(null); + } + if (this.#editorFocusTimeoutId) { + clearTimeout(this.#editorFocusTimeoutId); + this.#editorFocusTimeoutId = null; + } + for (const editor of this.#editors.values()) { + this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv); + editor.setParent(null); + editor.isAttachedToDOM = false; + editor.div.remove(); + } + this.div = null; + this.#editors.clear(); + this.#uiManager.removeLayer(this); + } + #cleanup() { + this.#isCleaningUp = true; + for (const editor of this.#editors.values()) { + if (editor.isEmpty()) { + editor.remove(); + } + } + this.#isCleaningUp = false; + } + render({ + viewport + }) { + this.viewport = viewport; + setLayerDimensions(this.div, viewport); + for (const editor of this.#uiManager.getEditors(this.pageIndex)) { + this.add(editor); + editor.rebuild(); + } + this.updateMode(); + } + update({ + viewport + }) { + this.#uiManager.commitOrRemove(); + this.#cleanup(); + const oldRotation = this.viewport.rotation; + const rotation = viewport.rotation; + this.viewport = viewport; + setLayerDimensions(this.div, { + rotation + }); + if (oldRotation !== rotation) { + for (const editor of this.#editors.values()) { + editor.rotate(rotation); + } + } + this.addInkEditorIfNeeded(false); + } + get pageDimensions() { + const { + pageWidth, + pageHeight + } = this.viewport.rawDims; + return [pageWidth, pageHeight]; + } + get scale() { + return this.#uiManager.viewParameters.realScale; + } +} + +;// CONCATENATED MODULE: ./src/display/draw_layer.js + + +class DrawLayer { + #parent = null; + #id = 0; + #mapping = new Map(); + #toUpdate = new Map(); + constructor({ + pageIndex + }) { + this.pageIndex = pageIndex; + } + setParent(parent) { + if (!this.#parent) { + this.#parent = parent; + return; + } + if (this.#parent !== parent) { + if (this.#mapping.size > 0) { + for (const root of this.#mapping.values()) { + root.remove(); + parent.append(root); + } + } + this.#parent = parent; + } + } + static get _svgFactory() { + return shadow(this, "_svgFactory", new DOMSVGFactory()); + } + static #setBox(element, { + x = 0, + y = 0, + width = 1, + height = 1 + } = {}) { + const { + style + } = element; + style.top = `${100 * y}%`; + style.left = `${100 * x}%`; + style.width = `${100 * width}%`; + style.height = `${100 * height}%`; + } + #createSVG(box) { + const svg = DrawLayer._svgFactory.create(1, 1, true); + this.#parent.append(svg); + svg.setAttribute("aria-hidden", true); + DrawLayer.#setBox(svg, box); + return svg; + } + #createClipPath(defs, pathId) { + const clipPath = DrawLayer._svgFactory.createElement("clipPath"); + defs.append(clipPath); + const clipPathId = `clip_${pathId}`; + clipPath.setAttribute("id", clipPathId); + clipPath.setAttribute("clipPathUnits", "objectBoundingBox"); + const clipPathUse = DrawLayer._svgFactory.createElement("use"); + clipPath.append(clipPathUse); + clipPathUse.setAttribute("href", `#${pathId}`); + clipPathUse.classList.add("clip"); + return clipPathId; + } + highlight(outlines, color, opacity, isPathUpdatable = false) { + const id = this.#id++; + const root = this.#createSVG(outlines.box); + root.classList.add("highlight"); + if (outlines.free) { + root.classList.add("free"); + } + const defs = DrawLayer._svgFactory.createElement("defs"); + root.append(defs); + const path = DrawLayer._svgFactory.createElement("path"); + defs.append(path); + const pathId = `path_p${this.pageIndex}_${id}`; + path.setAttribute("id", pathId); + path.setAttribute("d", outlines.toSVGPath()); + if (isPathUpdatable) { + this.#toUpdate.set(id, path); + } + const clipPathId = this.#createClipPath(defs, pathId); + const use = DrawLayer._svgFactory.createElement("use"); + root.append(use); + root.setAttribute("fill", color); + root.setAttribute("fill-opacity", opacity); + use.setAttribute("href", `#${pathId}`); + this.#mapping.set(id, root); + return { + id, + clipPathId: `url(#${clipPathId})` + }; + } + highlightOutline(outlines) { + const id = this.#id++; + const root = this.#createSVG(outlines.box); + root.classList.add("highlightOutline"); + const defs = DrawLayer._svgFactory.createElement("defs"); + root.append(defs); + const path = DrawLayer._svgFactory.createElement("path"); + defs.append(path); + const pathId = `path_p${this.pageIndex}_${id}`; + path.setAttribute("id", pathId); + path.setAttribute("d", outlines.toSVGPath()); + path.setAttribute("vector-effect", "non-scaling-stroke"); + let maskId; + if (outlines.free) { + root.classList.add("free"); + const mask = DrawLayer._svgFactory.createElement("mask"); + defs.append(mask); + maskId = `mask_p${this.pageIndex}_${id}`; + mask.setAttribute("id", maskId); + mask.setAttribute("maskUnits", "objectBoundingBox"); + const rect = DrawLayer._svgFactory.createElement("rect"); + mask.append(rect); + rect.setAttribute("width", "1"); + rect.setAttribute("height", "1"); + rect.setAttribute("fill", "white"); + const use = DrawLayer._svgFactory.createElement("use"); + mask.append(use); + use.setAttribute("href", `#${pathId}`); + use.setAttribute("stroke", "none"); + use.setAttribute("fill", "black"); + use.setAttribute("fill-rule", "nonzero"); + use.classList.add("mask"); + } + const use1 = DrawLayer._svgFactory.createElement("use"); + root.append(use1); + use1.setAttribute("href", `#${pathId}`); + if (maskId) { + use1.setAttribute("mask", `url(#${maskId})`); + } + const use2 = use1.cloneNode(); + root.append(use2); + use1.classList.add("mainOutline"); + use2.classList.add("secondaryOutline"); + this.#mapping.set(id, root); + return id; + } + finalizeLine(id, line) { + const path = this.#toUpdate.get(id); + this.#toUpdate.delete(id); + this.updateBox(id, line.box); + path.setAttribute("d", line.toSVGPath()); + } + updateLine(id, line) { + const root = this.#mapping.get(id); + const defs = root.firstChild; + const path = defs.firstChild; + path.setAttribute("d", line.toSVGPath()); + } + removeFreeHighlight(id) { + this.remove(id); + this.#toUpdate.delete(id); + } + updatePath(id, line) { + this.#toUpdate.get(id).setAttribute("d", line.toSVGPath()); + } + updateBox(id, box) { + DrawLayer.#setBox(this.#mapping.get(id), box); + } + show(id, visible) { + this.#mapping.get(id).classList.toggle("hidden", !visible); + } + rotate(id, angle) { + this.#mapping.get(id).setAttribute("data-main-rotation", angle); + } + changeColor(id, color) { + this.#mapping.get(id).setAttribute("fill", color); + } + changeOpacity(id, opacity) { + this.#mapping.get(id).setAttribute("fill-opacity", opacity); + } + addClass(id, className) { + this.#mapping.get(id).classList.add(className); + } + removeClass(id, className) { + this.#mapping.get(id).classList.remove(className); + } + remove(id) { + if (this.#parent === null) { + return; + } + this.#mapping.get(id).remove(); + this.#mapping.delete(id); + } + destroy() { + this.#parent = null; + for (const root of this.#mapping.values()) { + root.remove(); + } + this.#mapping.clear(); + } +} + +;// CONCATENATED MODULE: ./src/pdf.js + + + + + + + + + + + + +const pdfjsVersion = "4.3.98"; +const pdfjsBuild = "8dba041e6"; + +var __webpack_exports__AbortException = __webpack_exports__.AbortException; +var __webpack_exports__AnnotationEditorLayer = __webpack_exports__.AnnotationEditorLayer; +var __webpack_exports__AnnotationEditorParamsType = __webpack_exports__.AnnotationEditorParamsType; +var __webpack_exports__AnnotationEditorType = __webpack_exports__.AnnotationEditorType; +var __webpack_exports__AnnotationEditorUIManager = __webpack_exports__.AnnotationEditorUIManager; +var __webpack_exports__AnnotationLayer = __webpack_exports__.AnnotationLayer; +var __webpack_exports__AnnotationMode = __webpack_exports__.AnnotationMode; +var __webpack_exports__CMapCompressionType = __webpack_exports__.CMapCompressionType; +var __webpack_exports__ColorPicker = __webpack_exports__.ColorPicker; +var __webpack_exports__DOMSVGFactory = __webpack_exports__.DOMSVGFactory; +var __webpack_exports__DrawLayer = __webpack_exports__.DrawLayer; +var __webpack_exports__FeatureTest = __webpack_exports__.FeatureTest; +var __webpack_exports__GlobalWorkerOptions = __webpack_exports__.GlobalWorkerOptions; +var __webpack_exports__ImageKind = __webpack_exports__.ImageKind; +var __webpack_exports__InvalidPDFException = __webpack_exports__.InvalidPDFException; +var __webpack_exports__MissingPDFException = __webpack_exports__.MissingPDFException; +var __webpack_exports__OPS = __webpack_exports__.OPS; +var __webpack_exports__Outliner = __webpack_exports__.Outliner; +var __webpack_exports__PDFDataRangeTransport = __webpack_exports__.PDFDataRangeTransport; +var __webpack_exports__PDFDateString = __webpack_exports__.PDFDateString; +var __webpack_exports__PDFWorker = __webpack_exports__.PDFWorker; +var __webpack_exports__PasswordResponses = __webpack_exports__.PasswordResponses; +var __webpack_exports__PermissionFlag = __webpack_exports__.PermissionFlag; +var __webpack_exports__PixelsPerInch = __webpack_exports__.PixelsPerInch; +var __webpack_exports__RenderingCancelledException = __webpack_exports__.RenderingCancelledException; +var __webpack_exports__TextLayer = __webpack_exports__.TextLayer; +var __webpack_exports__UnexpectedResponseException = __webpack_exports__.UnexpectedResponseException; +var __webpack_exports__Util = __webpack_exports__.Util; +var __webpack_exports__VerbosityLevel = __webpack_exports__.VerbosityLevel; +var __webpack_exports__XfaLayer = __webpack_exports__.XfaLayer; +var __webpack_exports__build = __webpack_exports__.build; +var __webpack_exports__createValidAbsoluteUrl = __webpack_exports__.createValidAbsoluteUrl; +var __webpack_exports__fetchData = __webpack_exports__.fetchData; +var __webpack_exports__getDocument = __webpack_exports__.getDocument; +var __webpack_exports__getFilenameFromUrl = __webpack_exports__.getFilenameFromUrl; +var __webpack_exports__getPdfFilenameFromUrl = __webpack_exports__.getPdfFilenameFromUrl; +var __webpack_exports__getXfaPageViewport = __webpack_exports__.getXfaPageViewport; +var __webpack_exports__isDataScheme = __webpack_exports__.isDataScheme; +var __webpack_exports__isPdfFile = __webpack_exports__.isPdfFile; +var __webpack_exports__noContextMenu = __webpack_exports__.noContextMenu; +var __webpack_exports__normalizeUnicode = __webpack_exports__.normalizeUnicode; +var __webpack_exports__renderTextLayer = __webpack_exports__.renderTextLayer; +var __webpack_exports__setLayerDimensions = __webpack_exports__.setLayerDimensions; +var __webpack_exports__shadow = __webpack_exports__.shadow; +var __webpack_exports__updateTextLayer = __webpack_exports__.updateTextLayer; +var __webpack_exports__version = __webpack_exports__.version; +export { __webpack_exports__AbortException as AbortException, __webpack_exports__AnnotationEditorLayer as AnnotationEditorLayer, __webpack_exports__AnnotationEditorParamsType as AnnotationEditorParamsType, __webpack_exports__AnnotationEditorType as AnnotationEditorType, __webpack_exports__AnnotationEditorUIManager as AnnotationEditorUIManager, __webpack_exports__AnnotationLayer as AnnotationLayer, __webpack_exports__AnnotationMode as AnnotationMode, __webpack_exports__CMapCompressionType as CMapCompressionType, __webpack_exports__ColorPicker as ColorPicker, __webpack_exports__DOMSVGFactory as DOMSVGFactory, __webpack_exports__DrawLayer as DrawLayer, __webpack_exports__FeatureTest as FeatureTest, __webpack_exports__GlobalWorkerOptions as GlobalWorkerOptions, __webpack_exports__ImageKind as ImageKind, __webpack_exports__InvalidPDFException as InvalidPDFException, __webpack_exports__MissingPDFException as MissingPDFException, __webpack_exports__OPS as OPS, __webpack_exports__Outliner as Outliner, __webpack_exports__PDFDataRangeTransport as PDFDataRangeTransport, __webpack_exports__PDFDateString as PDFDateString, __webpack_exports__PDFWorker as PDFWorker, __webpack_exports__PasswordResponses as PasswordResponses, __webpack_exports__PermissionFlag as PermissionFlag, __webpack_exports__PixelsPerInch as PixelsPerInch, __webpack_exports__RenderingCancelledException as RenderingCancelledException, __webpack_exports__TextLayer as TextLayer, __webpack_exports__UnexpectedResponseException as UnexpectedResponseException, __webpack_exports__Util as Util, __webpack_exports__VerbosityLevel as VerbosityLevel, __webpack_exports__XfaLayer as XfaLayer, __webpack_exports__build as build, __webpack_exports__createValidAbsoluteUrl as createValidAbsoluteUrl, __webpack_exports__fetchData as fetchData, __webpack_exports__getDocument as getDocument, __webpack_exports__getFilenameFromUrl as getFilenameFromUrl, __webpack_exports__getPdfFilenameFromUrl as getPdfFilenameFromUrl, __webpack_exports__getXfaPageViewport as getXfaPageViewport, __webpack_exports__isDataScheme as isDataScheme, __webpack_exports__isPdfFile as isPdfFile, __webpack_exports__noContextMenu as noContextMenu, __webpack_exports__normalizeUnicode as normalizeUnicode, __webpack_exports__renderTextLayer as renderTextLayer, __webpack_exports__setLayerDimensions as setLayerDimensions, __webpack_exports__shadow as shadow, __webpack_exports__updateTextLayer as updateTextLayer, __webpack_exports__version as version }; + +//# sourceMappingURL=pdf.mjs.map \ No newline at end of file diff --git a/static/pdf.js/pdf.mjs.map b/static/pdf.js/pdf.mjs.map new file mode 100644 index 00000000..0e755a1a --- /dev/null +++ b/static/pdf.js/pdf.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"pdf.mjs","mappings":"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E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAC7E,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAC7E,MAAM,EAAE,MAAM,EAAE,MA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","sources":["webpack://pdf.js/webpack/bootstrap","webpack://pdf.js/webpack/runtime/define property getters","webpack://pdf.js/webpack/runtime/hasOwnProperty shorthand","webpack://pdf.js/./src/shared/util.js","webpack://pdf.js/./src/display/base_factory.js","webpack://pdf.js/./src/display/display_utils.js","webpack://pdf.js/./src/display/editor/toolbar.js","webpack://pdf.js/./src/display/editor/tools.js","webpack://pdf.js/./src/display/editor/alt_text.js","webpack://pdf.js/./src/display/editor/editor.js","webpack://pdf.js/./src/shared/murmurhash3.js","webpack://pdf.js/./src/display/annotation_storage.js","webpack://pdf.js/./src/display/font_loader.js","webpack://pdf.js/./src/display/node_utils.js","webpack://pdf.js/./src/display/pattern_helper.js","webpack://pdf.js/./src/shared/image_utils.js","webpack://pdf.js/./src/display/canvas.js","webpack://pdf.js/./src/display/worker_options.js","webpack://pdf.js/./src/shared/message_handler.js","webpack://pdf.js/./src/display/metadata.js","webpack://pdf.js/./src/display/optional_content_config.js","webpack://pdf.js/./src/display/transport_stream.js","webpack://pdf.js/./src/display/content_disposition.js","webpack://pdf.js/./src/display/network_utils.js","webpack://pdf.js/./src/display/fetch_stream.js","webpack://pdf.js/./src/display/network.js","webpack://pdf.js/./src/display/node_stream.js","webpack://pdf.js/./src/display/text_layer.js","webpack://pdf.js/./src/display/xfa_text.js","webpack://pdf.js/./src/display/api.js","webpack://pdf.js/./src/shared/scripting_utils.js","webpack://pdf.js/./src/display/xfa_layer.js","webpack://pdf.js/./src/display/annotation_layer.js","webpack://pdf.js/./src/display/editor/freetext.js","webpack://pdf.js/./src/display/editor/outliner.js","webpack://pdf.js/./src/display/editor/color_picker.js","webpack://pdf.js/./src/display/editor/highlight.js","webpack://pdf.js/./src/display/editor/ink.js","webpack://pdf.js/./src/display/editor/stamp.js","webpack://pdf.js/./src/display/editor/annotation_editor_layer.js","webpack://pdf.js/./src/display/draw_layer.js","webpack://pdf.js/./src/pdf.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals process */\n\n// NW.js / Electron is a browser context, but copies some Node.js objects; see\n// http://docs.nwjs.io/en/latest/For%20Users/Advanced/JavaScript%20Contexts%20in%20NW.js/#access-nodejs-and-nwjs-api-in-browser-context\n// https://www.electronjs.org/docs/api/process#processversionselectron-readonly\n// https://www.electronjs.org/docs/api/process#processtype-readonly\nconst isNodeJS =\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n typeof process === \"object\" &&\n process + \"\" === \"[object process]\" &&\n !process.versions.nw &&\n !(process.versions.electron && process.type && process.type !== \"browser\");\n\nconst IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\n\nconst MAX_IMAGE_SIZE_TO_CACHE = 10e6; // Ten megabytes.\n\n// Represent the percentage of the height of a single-line field over\n// the font size. Acrobat seems to use this value.\nconst LINE_FACTOR = 1.35;\nconst LINE_DESCENT_FACTOR = 0.35;\nconst BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR;\n\n/**\n * Refer to the `WorkerTransport.getRenderingIntent`-method in the API, to see\n * how these flags are being used:\n * - ANY, DISPLAY, and PRINT are the normal rendering intents, note the\n * `PDFPageProxy.{render, getOperatorList, getAnnotations}`-methods.\n * - ANNOTATIONS_FORMS, ANNOTATIONS_STORAGE, ANNOTATIONS_DISABLE control which\n * annotations are rendered onto the canvas (i.e. by being included in the\n * operatorList), note the `PDFPageProxy.{render, getOperatorList}`-methods\n * and their `annotationMode`-option.\n * - OPLIST is used with the `PDFPageProxy.getOperatorList`-method, note the\n * `OperatorList`-constructor (on the worker-thread).\n */\nconst RenderingIntentFlag = {\n ANY: 0x01,\n DISPLAY: 0x02,\n PRINT: 0x04,\n SAVE: 0x08,\n ANNOTATIONS_FORMS: 0x10,\n ANNOTATIONS_STORAGE: 0x20,\n ANNOTATIONS_DISABLE: 0x40,\n OPLIST: 0x100,\n};\n\nconst AnnotationMode = {\n DISABLE: 0,\n ENABLE: 1,\n ENABLE_FORMS: 2,\n ENABLE_STORAGE: 3,\n};\n\nconst AnnotationEditorPrefix = \"pdfjs_internal_editor_\";\n\nconst AnnotationEditorType = {\n DISABLE: -1,\n NONE: 0,\n FREETEXT: 3,\n HIGHLIGHT: 9,\n STAMP: 13,\n INK: 15,\n};\n\nconst AnnotationEditorParamsType = {\n RESIZE: 1,\n CREATE: 2,\n FREETEXT_SIZE: 11,\n FREETEXT_COLOR: 12,\n FREETEXT_OPACITY: 13,\n INK_COLOR: 21,\n INK_THICKNESS: 22,\n INK_OPACITY: 23,\n HIGHLIGHT_COLOR: 31,\n HIGHLIGHT_DEFAULT_COLOR: 32,\n HIGHLIGHT_THICKNESS: 33,\n HIGHLIGHT_FREE: 34,\n HIGHLIGHT_SHOW_ALL: 35,\n};\n\n// Permission flags from Table 22, Section 7.6.3.2 of the PDF specification.\nconst PermissionFlag = {\n PRINT: 0x04,\n MODIFY_CONTENTS: 0x08,\n COPY: 0x10,\n MODIFY_ANNOTATIONS: 0x20,\n FILL_INTERACTIVE_FORMS: 0x100,\n COPY_FOR_ACCESSIBILITY: 0x200,\n ASSEMBLE: 0x400,\n PRINT_HIGH_QUALITY: 0x800,\n};\n\nconst TextRenderingMode = {\n FILL: 0,\n STROKE: 1,\n FILL_STROKE: 2,\n INVISIBLE: 3,\n FILL_ADD_TO_PATH: 4,\n STROKE_ADD_TO_PATH: 5,\n FILL_STROKE_ADD_TO_PATH: 6,\n ADD_TO_PATH: 7,\n FILL_STROKE_MASK: 3,\n ADD_TO_PATH_FLAG: 4,\n};\n\nconst ImageKind = {\n GRAYSCALE_1BPP: 1,\n RGB_24BPP: 2,\n RGBA_32BPP: 3,\n};\n\nconst AnnotationType = {\n TEXT: 1,\n LINK: 2,\n FREETEXT: 3,\n LINE: 4,\n SQUARE: 5,\n CIRCLE: 6,\n POLYGON: 7,\n POLYLINE: 8,\n HIGHLIGHT: 9,\n UNDERLINE: 10,\n SQUIGGLY: 11,\n STRIKEOUT: 12,\n STAMP: 13,\n CARET: 14,\n INK: 15,\n POPUP: 16,\n FILEATTACHMENT: 17,\n SOUND: 18,\n MOVIE: 19,\n WIDGET: 20,\n SCREEN: 21,\n PRINTERMARK: 22,\n TRAPNET: 23,\n WATERMARK: 24,\n THREED: 25,\n REDACT: 26,\n};\n\nconst AnnotationReplyType = {\n GROUP: \"Group\",\n REPLY: \"R\",\n};\n\nconst AnnotationFlag = {\n INVISIBLE: 0x01,\n HIDDEN: 0x02,\n PRINT: 0x04,\n NOZOOM: 0x08,\n NOROTATE: 0x10,\n NOVIEW: 0x20,\n READONLY: 0x40,\n LOCKED: 0x80,\n TOGGLENOVIEW: 0x100,\n LOCKEDCONTENTS: 0x200,\n};\n\nconst AnnotationFieldFlag = {\n READONLY: 0x0000001,\n REQUIRED: 0x0000002,\n NOEXPORT: 0x0000004,\n MULTILINE: 0x0001000,\n PASSWORD: 0x0002000,\n NOTOGGLETOOFF: 0x0004000,\n RADIO: 0x0008000,\n PUSHBUTTON: 0x0010000,\n COMBO: 0x0020000,\n EDIT: 0x0040000,\n SORT: 0x0080000,\n FILESELECT: 0x0100000,\n MULTISELECT: 0x0200000,\n DONOTSPELLCHECK: 0x0400000,\n DONOTSCROLL: 0x0800000,\n COMB: 0x1000000,\n RICHTEXT: 0x2000000,\n RADIOSINUNISON: 0x2000000,\n COMMITONSELCHANGE: 0x4000000,\n};\n\nconst AnnotationBorderStyleType = {\n SOLID: 1,\n DASHED: 2,\n BEVELED: 3,\n INSET: 4,\n UNDERLINE: 5,\n};\n\nconst AnnotationActionEventType = {\n E: \"Mouse Enter\",\n X: \"Mouse Exit\",\n D: \"Mouse Down\",\n U: \"Mouse Up\",\n Fo: \"Focus\",\n Bl: \"Blur\",\n PO: \"PageOpen\",\n PC: \"PageClose\",\n PV: \"PageVisible\",\n PI: \"PageInvisible\",\n K: \"Keystroke\",\n F: \"Format\",\n V: \"Validate\",\n C: \"Calculate\",\n};\n\nconst DocumentActionEventType = {\n WC: \"WillClose\",\n WS: \"WillSave\",\n DS: \"DidSave\",\n WP: \"WillPrint\",\n DP: \"DidPrint\",\n};\n\nconst PageActionEventType = {\n O: \"PageOpen\",\n C: \"PageClose\",\n};\n\nconst VerbosityLevel = {\n ERRORS: 0,\n WARNINGS: 1,\n INFOS: 5,\n};\n\nconst CMapCompressionType = {\n NONE: 0,\n BINARY: 1,\n};\n\n// All the possible operations for an operator list.\nconst OPS = {\n // Intentionally start from 1 so it is easy to spot bad operators that will be\n // 0's.\n // PLEASE NOTE: We purposely keep any removed operators commented out, since\n // re-numbering the list would risk breaking third-party users.\n dependency: 1,\n setLineWidth: 2,\n setLineCap: 3,\n setLineJoin: 4,\n setMiterLimit: 5,\n setDash: 6,\n setRenderingIntent: 7,\n setFlatness: 8,\n setGState: 9,\n save: 10,\n restore: 11,\n transform: 12,\n moveTo: 13,\n lineTo: 14,\n curveTo: 15,\n curveTo2: 16,\n curveTo3: 17,\n closePath: 18,\n rectangle: 19,\n stroke: 20,\n closeStroke: 21,\n fill: 22,\n eoFill: 23,\n fillStroke: 24,\n eoFillStroke: 25,\n closeFillStroke: 26,\n closeEOFillStroke: 27,\n endPath: 28,\n clip: 29,\n eoClip: 30,\n beginText: 31,\n endText: 32,\n setCharSpacing: 33,\n setWordSpacing: 34,\n setHScale: 35,\n setLeading: 36,\n setFont: 37,\n setTextRenderingMode: 38,\n setTextRise: 39,\n moveText: 40,\n setLeadingMoveText: 41,\n setTextMatrix: 42,\n nextLine: 43,\n showText: 44,\n showSpacedText: 45,\n nextLineShowText: 46,\n nextLineSetSpacingShowText: 47,\n setCharWidth: 48,\n setCharWidthAndBounds: 49,\n setStrokeColorSpace: 50,\n setFillColorSpace: 51,\n setStrokeColor: 52,\n setStrokeColorN: 53,\n setFillColor: 54,\n setFillColorN: 55,\n setStrokeGray: 56,\n setFillGray: 57,\n setStrokeRGBColor: 58,\n setFillRGBColor: 59,\n setStrokeCMYKColor: 60,\n setFillCMYKColor: 61,\n shadingFill: 62,\n beginInlineImage: 63,\n beginImageData: 64,\n endInlineImage: 65,\n paintXObject: 66,\n markPoint: 67,\n markPointProps: 68,\n beginMarkedContent: 69,\n beginMarkedContentProps: 70,\n endMarkedContent: 71,\n beginCompat: 72,\n endCompat: 73,\n paintFormXObjectBegin: 74,\n paintFormXObjectEnd: 75,\n beginGroup: 76,\n endGroup: 77,\n // beginAnnotations: 78,\n // endAnnotations: 79,\n beginAnnotation: 80,\n endAnnotation: 81,\n // paintJpegXObject: 82,\n paintImageMaskXObject: 83,\n paintImageMaskXObjectGroup: 84,\n paintImageXObject: 85,\n paintInlineImageXObject: 86,\n paintInlineImageXObjectGroup: 87,\n paintImageXObjectRepeat: 88,\n paintImageMaskXObjectRepeat: 89,\n paintSolidColorImageMask: 90,\n constructPath: 91,\n};\n\nconst PasswordResponses = {\n NEED_PASSWORD: 1,\n INCORRECT_PASSWORD: 2,\n};\n\nlet verbosity = VerbosityLevel.WARNINGS;\n\nfunction setVerbosityLevel(level) {\n if (Number.isInteger(level)) {\n verbosity = level;\n }\n}\n\nfunction getVerbosityLevel() {\n return verbosity;\n}\n\n// A notice for devs. These are good for things that are helpful to devs, such\n// as warning that Workers were disabled, which is important to devs but not\n// end users.\nfunction info(msg) {\n if (verbosity >= VerbosityLevel.INFOS) {\n console.log(`Info: ${msg}`);\n }\n}\n\n// Non-fatal warnings.\nfunction warn(msg) {\n if (verbosity >= VerbosityLevel.WARNINGS) {\n console.log(`Warning: ${msg}`);\n }\n}\n\nfunction unreachable(msg) {\n throw new Error(msg);\n}\n\nfunction assert(cond, msg) {\n if (!cond) {\n unreachable(msg);\n }\n}\n\n// Checks if URLs use one of the allowed protocols, e.g. to avoid XSS.\nfunction _isValidProtocol(url) {\n switch (url?.protocol) {\n case \"http:\":\n case \"https:\":\n case \"ftp:\":\n case \"mailto:\":\n case \"tel:\":\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Attempts to create a valid absolute URL.\n *\n * @param {URL|string} url - An absolute, or relative, URL.\n * @param {URL|string} [baseUrl] - An absolute URL.\n * @param {Object} [options]\n * @returns Either a valid {URL}, or `null` otherwise.\n */\nfunction createValidAbsoluteUrl(url, baseUrl = null, options = null) {\n if (!url) {\n return null;\n }\n try {\n if (options && typeof url === \"string\") {\n // Let URLs beginning with \"www.\" default to using the \"http://\" protocol.\n if (options.addDefaultProtocol && url.startsWith(\"www.\")) {\n const dots = url.match(/\\./g);\n // Avoid accidentally matching a *relative* URL pointing to a file named\n // e.g. \"www.pdf\" or similar.\n if (dots?.length >= 2) {\n url = `http://${url}`;\n }\n }\n\n // According to ISO 32000-1:2008, section 12.6.4.7, URIs should be encoded\n // in 7-bit ASCII. Some bad PDFs use UTF-8 encoding; see bug 1122280.\n if (options.tryConvertEncoding) {\n try {\n url = stringToUTF8String(url);\n } catch {}\n }\n }\n\n const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);\n if (_isValidProtocol(absoluteUrl)) {\n return absoluteUrl;\n }\n } catch {\n /* `new URL()` will throw on incorrect data. */\n }\n return null;\n}\n\nfunction shadow(obj, prop, value, nonSerializable = false) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n prop in obj,\n `shadow: Property \"${prop && prop.toString()}\" not found in object.`\n );\n }\n Object.defineProperty(obj, prop, {\n value,\n enumerable: !nonSerializable,\n configurable: true,\n writable: false,\n });\n return value;\n}\n\n/**\n * @type {any}\n */\nconst BaseException = (function BaseExceptionClosure() {\n // eslint-disable-next-line no-shadow\n function BaseException(message, name) {\n if (this.constructor === BaseException) {\n unreachable(\"Cannot initialize BaseException.\");\n }\n this.message = message;\n this.name = name;\n }\n BaseException.prototype = new Error();\n BaseException.constructor = BaseException;\n\n return BaseException;\n})();\n\nclass PasswordException extends BaseException {\n constructor(msg, code) {\n super(msg, \"PasswordException\");\n this.code = code;\n }\n}\n\nclass UnknownErrorException extends BaseException {\n constructor(msg, details) {\n super(msg, \"UnknownErrorException\");\n this.details = details;\n }\n}\n\nclass InvalidPDFException extends BaseException {\n constructor(msg) {\n super(msg, \"InvalidPDFException\");\n }\n}\n\nclass MissingPDFException extends BaseException {\n constructor(msg) {\n super(msg, \"MissingPDFException\");\n }\n}\n\nclass UnexpectedResponseException extends BaseException {\n constructor(msg, status) {\n super(msg, \"UnexpectedResponseException\");\n this.status = status;\n }\n}\n\n/**\n * Error caused during parsing PDF data.\n */\nclass FormatError extends BaseException {\n constructor(msg) {\n super(msg, \"FormatError\");\n }\n}\n\n/**\n * Error used to indicate task cancellation.\n */\nclass AbortException extends BaseException {\n constructor(msg) {\n super(msg, \"AbortException\");\n }\n}\n\nfunction bytesToString(bytes) {\n if (typeof bytes !== \"object\" || bytes?.length === undefined) {\n unreachable(\"Invalid argument for bytesToString\");\n }\n const length = bytes.length;\n const MAX_ARGUMENT_COUNT = 8192;\n if (length < MAX_ARGUMENT_COUNT) {\n return String.fromCharCode.apply(null, bytes);\n }\n const strBuf = [];\n for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n const chunk = bytes.subarray(i, chunkEnd);\n strBuf.push(String.fromCharCode.apply(null, chunk));\n }\n return strBuf.join(\"\");\n}\n\nfunction stringToBytes(str) {\n if (typeof str !== \"string\") {\n unreachable(\"Invalid argument for stringToBytes\");\n }\n const length = str.length;\n const bytes = new Uint8Array(length);\n for (let i = 0; i < length; ++i) {\n bytes[i] = str.charCodeAt(i) & 0xff;\n }\n return bytes;\n}\n\nfunction string32(value) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n typeof value === \"number\" && Math.abs(value) < 2 ** 32,\n `string32: Unexpected input \"${value}\".`\n );\n }\n return String.fromCharCode(\n (value >> 24) & 0xff,\n (value >> 16) & 0xff,\n (value >> 8) & 0xff,\n value & 0xff\n );\n}\n\nfunction objectSize(obj) {\n return Object.keys(obj).length;\n}\n\n// Ensure that the returned Object has a `null` prototype; hence why\n// `Object.fromEntries(...)` is not used.\nfunction objectFromMap(map) {\n const obj = Object.create(null);\n for (const [key, value] of map) {\n obj[key] = value;\n }\n return obj;\n}\n\n// Checks the endianness of the platform.\nfunction isLittleEndian() {\n const buffer8 = new Uint8Array(4);\n buffer8[0] = 1;\n const view32 = new Uint32Array(buffer8.buffer, 0, 1);\n return view32[0] === 1;\n}\n\n// Checks if it's possible to eval JS expressions.\nfunction isEvalSupported() {\n try {\n new Function(\"\"); // eslint-disable-line no-new, no-new-func\n return true;\n } catch {\n return false;\n }\n}\n\nclass FeatureTest {\n static get isLittleEndian() {\n return shadow(this, \"isLittleEndian\", isLittleEndian());\n }\n\n static get isEvalSupported() {\n return shadow(this, \"isEvalSupported\", isEvalSupported());\n }\n\n static get isOffscreenCanvasSupported() {\n return shadow(\n this,\n \"isOffscreenCanvasSupported\",\n typeof OffscreenCanvas !== \"undefined\"\n );\n }\n\n static get platform() {\n if (\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n (typeof navigator !== \"undefined\" &&\n typeof navigator?.platform === \"string\")\n ) {\n return shadow(this, \"platform\", {\n isMac: navigator.platform.includes(\"Mac\"),\n });\n }\n return shadow(this, \"platform\", { isMac: false });\n }\n\n static get isCSSRoundSupported() {\n return shadow(\n this,\n \"isCSSRoundSupported\",\n globalThis.CSS?.supports?.(\"width: round(1.5px, 1px)\")\n );\n }\n}\n\nconst hexNumbers = Array.from(Array(256).keys(), n =>\n n.toString(16).padStart(2, \"0\")\n);\n\nclass Util {\n static makeHexColor(r, g, b) {\n return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;\n }\n\n // Apply a scaling matrix to some min/max values.\n // If a scaling factor is negative then min and max must be\n // swapped.\n static scaleMinMax(transform, minMax) {\n let temp;\n if (transform[0]) {\n if (transform[0] < 0) {\n temp = minMax[0];\n minMax[0] = minMax[2];\n minMax[2] = temp;\n }\n minMax[0] *= transform[0];\n minMax[2] *= transform[0];\n\n if (transform[3] < 0) {\n temp = minMax[1];\n minMax[1] = minMax[3];\n minMax[3] = temp;\n }\n minMax[1] *= transform[3];\n minMax[3] *= transform[3];\n } else {\n temp = minMax[0];\n minMax[0] = minMax[1];\n minMax[1] = temp;\n temp = minMax[2];\n minMax[2] = minMax[3];\n minMax[3] = temp;\n\n if (transform[1] < 0) {\n temp = minMax[1];\n minMax[1] = minMax[3];\n minMax[3] = temp;\n }\n minMax[1] *= transform[1];\n minMax[3] *= transform[1];\n\n if (transform[2] < 0) {\n temp = minMax[0];\n minMax[0] = minMax[2];\n minMax[2] = temp;\n }\n minMax[0] *= transform[2];\n minMax[2] *= transform[2];\n }\n minMax[0] += transform[4];\n minMax[1] += transform[5];\n minMax[2] += transform[4];\n minMax[3] += transform[5];\n }\n\n // Concatenates two transformation matrices together and returns the result.\n static transform(m1, m2) {\n return [\n m1[0] * m2[0] + m1[2] * m2[1],\n m1[1] * m2[0] + m1[3] * m2[1],\n m1[0] * m2[2] + m1[2] * m2[3],\n m1[1] * m2[2] + m1[3] * m2[3],\n m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n m1[1] * m2[4] + m1[3] * m2[5] + m1[5],\n ];\n }\n\n // For 2d affine transforms\n static applyTransform(p, m) {\n const xt = p[0] * m[0] + p[1] * m[2] + m[4];\n const yt = p[0] * m[1] + p[1] * m[3] + m[5];\n return [xt, yt];\n }\n\n static applyInverseTransform(p, m) {\n const d = m[0] * m[3] - m[1] * m[2];\n const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n return [xt, yt];\n }\n\n // Applies the transform to the rectangle and finds the minimum axially\n // aligned bounding box.\n static getAxialAlignedBoundingBox(r, m) {\n const p1 = this.applyTransform(r, m);\n const p2 = this.applyTransform(r.slice(2, 4), m);\n const p3 = this.applyTransform([r[0], r[3]], m);\n const p4 = this.applyTransform([r[2], r[1]], m);\n return [\n Math.min(p1[0], p2[0], p3[0], p4[0]),\n Math.min(p1[1], p2[1], p3[1], p4[1]),\n Math.max(p1[0], p2[0], p3[0], p4[0]),\n Math.max(p1[1], p2[1], p3[1], p4[1]),\n ];\n }\n\n static inverseTransform(m) {\n const d = m[0] * m[3] - m[1] * m[2];\n return [\n m[3] / d,\n -m[1] / d,\n -m[2] / d,\n m[0] / d,\n (m[2] * m[5] - m[4] * m[3]) / d,\n (m[4] * m[1] - m[5] * m[0]) / d,\n ];\n }\n\n // This calculation uses Singular Value Decomposition.\n // The SVD can be represented with formula A = USV. We are interested in the\n // matrix S here because it represents the scale values.\n static singularValueDecompose2dScale(m) {\n const transpose = [m[0], m[2], m[1], m[3]];\n\n // Multiply matrix m with its transpose.\n const a = m[0] * transpose[0] + m[1] * transpose[2];\n const b = m[0] * transpose[1] + m[1] * transpose[3];\n const c = m[2] * transpose[0] + m[3] * transpose[2];\n const d = m[2] * transpose[1] + m[3] * transpose[3];\n\n // Solve the second degree polynomial to get roots.\n const first = (a + d) / 2;\n const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2;\n const sx = first + second || 1;\n const sy = first - second || 1;\n\n // Scale values are the square roots of the eigenvalues.\n return [Math.sqrt(sx), Math.sqrt(sy)];\n }\n\n // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)\n // For coordinate systems whose origin lies in the bottom-left, this\n // means normalization to (BL,TR) ordering. For systems with origin in the\n // top-left, this means (TL,BR) ordering.\n static normalizeRect(rect) {\n const r = rect.slice(0); // clone rect\n if (rect[0] > rect[2]) {\n r[0] = rect[2];\n r[2] = rect[0];\n }\n if (rect[1] > rect[3]) {\n r[1] = rect[3];\n r[3] = rect[1];\n }\n return r;\n }\n\n // Returns a rectangle [x1, y1, x2, y2] corresponding to the\n // intersection of rect1 and rect2. If no intersection, returns 'null'\n // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]\n static intersect(rect1, rect2) {\n const xLow = Math.max(\n Math.min(rect1[0], rect1[2]),\n Math.min(rect2[0], rect2[2])\n );\n const xHigh = Math.min(\n Math.max(rect1[0], rect1[2]),\n Math.max(rect2[0], rect2[2])\n );\n if (xLow > xHigh) {\n return null;\n }\n const yLow = Math.max(\n Math.min(rect1[1], rect1[3]),\n Math.min(rect2[1], rect2[3])\n );\n const yHigh = Math.min(\n Math.max(rect1[1], rect1[3]),\n Math.max(rect2[1], rect2[3])\n );\n if (yLow > yHigh) {\n return null;\n }\n\n return [xLow, yLow, xHigh, yHigh];\n }\n\n static #getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, t, minMax) {\n if (t <= 0 || t >= 1) {\n return;\n }\n const mt = 1 - t;\n const tt = t * t;\n const ttt = tt * t;\n const x = mt * (mt * (mt * x0 + 3 * t * x1) + 3 * tt * x2) + ttt * x3;\n const y = mt * (mt * (mt * y0 + 3 * t * y1) + 3 * tt * y2) + ttt * y3;\n minMax[0] = Math.min(minMax[0], x);\n minMax[1] = Math.min(minMax[1], y);\n minMax[2] = Math.max(minMax[2], x);\n minMax[3] = Math.max(minMax[3], y);\n }\n\n static #getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, a, b, c, minMax) {\n if (Math.abs(a) < 1e-12) {\n if (Math.abs(b) >= 1e-12) {\n this.#getExtremumOnCurve(\n x0,\n x1,\n x2,\n x3,\n y0,\n y1,\n y2,\n y3,\n -c / b,\n minMax\n );\n }\n return;\n }\n\n const delta = b ** 2 - 4 * c * a;\n if (delta < 0) {\n return;\n }\n const sqrtDelta = Math.sqrt(delta);\n const a2 = 2 * a;\n this.#getExtremumOnCurve(\n x0,\n x1,\n x2,\n x3,\n y0,\n y1,\n y2,\n y3,\n (-b + sqrtDelta) / a2,\n minMax\n );\n this.#getExtremumOnCurve(\n x0,\n x1,\n x2,\n x3,\n y0,\n y1,\n y2,\n y3,\n (-b - sqrtDelta) / a2,\n minMax\n );\n }\n\n // From https://github.com/adobe-webplatform/Snap.svg/blob/b365287722a72526000ac4bfcf0ce4cac2faa015/src/path.js#L852\n static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax) {\n if (minMax) {\n minMax[0] = Math.min(minMax[0], x0, x3);\n minMax[1] = Math.min(minMax[1], y0, y3);\n minMax[2] = Math.max(minMax[2], x0, x3);\n minMax[3] = Math.max(minMax[3], y0, y3);\n } else {\n minMax = [\n Math.min(x0, x3),\n Math.min(y0, y3),\n Math.max(x0, x3),\n Math.max(y0, y3),\n ];\n }\n this.#getExtremum(\n x0,\n x1,\n x2,\n x3,\n y0,\n y1,\n y2,\n y3,\n 3 * (-x0 + 3 * (x1 - x2) + x3),\n 6 * (x0 - 2 * x1 + x2),\n 3 * (x1 - x0),\n minMax\n );\n this.#getExtremum(\n x0,\n x1,\n x2,\n x3,\n y0,\n y1,\n y2,\n y3,\n 3 * (-y0 + 3 * (y1 - y2) + y3),\n 6 * (y0 - 2 * y1 + y2),\n 3 * (y1 - y0),\n minMax\n );\n return minMax;\n }\n}\n\nconst PDFStringTranslateTable = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8,\n 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192,\n 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018,\n 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d,\n 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac,\n];\n\nfunction stringToPDFString(str) {\n // See section 7.9.2.2 Text String Type.\n // The string can contain some language codes bracketed with 0x0b,\n // so we must remove them.\n if (str[0] >= \"\\xEF\") {\n let encoding;\n if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n encoding = \"utf-16be\";\n if (str.length % 2 === 1) {\n str = str.slice(0, -1);\n }\n } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n encoding = \"utf-16le\";\n if (str.length % 2 === 1) {\n str = str.slice(0, -1);\n }\n } else if (str[0] === \"\\xEF\" && str[1] === \"\\xBB\" && str[2] === \"\\xBF\") {\n encoding = \"utf-8\";\n }\n\n if (encoding) {\n try {\n const decoder = new TextDecoder(encoding, { fatal: true });\n const buffer = stringToBytes(str);\n const decoded = decoder.decode(buffer);\n if (!decoded.includes(\"\\x1b\")) {\n return decoded;\n }\n return decoded.replaceAll(/\\x1b[^\\x1b]*(?:\\x1b|$)/g, \"\");\n } catch (ex) {\n warn(`stringToPDFString: \"${ex}\".`);\n }\n }\n }\n // ISO Latin 1\n const strBuf = [];\n for (let i = 0, ii = str.length; i < ii; i++) {\n const charCode = str.charCodeAt(i);\n if (charCode === 0x1b) {\n // eslint-disable-next-line no-empty\n while (++i < ii && str.charCodeAt(i) !== 0x1b) {}\n continue;\n }\n const code = PDFStringTranslateTable[charCode];\n strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n }\n return strBuf.join(\"\");\n}\n\nfunction stringToUTF8String(str) {\n return decodeURIComponent(escape(str));\n}\n\nfunction utf8StringToString(str) {\n return unescape(encodeURIComponent(str));\n}\n\nfunction isArrayEqual(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n for (let i = 0, ii = arr1.length; i < ii; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction getModificationDate(date = new Date()) {\n const buffer = [\n date.getUTCFullYear().toString(),\n (date.getUTCMonth() + 1).toString().padStart(2, \"0\"),\n date.getUTCDate().toString().padStart(2, \"0\"),\n date.getUTCHours().toString().padStart(2, \"0\"),\n date.getUTCMinutes().toString().padStart(2, \"0\"),\n date.getUTCSeconds().toString().padStart(2, \"0\"),\n ];\n\n return buffer.join(\"\");\n}\n\nlet NormalizeRegex = null;\nlet NormalizationMap = null;\nfunction normalizeUnicode(str) {\n if (!NormalizeRegex) {\n // In order to generate the following regex:\n // - create a PDF containing all the chars in the range 0000-FFFF with\n // a NFKC which is different of the char.\n // - copy and paste all those chars and get the ones where NFKC is\n // required.\n // It appears that most the chars here contain some ligatures.\n NormalizeRegex =\n /([\\u00a0\\u00b5\\u037e\\u0eb3\\u2000-\\u200a\\u202f\\u2126\\ufb00-\\ufb04\\ufb06\\ufb20-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufba1\\ufba4-\\ufba9\\ufbae-\\ufbb1\\ufbd3-\\ufbdc\\ufbde-\\ufbe7\\ufbea-\\ufbf8\\ufbfc-\\ufbfd\\ufc00-\\ufc5d\\ufc64-\\ufcf1\\ufcf5-\\ufd3d\\ufd88\\ufdf4\\ufdfa-\\ufdfb\\ufe71\\ufe77\\ufe79\\ufe7b\\ufe7d]+)|(\\ufb05+)/gu;\n NormalizationMap = new Map([[\"ſt\", \"ſt\"]]);\n }\n return str.replaceAll(NormalizeRegex, (_, p1, p2) =>\n p1 ? p1.normalize(\"NFKC\") : NormalizationMap.get(p2)\n );\n}\n\nfunction getUuid() {\n if (\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n (typeof crypto !== \"undefined\" && typeof crypto?.randomUUID === \"function\")\n ) {\n return crypto.randomUUID();\n }\n const buf = new Uint8Array(32);\n if (\n typeof crypto !== \"undefined\" &&\n typeof crypto?.getRandomValues === \"function\"\n ) {\n crypto.getRandomValues(buf);\n } else {\n for (let i = 0; i < 32; i++) {\n buf[i] = Math.floor(Math.random() * 255);\n }\n }\n return bytesToString(buf);\n}\n\nconst AnnotationPrefix = \"pdfjs_internal_id_\";\n\nconst FontRenderOps = {\n BEZIER_CURVE_TO: 0,\n MOVE_TO: 1,\n LINE_TO: 2,\n QUADRATIC_CURVE_TO: 3,\n RESTORE: 4,\n SAVE: 5,\n SCALE: 6,\n TRANSFORM: 7,\n TRANSLATE: 8,\n};\n\nexport {\n AbortException,\n AnnotationActionEventType,\n AnnotationBorderStyleType,\n AnnotationEditorParamsType,\n AnnotationEditorPrefix,\n AnnotationEditorType,\n AnnotationFieldFlag,\n AnnotationFlag,\n AnnotationMode,\n AnnotationPrefix,\n AnnotationReplyType,\n AnnotationType,\n assert,\n BaseException,\n BASELINE_FACTOR,\n bytesToString,\n CMapCompressionType,\n createValidAbsoluteUrl,\n DocumentActionEventType,\n FeatureTest,\n FONT_IDENTITY_MATRIX,\n FontRenderOps,\n FormatError,\n getModificationDate,\n getUuid,\n getVerbosityLevel,\n IDENTITY_MATRIX,\n ImageKind,\n info,\n InvalidPDFException,\n isArrayEqual,\n isNodeJS,\n LINE_DESCENT_FACTOR,\n LINE_FACTOR,\n MAX_IMAGE_SIZE_TO_CACHE,\n MissingPDFException,\n normalizeUnicode,\n objectFromMap,\n objectSize,\n OPS,\n PageActionEventType,\n PasswordException,\n PasswordResponses,\n PermissionFlag,\n RenderingIntentFlag,\n setVerbosityLevel,\n shadow,\n string32,\n stringToBytes,\n stringToPDFString,\n stringToUTF8String,\n TextRenderingMode,\n UnexpectedResponseException,\n UnknownErrorException,\n unreachable,\n utf8StringToString,\n Util,\n VerbosityLevel,\n warn,\n};\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CMapCompressionType, unreachable } from \"../shared/util.js\";\n\nclass BaseFilterFactory {\n constructor() {\n if (this.constructor === BaseFilterFactory) {\n unreachable(\"Cannot initialize BaseFilterFactory.\");\n }\n }\n\n addFilter(maps) {\n return \"none\";\n }\n\n addHCMFilter(fgColor, bgColor) {\n return \"none\";\n }\n\n addAlphaFilter(map) {\n return \"none\";\n }\n\n addLuminosityFilter(map) {\n return \"none\";\n }\n\n addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {\n return \"none\";\n }\n\n destroy(keepHCM = false) {}\n}\n\nclass BaseCanvasFactory {\n constructor() {\n if (this.constructor === BaseCanvasFactory) {\n unreachable(\"Cannot initialize BaseCanvasFactory.\");\n }\n }\n\n create(width, height) {\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid canvas size\");\n }\n const canvas = this._createCanvas(width, height);\n return {\n canvas,\n context: canvas.getContext(\"2d\"),\n };\n }\n\n reset(canvasAndContext, width, height) {\n if (!canvasAndContext.canvas) {\n throw new Error(\"Canvas is not specified\");\n }\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid canvas size\");\n }\n canvasAndContext.canvas.width = width;\n canvasAndContext.canvas.height = height;\n }\n\n destroy(canvasAndContext) {\n if (!canvasAndContext.canvas) {\n throw new Error(\"Canvas is not specified\");\n }\n // Zeroing the width and height cause Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n canvasAndContext.canvas.width = 0;\n canvasAndContext.canvas.height = 0;\n canvasAndContext.canvas = null;\n canvasAndContext.context = null;\n }\n\n /**\n * @ignore\n */\n _createCanvas(width, height) {\n unreachable(\"Abstract method `_createCanvas` called.\");\n }\n}\n\nclass BaseCMapReaderFactory {\n constructor({ baseUrl = null, isCompressed = true }) {\n if (this.constructor === BaseCMapReaderFactory) {\n unreachable(\"Cannot initialize BaseCMapReaderFactory.\");\n }\n this.baseUrl = baseUrl;\n this.isCompressed = isCompressed;\n }\n\n async fetch({ name }) {\n if (!this.baseUrl) {\n throw new Error(\n 'The CMap \"baseUrl\" parameter must be specified, ensure that ' +\n 'the \"cMapUrl\" and \"cMapPacked\" API parameters are provided.'\n );\n }\n if (!name) {\n throw new Error(\"CMap name must be specified.\");\n }\n const url = this.baseUrl + name + (this.isCompressed ? \".bcmap\" : \"\");\n const compressionType = this.isCompressed\n ? CMapCompressionType.BINARY\n : CMapCompressionType.NONE;\n\n return this._fetchData(url, compressionType).catch(reason => {\n throw new Error(\n `Unable to load ${this.isCompressed ? \"binary \" : \"\"}CMap at: ${url}`\n );\n });\n }\n\n /**\n * @ignore\n */\n _fetchData(url, compressionType) {\n unreachable(\"Abstract method `_fetchData` called.\");\n }\n}\n\nclass BaseStandardFontDataFactory {\n constructor({ baseUrl = null }) {\n if (this.constructor === BaseStandardFontDataFactory) {\n unreachable(\"Cannot initialize BaseStandardFontDataFactory.\");\n }\n this.baseUrl = baseUrl;\n }\n\n async fetch({ filename }) {\n if (!this.baseUrl) {\n throw new Error(\n 'The standard font \"baseUrl\" parameter must be specified, ensure that ' +\n 'the \"standardFontDataUrl\" API parameter is provided.'\n );\n }\n if (!filename) {\n throw new Error(\"Font filename must be specified.\");\n }\n const url = `${this.baseUrl}${filename}`;\n\n return this._fetchData(url).catch(reason => {\n throw new Error(`Unable to load font data at: ${url}`);\n });\n }\n\n /**\n * @ignore\n */\n _fetchData(url) {\n unreachable(\"Abstract method `_fetchData` called.\");\n }\n}\n\nclass BaseSVGFactory {\n constructor() {\n if (this.constructor === BaseSVGFactory) {\n unreachable(\"Cannot initialize BaseSVGFactory.\");\n }\n }\n\n create(width, height, skipDimensions = false) {\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid SVG dimensions\");\n }\n const svg = this._createSVG(\"svg:svg\");\n svg.setAttribute(\"version\", \"1.1\");\n\n if (!skipDimensions) {\n svg.setAttribute(\"width\", `${width}px`);\n svg.setAttribute(\"height\", `${height}px`);\n }\n\n svg.setAttribute(\"preserveAspectRatio\", \"none\");\n svg.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n\n return svg;\n }\n\n createElement(type) {\n if (typeof type !== \"string\") {\n throw new Error(\"Invalid SVG element type\");\n }\n return this._createSVG(type);\n }\n\n /**\n * @ignore\n */\n _createSVG(type) {\n unreachable(\"Abstract method `_createSVG` called.\");\n }\n}\n\nexport {\n BaseCanvasFactory,\n BaseCMapReaderFactory,\n BaseFilterFactory,\n BaseStandardFontDataFactory,\n BaseSVGFactory,\n};\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n BaseCanvasFactory,\n BaseCMapReaderFactory,\n BaseFilterFactory,\n BaseStandardFontDataFactory,\n BaseSVGFactory,\n} from \"./base_factory.js\";\nimport {\n BaseException,\n FeatureTest,\n shadow,\n stringToBytes,\n Util,\n warn,\n} from \"../shared/util.js\";\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\nclass PixelsPerInch {\n static CSS = 96.0;\n\n static PDF = 72.0;\n\n static PDF_TO_CSS_UNITS = this.CSS / this.PDF;\n}\n\n/**\n * FilterFactory aims to create some SVG filters we can use when drawing an\n * image (or whatever) on a canvas.\n * Filters aren't applied with ctx.putImageData because it just overwrites the\n * underlying pixels.\n * With these filters, it's possible for example to apply some transfer maps on\n * an image without the need to apply them on the pixel arrays: the renderer\n * does the magic for us.\n */\nclass DOMFilterFactory extends BaseFilterFactory {\n #_cache;\n\n #_defs;\n\n #docId;\n\n #document;\n\n #_hcmCache;\n\n #id = 0;\n\n constructor({ docId, ownerDocument = globalThis.document } = {}) {\n super();\n this.#docId = docId;\n this.#document = ownerDocument;\n }\n\n get #cache() {\n return (this.#_cache ||= new Map());\n }\n\n get #hcmCache() {\n return (this.#_hcmCache ||= new Map());\n }\n\n get #defs() {\n if (!this.#_defs) {\n const div = this.#document.createElement(\"div\");\n const { style } = div;\n style.visibility = \"hidden\";\n style.contain = \"strict\";\n style.width = style.height = 0;\n style.position = \"absolute\";\n style.top = style.left = 0;\n style.zIndex = -1;\n\n const svg = this.#document.createElementNS(SVG_NS, \"svg\");\n svg.setAttribute(\"width\", 0);\n svg.setAttribute(\"height\", 0);\n this.#_defs = this.#document.createElementNS(SVG_NS, \"defs\");\n div.append(svg);\n svg.append(this.#_defs);\n this.#document.body.append(div);\n }\n return this.#_defs;\n }\n\n #createTables(maps) {\n if (maps.length === 1) {\n const mapR = maps[0];\n const buffer = new Array(256);\n for (let i = 0; i < 256; i++) {\n buffer[i] = mapR[i] / 255;\n }\n\n const table = buffer.join(\",\");\n return [table, table, table];\n }\n\n const [mapR, mapG, mapB] = maps;\n const bufferR = new Array(256);\n const bufferG = new Array(256);\n const bufferB = new Array(256);\n for (let i = 0; i < 256; i++) {\n bufferR[i] = mapR[i] / 255;\n bufferG[i] = mapG[i] / 255;\n bufferB[i] = mapB[i] / 255;\n }\n return [bufferR.join(\",\"), bufferG.join(\",\"), bufferB.join(\",\")];\n }\n\n addFilter(maps) {\n if (!maps) {\n return \"none\";\n }\n\n // When a page is zoomed the page is re-drawn but the maps are likely\n // the same.\n let value = this.#cache.get(maps);\n if (value) {\n return value;\n }\n\n const [tableR, tableG, tableB] = this.#createTables(maps);\n const key = maps.length === 1 ? tableR : `${tableR}${tableG}${tableB}`;\n\n value = this.#cache.get(key);\n if (value) {\n this.#cache.set(maps, value);\n return value;\n }\n\n // We create a SVG filter: feComponentTransferElement\n // https://www.w3.org/TR/SVG11/filters.html#feComponentTransferElement\n\n const id = `g_${this.#docId}_transfer_map_${this.#id++}`;\n const url = `url(#${id})`;\n this.#cache.set(maps, url);\n this.#cache.set(key, url);\n\n const filter = this.#createFilter(id);\n this.#addTransferMapConversion(tableR, tableG, tableB, filter);\n\n return url;\n }\n\n addHCMFilter(fgColor, bgColor) {\n const key = `${fgColor}-${bgColor}`;\n const filterName = \"base\";\n let info = this.#hcmCache.get(filterName);\n if (info?.key === key) {\n return info.url;\n }\n\n if (info) {\n info.filter?.remove();\n info.key = key;\n info.url = \"none\";\n info.filter = null;\n } else {\n info = {\n key,\n url: \"none\",\n filter: null,\n };\n this.#hcmCache.set(filterName, info);\n }\n\n if (!fgColor || !bgColor) {\n return info.url;\n }\n\n const fgRGB = this.#getRGB(fgColor);\n fgColor = Util.makeHexColor(...fgRGB);\n const bgRGB = this.#getRGB(bgColor);\n bgColor = Util.makeHexColor(...bgRGB);\n this.#defs.style.color = \"\";\n\n if (\n (fgColor === \"#000000\" && bgColor === \"#ffffff\") ||\n fgColor === bgColor\n ) {\n return info.url;\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/Accessibility/Understanding_Colors_and_Luminance\n //\n // Relative luminance:\n // https://www.w3.org/TR/WCAG20/#relativeluminancedef\n //\n // We compute the rounded luminance of the default background color.\n // Then for every color in the pdf, if its rounded luminance is the\n // same as the background one then it's replaced by the new\n // background color else by the foreground one.\n const map = new Array(256);\n for (let i = 0; i <= 255; i++) {\n const x = i / 255;\n map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;\n }\n const table = map.join(\",\");\n\n const id = `g_${this.#docId}_hcm_filter`;\n const filter = (info.filter = this.#createFilter(id));\n this.#addTransferMapConversion(table, table, table, filter);\n this.#addGrayConversion(filter);\n\n const getSteps = (c, n) => {\n const start = fgRGB[c] / 255;\n const end = bgRGB[c] / 255;\n const arr = new Array(n + 1);\n for (let i = 0; i <= n; i++) {\n arr[i] = start + (i / n) * (end - start);\n }\n return arr.join(\",\");\n };\n this.#addTransferMapConversion(\n getSteps(0, 5),\n getSteps(1, 5),\n getSteps(2, 5),\n filter\n );\n\n info.url = `url(#${id})`;\n return info.url;\n }\n\n addAlphaFilter(map) {\n // When a page is zoomed the page is re-drawn but the maps are likely\n // the same.\n let value = this.#cache.get(map);\n if (value) {\n return value;\n }\n\n const [tableA] = this.#createTables([map]);\n const key = `alpha_${tableA}`;\n\n value = this.#cache.get(key);\n if (value) {\n this.#cache.set(map, value);\n return value;\n }\n\n const id = `g_${this.#docId}_alpha_map_${this.#id++}`;\n const url = `url(#${id})`;\n this.#cache.set(map, url);\n this.#cache.set(key, url);\n\n const filter = this.#createFilter(id);\n this.#addTransferMapAlphaConversion(tableA, filter);\n\n return url;\n }\n\n addLuminosityFilter(map) {\n // When a page is zoomed the page is re-drawn but the maps are likely\n // the same.\n let value = this.#cache.get(map || \"luminosity\");\n if (value) {\n return value;\n }\n\n let tableA, key;\n if (map) {\n [tableA] = this.#createTables([map]);\n key = `luminosity_${tableA}`;\n } else {\n key = \"luminosity\";\n }\n\n value = this.#cache.get(key);\n if (value) {\n this.#cache.set(map, value);\n return value;\n }\n\n const id = `g_${this.#docId}_luminosity_map_${this.#id++}`;\n const url = `url(#${id})`;\n this.#cache.set(map, url);\n this.#cache.set(key, url);\n\n const filter = this.#createFilter(id);\n this.#addLuminosityConversion(filter);\n if (map) {\n this.#addTransferMapAlphaConversion(tableA, filter);\n }\n\n return url;\n }\n\n addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {\n const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`;\n let info = this.#hcmCache.get(filterName);\n if (info?.key === key) {\n return info.url;\n }\n\n if (info) {\n info.filter?.remove();\n info.key = key;\n info.url = \"none\";\n info.filter = null;\n } else {\n info = {\n key,\n url: \"none\",\n filter: null,\n };\n this.#hcmCache.set(filterName, info);\n }\n\n if (!fgColor || !bgColor) {\n return info.url;\n }\n\n const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this));\n let fgGray = Math.round(\n 0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]\n );\n let bgGray = Math.round(\n 0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]\n );\n let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(\n this.#getRGB.bind(this)\n );\n if (bgGray < fgGray) {\n [fgGray, bgGray, newFgRGB, newBgRGB] = [\n bgGray,\n fgGray,\n newBgRGB,\n newFgRGB,\n ];\n }\n this.#defs.style.color = \"\";\n\n // Now we can create the filters to highlight some canvas parts.\n // The colors in the pdf will almost be Canvas and CanvasText, hence we\n // want to filter them to finally get Highlight and HighlightText.\n // Since we're in HCM the background color and the foreground color should\n // be really different when converted to grayscale (if they're not then it\n // means that we've a poor contrast). Once the canvas colors are converted\n // to grayscale we can easily map them on their new colors.\n // The grayscale step is important because if we've something like:\n // fgColor = #FF....\n // bgColor = #FF....\n // then we are enable to map the red component on the new red components\n // which can be different.\n\n const getSteps = (fg, bg, n) => {\n const arr = new Array(256);\n const step = (bgGray - fgGray) / n;\n const newStart = fg / 255;\n const newStep = (bg - fg) / (255 * n);\n let prev = 0;\n for (let i = 0; i <= n; i++) {\n const k = Math.round(fgGray + i * step);\n const value = newStart + i * newStep;\n for (let j = prev; j <= k; j++) {\n arr[j] = value;\n }\n prev = k + 1;\n }\n for (let i = prev; i < 256; i++) {\n arr[i] = arr[prev - 1];\n }\n return arr.join(\",\");\n };\n\n const id = `g_${this.#docId}_hcm_${filterName}_filter`;\n const filter = (info.filter = this.#createFilter(id));\n\n this.#addGrayConversion(filter);\n this.#addTransferMapConversion(\n getSteps(newFgRGB[0], newBgRGB[0], 5),\n getSteps(newFgRGB[1], newBgRGB[1], 5),\n getSteps(newFgRGB[2], newBgRGB[2], 5),\n filter\n );\n\n info.url = `url(#${id})`;\n return info.url;\n }\n\n destroy(keepHCM = false) {\n if (keepHCM && this.#hcmCache.size !== 0) {\n return;\n }\n if (this.#_defs) {\n this.#_defs.parentNode.parentNode.remove();\n this.#_defs = null;\n }\n if (this.#_cache) {\n this.#_cache.clear();\n this.#_cache = null;\n }\n this.#id = 0;\n }\n\n #addLuminosityConversion(filter) {\n const feColorMatrix = this.#document.createElementNS(\n SVG_NS,\n \"feColorMatrix\"\n );\n feColorMatrix.setAttribute(\"type\", \"matrix\");\n feColorMatrix.setAttribute(\n \"values\",\n \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0\"\n );\n filter.append(feColorMatrix);\n }\n\n #addGrayConversion(filter) {\n const feColorMatrix = this.#document.createElementNS(\n SVG_NS,\n \"feColorMatrix\"\n );\n feColorMatrix.setAttribute(\"type\", \"matrix\");\n feColorMatrix.setAttribute(\n \"values\",\n \"0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0\"\n );\n filter.append(feColorMatrix);\n }\n\n #createFilter(id) {\n const filter = this.#document.createElementNS(SVG_NS, \"filter\");\n filter.setAttribute(\"color-interpolation-filters\", \"sRGB\");\n filter.setAttribute(\"id\", id);\n this.#defs.append(filter);\n\n return filter;\n }\n\n #appendFeFunc(feComponentTransfer, func, table) {\n const feFunc = this.#document.createElementNS(SVG_NS, func);\n feFunc.setAttribute(\"type\", \"discrete\");\n feFunc.setAttribute(\"tableValues\", table);\n feComponentTransfer.append(feFunc);\n }\n\n #addTransferMapConversion(rTable, gTable, bTable, filter) {\n const feComponentTransfer = this.#document.createElementNS(\n SVG_NS,\n \"feComponentTransfer\"\n );\n filter.append(feComponentTransfer);\n this.#appendFeFunc(feComponentTransfer, \"feFuncR\", rTable);\n this.#appendFeFunc(feComponentTransfer, \"feFuncG\", gTable);\n this.#appendFeFunc(feComponentTransfer, \"feFuncB\", bTable);\n }\n\n #addTransferMapAlphaConversion(aTable, filter) {\n const feComponentTransfer = this.#document.createElementNS(\n SVG_NS,\n \"feComponentTransfer\"\n );\n filter.append(feComponentTransfer);\n this.#appendFeFunc(feComponentTransfer, \"feFuncA\", aTable);\n }\n\n #getRGB(color) {\n this.#defs.style.color = color;\n return getRGB(getComputedStyle(this.#defs).getPropertyValue(\"color\"));\n }\n}\n\nclass DOMCanvasFactory extends BaseCanvasFactory {\n constructor({ ownerDocument = globalThis.document } = {}) {\n super();\n this._document = ownerDocument;\n }\n\n /**\n * @ignore\n */\n _createCanvas(width, height) {\n const canvas = this._document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n}\n\nasync function fetchData(url, type = \"text\") {\n if (\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n isValidFetchUrl(url, document.baseURI)\n ) {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n switch (type) {\n case \"arraybuffer\":\n return response.arrayBuffer();\n case \"blob\":\n return response.blob();\n case \"json\":\n return response.json();\n }\n return response.text();\n }\n\n // The Fetch API is not supported.\n return new Promise((resolve, reject) => {\n const request = new XMLHttpRequest();\n request.open(\"GET\", url, /* async = */ true);\n request.responseType = type;\n\n request.onreadystatechange = () => {\n if (request.readyState !== XMLHttpRequest.DONE) {\n return;\n }\n if (request.status === 200 || request.status === 0) {\n switch (type) {\n case \"arraybuffer\":\n case \"blob\":\n case \"json\":\n resolve(request.response);\n return;\n }\n resolve(request.responseText);\n return;\n }\n reject(new Error(request.statusText));\n };\n\n request.send(null);\n });\n}\n\nclass DOMCMapReaderFactory extends BaseCMapReaderFactory {\n /**\n * @ignore\n */\n _fetchData(url, compressionType) {\n return fetchData(\n url,\n /* type = */ this.isCompressed ? \"arraybuffer\" : \"text\"\n ).then(data => ({\n cMapData:\n data instanceof ArrayBuffer\n ? new Uint8Array(data)\n : stringToBytes(data),\n compressionType,\n }));\n }\n}\n\nclass DOMStandardFontDataFactory extends BaseStandardFontDataFactory {\n /**\n * @ignore\n */\n _fetchData(url) {\n return fetchData(url, /* type = */ \"arraybuffer\").then(\n data => new Uint8Array(data)\n );\n }\n}\n\nclass DOMSVGFactory extends BaseSVGFactory {\n /**\n * @ignore\n */\n _createSVG(type) {\n return document.createElementNS(SVG_NS, type);\n }\n}\n\n/**\n * @typedef {Object} PageViewportParameters\n * @property {Array} viewBox - The xMin, yMin, xMax and\n * yMax coordinates.\n * @property {number} scale - The scale of the viewport.\n * @property {number} rotation - The rotation, in degrees, of the viewport.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset. The\n * default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset. The\n * default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be flipped.\n * The default value is `false`.\n */\n\n/**\n * @typedef {Object} PageViewportCloneParameters\n * @property {number} [scale] - The scale, overriding the one in the cloned\n * viewport. The default value is `this.scale`.\n * @property {number} [rotation] - The rotation, in degrees, overriding the one\n * in the cloned viewport. The default value is `this.rotation`.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n * The default value is `this.offsetX`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n * The default value is `this.offsetY`.\n * @property {boolean} [dontFlip] - If true, the x-axis will not be flipped.\n * The default value is `false`.\n */\n\n/**\n * PDF page viewport created based on scale, rotation and offset.\n */\nclass PageViewport {\n /**\n * @param {PageViewportParameters}\n */\n constructor({\n viewBox,\n scale,\n rotation,\n offsetX = 0,\n offsetY = 0,\n dontFlip = false,\n }) {\n this.viewBox = viewBox;\n this.scale = scale;\n this.rotation = rotation;\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n // creating transform to convert pdf coordinate system to the normal\n // canvas like coordinates taking in account scale and rotation\n const centerX = (viewBox[2] + viewBox[0]) / 2;\n const centerY = (viewBox[3] + viewBox[1]) / 2;\n let rotateA, rotateB, rotateC, rotateD;\n // Normalize the rotation, by clamping it to the [0, 360) range.\n rotation %= 360;\n if (rotation < 0) {\n rotation += 360;\n }\n switch (rotation) {\n case 180:\n rotateA = -1;\n rotateB = 0;\n rotateC = 0;\n rotateD = 1;\n break;\n case 90:\n rotateA = 0;\n rotateB = 1;\n rotateC = 1;\n rotateD = 0;\n break;\n case 270:\n rotateA = 0;\n rotateB = -1;\n rotateC = -1;\n rotateD = 0;\n break;\n case 0:\n rotateA = 1;\n rotateB = 0;\n rotateC = 0;\n rotateD = -1;\n break;\n default:\n throw new Error(\n \"PageViewport: Invalid rotation, must be a multiple of 90 degrees.\"\n );\n }\n\n if (dontFlip) {\n rotateC = -rotateC;\n rotateD = -rotateD;\n }\n\n let offsetCanvasX, offsetCanvasY;\n let width, height;\n if (rotateA === 0) {\n offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;\n offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;\n width = (viewBox[3] - viewBox[1]) * scale;\n height = (viewBox[2] - viewBox[0]) * scale;\n } else {\n offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;\n offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;\n width = (viewBox[2] - viewBox[0]) * scale;\n height = (viewBox[3] - viewBox[1]) * scale;\n }\n // creating transform for the following operations:\n // translate(-centerX, -centerY), rotate and flip vertically,\n // scale, and translate(offsetCanvasX, offsetCanvasY)\n this.transform = [\n rotateA * scale,\n rotateB * scale,\n rotateC * scale,\n rotateD * scale,\n offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,\n offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY,\n ];\n\n this.width = width;\n this.height = height;\n }\n\n /**\n * The original, un-scaled, viewport dimensions.\n * @type {Object}\n */\n get rawDims() {\n const { viewBox } = this;\n return shadow(this, \"rawDims\", {\n pageWidth: viewBox[2] - viewBox[0],\n pageHeight: viewBox[3] - viewBox[1],\n pageX: viewBox[0],\n pageY: viewBox[1],\n });\n }\n\n /**\n * Clones viewport, with optional additional properties.\n * @param {PageViewportCloneParameters} [params]\n * @returns {PageViewport} Cloned viewport.\n */\n clone({\n scale = this.scale,\n rotation = this.rotation,\n offsetX = this.offsetX,\n offsetY = this.offsetY,\n dontFlip = false,\n } = {}) {\n return new PageViewport({\n viewBox: this.viewBox.slice(),\n scale,\n rotation,\n offsetX,\n offsetY,\n dontFlip,\n });\n }\n\n /**\n * Converts PDF point to the viewport coordinates. For examples, useful for\n * converting PDF location into canvas pixel coordinates.\n * @param {number} x - The x-coordinate.\n * @param {number} y - The y-coordinate.\n * @returns {Array} Array containing `x`- and `y`-coordinates of the\n * point in the viewport coordinate space.\n * @see {@link convertToPdfPoint}\n * @see {@link convertToViewportRectangle}\n */\n convertToViewportPoint(x, y) {\n return Util.applyTransform([x, y], this.transform);\n }\n\n /**\n * Converts PDF rectangle to the viewport coordinates.\n * @param {Array} rect - The xMin, yMin, xMax and yMax coordinates.\n * @returns {Array} Array containing corresponding coordinates of the\n * rectangle in the viewport coordinate space.\n * @see {@link convertToViewportPoint}\n */\n convertToViewportRectangle(rect) {\n const topLeft = Util.applyTransform([rect[0], rect[1]], this.transform);\n const bottomRight = Util.applyTransform([rect[2], rect[3]], this.transform);\n return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];\n }\n\n /**\n * Converts viewport coordinates to the PDF location. For examples, useful\n * for converting canvas pixel location into PDF one.\n * @param {number} x - The x-coordinate.\n * @param {number} y - The y-coordinate.\n * @returns {Array} Array containing `x`- and `y`-coordinates of the\n * point in the PDF coordinate space.\n * @see {@link convertToViewportPoint}\n */\n convertToPdfPoint(x, y) {\n return Util.applyInverseTransform([x, y], this.transform);\n }\n}\n\nclass RenderingCancelledException extends BaseException {\n constructor(msg, extraDelay = 0) {\n super(msg, \"RenderingCancelledException\");\n this.extraDelay = extraDelay;\n }\n}\n\nfunction isDataScheme(url) {\n const ii = url.length;\n let i = 0;\n while (i < ii && url[i].trim() === \"\") {\n i++;\n }\n return url.substring(i, i + 5).toLowerCase() === \"data:\";\n}\n\nfunction isPdfFile(filename) {\n return typeof filename === \"string\" && /\\.pdf$/i.test(filename);\n}\n\n/**\n * Gets the filename from a given URL.\n * @param {string} url\n * @returns {string}\n */\nfunction getFilenameFromUrl(url) {\n [url] = url.split(/[#?]/, 1);\n return url.substring(url.lastIndexOf(\"/\") + 1);\n}\n\n/**\n * Returns the filename or guessed filename from the url (see issue 3455).\n * @param {string} url - The original PDF location.\n * @param {string} defaultFilename - The value returned if the filename is\n * unknown, or the protocol is unsupported.\n * @returns {string} Guessed PDF filename.\n */\nfunction getPdfFilenameFromUrl(url, defaultFilename = \"document.pdf\") {\n if (typeof url !== \"string\") {\n return defaultFilename;\n }\n if (isDataScheme(url)) {\n warn('getPdfFilenameFromUrl: ignore \"data:\"-URL for performance reasons.');\n return defaultFilename;\n }\n const reURI = /^(?:(?:[^:]+:)?\\/\\/[^/]+)?([^?#]*)(\\?[^#]*)?(#.*)?$/;\n // SCHEME HOST 1.PATH 2.QUERY 3.REF\n // Pattern to get last matching NAME.pdf\n const reFilename = /[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i;\n const splitURI = reURI.exec(url);\n let suggestedFilename =\n reFilename.exec(splitURI[1]) ||\n reFilename.exec(splitURI[2]) ||\n reFilename.exec(splitURI[3]);\n if (suggestedFilename) {\n suggestedFilename = suggestedFilename[0];\n if (suggestedFilename.includes(\"%\")) {\n // URL-encoded %2Fpath%2Fto%2Ffile.pdf should be file.pdf\n try {\n suggestedFilename = reFilename.exec(\n decodeURIComponent(suggestedFilename)\n )[0];\n } catch {\n // Possible (extremely rare) errors:\n // URIError \"Malformed URI\", e.g. for \"%AA.pdf\"\n // TypeError \"null has no properties\", e.g. for \"%2F.pdf\"\n }\n }\n }\n return suggestedFilename || defaultFilename;\n}\n\nclass StatTimer {\n started = Object.create(null);\n\n times = [];\n\n time(name) {\n if (name in this.started) {\n warn(`Timer is already running for ${name}`);\n }\n this.started[name] = Date.now();\n }\n\n timeEnd(name) {\n if (!(name in this.started)) {\n warn(`Timer has not been started for ${name}`);\n }\n this.times.push({\n name,\n start: this.started[name],\n end: Date.now(),\n });\n // Remove timer from started so it can be called again.\n delete this.started[name];\n }\n\n toString() {\n // Find the longest name for padding purposes.\n const outBuf = [];\n let longest = 0;\n for (const { name } of this.times) {\n longest = Math.max(name.length, longest);\n }\n for (const { name, start, end } of this.times) {\n outBuf.push(`${name.padEnd(longest)} ${end - start}ms\\n`);\n }\n return outBuf.join(\"\");\n }\n}\n\nfunction isValidFetchUrl(url, baseUrl) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: isValidFetchUrl\");\n }\n try {\n const { protocol } = baseUrl ? new URL(url, baseUrl) : new URL(url);\n // The Fetch API only supports the http/https protocols, and not file/ftp.\n return protocol === \"http:\" || protocol === \"https:\";\n } catch {\n return false; // `new URL()` will throw on incorrect data.\n }\n}\n\n/**\n * Event handler to suppress context menu.\n */\nfunction noContextMenu(e) {\n e.preventDefault();\n}\n\n// Deprecated API function -- display regardless of the `verbosity` setting.\nfunction deprecated(details) {\n console.log(\"Deprecated API usage: \" + details);\n}\n\nlet pdfDateStringRegex;\n\nclass PDFDateString {\n /**\n * Convert a PDF date string to a JavaScript `Date` object.\n *\n * The PDF date string format is described in section 7.9.4 of the official\n * PDF 32000-1:2008 specification. However, in the PDF 1.7 reference (sixth\n * edition) Adobe describes the same format including a trailing apostrophe.\n * This syntax in incorrect, but Adobe Acrobat creates PDF files that contain\n * them. We ignore all apostrophes as they are not necessary for date parsing.\n *\n * Moreover, Adobe Acrobat doesn't handle changing the date to universal time\n * and doesn't use the user's time zone (effectively ignoring the HH' and mm'\n * parts of the date string).\n *\n * @param {string} input\n * @returns {Date|null}\n */\n static toDateObject(input) {\n if (!input || typeof input !== \"string\") {\n return null;\n }\n\n // Lazily initialize the regular expression.\n pdfDateStringRegex ||= new RegExp(\n \"^D:\" + // Prefix (required)\n \"(\\\\d{4})\" + // Year (required)\n \"(\\\\d{2})?\" + // Month (optional)\n \"(\\\\d{2})?\" + // Day (optional)\n \"(\\\\d{2})?\" + // Hour (optional)\n \"(\\\\d{2})?\" + // Minute (optional)\n \"(\\\\d{2})?\" + // Second (optional)\n \"([Z|+|-])?\" + // Universal time relation (optional)\n \"(\\\\d{2})?\" + // Offset hour (optional)\n \"'?\" + // Splitting apostrophe (optional)\n \"(\\\\d{2})?\" + // Offset minute (optional)\n \"'?\" // Trailing apostrophe (optional)\n );\n\n // Optional fields that don't satisfy the requirements from the regular\n // expression (such as incorrect digit counts or numbers that are out of\n // range) will fall back the defaults from the specification.\n const matches = pdfDateStringRegex.exec(input);\n if (!matches) {\n return null;\n }\n\n // JavaScript's `Date` object expects the month to be between 0 and 11\n // instead of 1 and 12, so we have to correct for that.\n const year = parseInt(matches[1], 10);\n let month = parseInt(matches[2], 10);\n month = month >= 1 && month <= 12 ? month - 1 : 0;\n let day = parseInt(matches[3], 10);\n day = day >= 1 && day <= 31 ? day : 1;\n let hour = parseInt(matches[4], 10);\n hour = hour >= 0 && hour <= 23 ? hour : 0;\n let minute = parseInt(matches[5], 10);\n minute = minute >= 0 && minute <= 59 ? minute : 0;\n let second = parseInt(matches[6], 10);\n second = second >= 0 && second <= 59 ? second : 0;\n const universalTimeRelation = matches[7] || \"Z\";\n let offsetHour = parseInt(matches[8], 10);\n offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;\n let offsetMinute = parseInt(matches[9], 10) || 0;\n offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;\n\n // Universal time relation 'Z' means that the local time is equal to the\n // universal time, whereas the relations '+'/'-' indicate that the local\n // time is later respectively earlier than the universal time. Every date\n // is normalized to universal time.\n if (universalTimeRelation === \"-\") {\n hour += offsetHour;\n minute += offsetMinute;\n } else if (universalTimeRelation === \"+\") {\n hour -= offsetHour;\n minute -= offsetMinute;\n }\n\n return new Date(Date.UTC(year, month, day, hour, minute, second));\n }\n}\n\n/**\n * NOTE: This is (mostly) intended to support printing of XFA forms.\n */\nfunction getXfaPageViewport(xfaPage, { scale = 1, rotation = 0 }) {\n const { width, height } = xfaPage.attributes.style;\n const viewBox = [0, 0, parseInt(width), parseInt(height)];\n\n return new PageViewport({\n viewBox,\n scale,\n rotation,\n });\n}\n\nfunction getRGB(color) {\n if (color.startsWith(\"#\")) {\n const colorRGB = parseInt(color.slice(1), 16);\n return [\n (colorRGB & 0xff0000) >> 16,\n (colorRGB & 0x00ff00) >> 8,\n colorRGB & 0x0000ff,\n ];\n }\n\n if (color.startsWith(\"rgb(\")) {\n // getComputedStyle(...).color returns a `rgb(R, G, B)` color.\n return color\n .slice(/* \"rgb(\".length */ 4, -1) // Strip out \"rgb(\" and \")\".\n .split(\",\")\n .map(x => parseInt(x));\n }\n\n if (color.startsWith(\"rgba(\")) {\n return color\n .slice(/* \"rgba(\".length */ 5, -1) // Strip out \"rgba(\" and \")\".\n .split(\",\")\n .map(x => parseInt(x))\n .slice(0, 3);\n }\n\n warn(`Not a valid color format: \"${color}\"`);\n return [0, 0, 0];\n}\n\nfunction getColorValues(colors) {\n const span = document.createElement(\"span\");\n span.style.visibility = \"hidden\";\n document.body.append(span);\n for (const name of colors.keys()) {\n span.style.color = name;\n const computedColor = window.getComputedStyle(span).color;\n colors.set(name, getRGB(computedColor));\n }\n span.remove();\n}\n\nfunction getCurrentTransform(ctx) {\n const { a, b, c, d, e, f } = ctx.getTransform();\n return [a, b, c, d, e, f];\n}\n\nfunction getCurrentTransformInverse(ctx) {\n const { a, b, c, d, e, f } = ctx.getTransform().invertSelf();\n return [a, b, c, d, e, f];\n}\n\n/**\n * @param {HTMLDivElement} div\n * @param {PageViewport} viewport\n * @param {boolean} mustFlip\n * @param {boolean} mustRotate\n */\nfunction setLayerDimensions(\n div,\n viewport,\n mustFlip = false,\n mustRotate = true\n) {\n if (viewport instanceof PageViewport) {\n const { pageWidth, pageHeight } = viewport.rawDims;\n const { style } = div;\n const useRound = FeatureTest.isCSSRoundSupported;\n\n const w = `var(--scale-factor) * ${pageWidth}px`,\n h = `var(--scale-factor) * ${pageHeight}px`;\n const widthStr = useRound ? `round(${w}, 1px)` : `calc(${w})`,\n heightStr = useRound ? `round(${h}, 1px)` : `calc(${h})`;\n\n if (!mustFlip || viewport.rotation % 180 === 0) {\n style.width = widthStr;\n style.height = heightStr;\n } else {\n style.width = heightStr;\n style.height = widthStr;\n }\n }\n\n if (mustRotate) {\n div.setAttribute(\"data-main-rotation\", viewport.rotation);\n }\n}\n\nexport {\n deprecated,\n DOMCanvasFactory,\n DOMCMapReaderFactory,\n DOMFilterFactory,\n DOMStandardFontDataFactory,\n DOMSVGFactory,\n fetchData,\n getColorValues,\n getCurrentTransform,\n getCurrentTransformInverse,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n getRGB,\n getXfaPageViewport,\n isDataScheme,\n isPdfFile,\n isValidFetchUrl,\n noContextMenu,\n PageViewport,\n PDFDateString,\n PixelsPerInch,\n RenderingCancelledException,\n setLayerDimensions,\n StatTimer,\n};\n","/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu } from \"../display_utils.js\";\n\nclass EditorToolbar {\n #toolbar = null;\n\n #colorPicker = null;\n\n #editor;\n\n #buttons = null;\n\n constructor(editor) {\n this.#editor = editor;\n }\n\n render() {\n const editToolbar = (this.#toolbar = document.createElement(\"div\"));\n editToolbar.className = \"editToolbar\";\n editToolbar.setAttribute(\"role\", \"toolbar\");\n editToolbar.addEventListener(\"contextmenu\", noContextMenu);\n editToolbar.addEventListener(\"pointerdown\", EditorToolbar.#pointerDown);\n\n const buttons = (this.#buttons = document.createElement(\"div\"));\n buttons.className = \"buttons\";\n editToolbar.append(buttons);\n\n const position = this.#editor.toolbarPosition;\n if (position) {\n const { style } = editToolbar;\n const x =\n this.#editor._uiManager.direction === \"ltr\"\n ? 1 - position[0]\n : position[0];\n style.insetInlineEnd = `${100 * x}%`;\n style.top = `calc(${\n 100 * position[1]\n }% + var(--editor-toolbar-vert-offset))`;\n }\n\n this.#addDeleteButton();\n\n return editToolbar;\n }\n\n static #pointerDown(e) {\n e.stopPropagation();\n }\n\n #focusIn(e) {\n this.#editor._focusEventsAllowed = false;\n e.preventDefault();\n e.stopPropagation();\n }\n\n #focusOut(e) {\n this.#editor._focusEventsAllowed = true;\n e.preventDefault();\n e.stopPropagation();\n }\n\n #addListenersToElement(element) {\n // If we're clicking on a button with the keyboard or with\n // the mouse, we don't want to trigger any focus events on\n // the editor.\n element.addEventListener(\"focusin\", this.#focusIn.bind(this), {\n capture: true,\n });\n element.addEventListener(\"focusout\", this.#focusOut.bind(this), {\n capture: true,\n });\n element.addEventListener(\"contextmenu\", noContextMenu);\n }\n\n hide() {\n this.#toolbar.classList.add(\"hidden\");\n this.#colorPicker?.hideDropdown();\n }\n\n show() {\n this.#toolbar.classList.remove(\"hidden\");\n }\n\n #addDeleteButton() {\n const button = document.createElement(\"button\");\n button.className = \"delete\";\n button.tabIndex = 0;\n button.setAttribute(\n \"data-l10n-id\",\n `pdfjs-editor-remove-${this.#editor.editorType}-button`\n );\n this.#addListenersToElement(button);\n button.addEventListener(\"click\", e => {\n this.#editor._uiManager.delete();\n });\n this.#buttons.append(button);\n }\n\n get #divider() {\n const divider = document.createElement(\"div\");\n divider.className = \"divider\";\n return divider;\n }\n\n addAltTextButton(button) {\n this.#addListenersToElement(button);\n this.#buttons.prepend(button, this.#divider);\n }\n\n addColorPicker(colorPicker) {\n this.#colorPicker = colorPicker;\n const button = colorPicker.renderButton();\n this.#addListenersToElement(button);\n this.#buttons.prepend(button, this.#divider);\n }\n\n remove() {\n this.#toolbar.remove();\n this.#colorPicker?.destroy();\n this.#colorPicker = null;\n }\n}\n\nclass HighlightToolbar {\n #buttons = null;\n\n #toolbar = null;\n\n #uiManager;\n\n constructor(uiManager) {\n this.#uiManager = uiManager;\n }\n\n #render() {\n const editToolbar = (this.#toolbar = document.createElement(\"div\"));\n editToolbar.className = \"editToolbar\";\n editToolbar.setAttribute(\"role\", \"toolbar\");\n editToolbar.addEventListener(\"contextmenu\", noContextMenu);\n\n const buttons = (this.#buttons = document.createElement(\"div\"));\n buttons.className = \"buttons\";\n editToolbar.append(buttons);\n\n this.#addHighlightButton();\n\n return editToolbar;\n }\n\n #getLastPoint(boxes, isLTR) {\n let lastY = 0;\n let lastX = 0;\n for (const box of boxes) {\n const y = box.y + box.height;\n if (y < lastY) {\n continue;\n }\n const x = box.x + (isLTR ? box.width : 0);\n if (y > lastY) {\n lastX = x;\n lastY = y;\n continue;\n }\n if (isLTR) {\n if (x > lastX) {\n lastX = x;\n }\n } else if (x < lastX) {\n lastX = x;\n }\n }\n return [isLTR ? 1 - lastX : lastX, lastY];\n }\n\n show(parent, boxes, isLTR) {\n const [x, y] = this.#getLastPoint(boxes, isLTR);\n const { style } = (this.#toolbar ||= this.#render());\n parent.append(this.#toolbar);\n style.insetInlineEnd = `${100 * x}%`;\n style.top = `calc(${100 * y}% + var(--editor-toolbar-vert-offset))`;\n }\n\n hide() {\n this.#toolbar.remove();\n }\n\n #addHighlightButton() {\n const button = document.createElement(\"button\");\n button.className = \"highlightButton\";\n button.tabIndex = 0;\n button.setAttribute(\"data-l10n-id\", `pdfjs-highlight-floating-button1`);\n const span = document.createElement(\"span\");\n button.append(span);\n span.className = \"visuallyHidden\";\n span.setAttribute(\"data-l10n-id\", \"pdfjs-highlight-floating-button-label\");\n button.addEventListener(\"contextmenu\", noContextMenu);\n button.addEventListener(\"click\", () => {\n this.#uiManager.highlightSelection(\"floating_button\");\n });\n this.#buttons.append(button);\n }\n}\n\nexport { EditorToolbar, HighlightToolbar };\n","/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./editor.js\").AnnotationEditor} AnnotationEditor */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./annotation_editor_layer.js\").AnnotationEditorLayer} AnnotationEditorLayer */\n\nimport {\n AnnotationEditorParamsType,\n AnnotationEditorPrefix,\n AnnotationEditorType,\n FeatureTest,\n getUuid,\n shadow,\n Util,\n warn,\n} from \"../../shared/util.js\";\nimport {\n fetchData,\n getColorValues,\n getRGB,\n PixelsPerInch,\n} from \"../display_utils.js\";\nimport { HighlightToolbar } from \"./toolbar.js\";\n\nfunction bindEvents(obj, element, names) {\n for (const name of names) {\n element.addEventListener(name, obj[name].bind(obj));\n }\n}\n\n/**\n * Convert a number between 0 and 100 into an hex number between 0 and 255.\n * @param {number} opacity\n * @return {string}\n */\nfunction opacityToHex(opacity) {\n return Math.round(Math.min(255, Math.max(1, 255 * opacity)))\n .toString(16)\n .padStart(2, \"0\");\n}\n\n/**\n * Class to create some unique ids for the different editors.\n */\nclass IdManager {\n #id = 0;\n\n constructor() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n Object.defineProperty(this, \"reset\", {\n value: () => (this.#id = 0),\n });\n }\n }\n\n /**\n * Get a unique id.\n * @returns {string}\n */\n get id() {\n return `${AnnotationEditorPrefix}${this.#id++}`;\n }\n}\n\n/**\n * Class to manage the images used by the editors.\n * The main idea is to try to minimize the memory used by the images.\n * The images are cached and reused when possible\n * We use a refCounter to know when an image is not used anymore but we need to\n * be able to restore an image after a remove+undo, so we keep a file reference\n * or an url one.\n */\nclass ImageManager {\n #baseId = getUuid();\n\n #id = 0;\n\n #cache = null;\n\n static get _isSVGFittingCanvas() {\n // By default, Firefox doesn't rescale without preserving the aspect ratio\n // when drawing an SVG image on a canvas, see https://bugzilla.mozilla.org/1547776.\n // The \"workaround\" is to append \"svgView(preserveAspectRatio(none))\" to the\n // url, but according to comment #15, it seems that it leads to unexpected\n // behavior in Safari.\n const svg = `data:image/svg+xml;charset=UTF-8,`;\n const canvas = new OffscreenCanvas(1, 3);\n const ctx = canvas.getContext(\"2d\");\n const image = new Image();\n image.src = svg;\n const promise = image.decode().then(() => {\n ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3);\n return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0;\n });\n\n return shadow(this, \"_isSVGFittingCanvas\", promise);\n }\n\n async #get(key, rawData) {\n this.#cache ||= new Map();\n let data = this.#cache.get(key);\n if (data === null) {\n // We already tried to load the image but it failed.\n return null;\n }\n if (data?.bitmap) {\n data.refCounter += 1;\n return data;\n }\n try {\n data ||= {\n bitmap: null,\n id: `image_${this.#baseId}_${this.#id++}`,\n refCounter: 0,\n isSvg: false,\n };\n let image;\n if (typeof rawData === \"string\") {\n data.url = rawData;\n image = await fetchData(rawData, \"blob\");\n } else {\n image = data.file = rawData;\n }\n\n if (image.type === \"image/svg+xml\") {\n // Unfortunately, createImageBitmap doesn't work with SVG images.\n // (see https://bugzilla.mozilla.org/1841972).\n const mustRemoveAspectRatioPromise = ImageManager._isSVGFittingCanvas;\n const fileReader = new FileReader();\n const imageElement = new Image();\n const imagePromise = new Promise((resolve, reject) => {\n imageElement.onload = () => {\n data.bitmap = imageElement;\n data.isSvg = true;\n resolve();\n };\n fileReader.onload = async () => {\n const url = (data.svgUrl = fileReader.result);\n // We need to set the preserveAspectRatio to none in order to let\n // the image fits the canvas when resizing.\n imageElement.src = (await mustRemoveAspectRatioPromise)\n ? `${url}#svgView(preserveAspectRatio(none))`\n : url;\n };\n imageElement.onerror = fileReader.onerror = reject;\n });\n fileReader.readAsDataURL(image);\n await imagePromise;\n } else {\n data.bitmap = await createImageBitmap(image);\n }\n data.refCounter = 1;\n } catch (e) {\n console.error(e);\n data = null;\n }\n this.#cache.set(key, data);\n if (data) {\n this.#cache.set(data.id, data);\n }\n return data;\n }\n\n async getFromFile(file) {\n const { lastModified, name, size, type } = file;\n return this.#get(`${lastModified}_${name}_${size}_${type}`, file);\n }\n\n async getFromUrl(url) {\n return this.#get(url, url);\n }\n\n async getFromId(id) {\n this.#cache ||= new Map();\n const data = this.#cache.get(id);\n if (!data) {\n return null;\n }\n if (data.bitmap) {\n data.refCounter += 1;\n return data;\n }\n\n if (data.file) {\n return this.getFromFile(data.file);\n }\n return this.getFromUrl(data.url);\n }\n\n getSvgUrl(id) {\n const data = this.#cache.get(id);\n if (!data?.isSvg) {\n return null;\n }\n return data.svgUrl;\n }\n\n deleteId(id) {\n this.#cache ||= new Map();\n const data = this.#cache.get(id);\n if (!data) {\n return;\n }\n data.refCounter -= 1;\n if (data.refCounter !== 0) {\n return;\n }\n data.bitmap = null;\n }\n\n // We can use the id only if it belongs this manager.\n // We must take care of having the right manager because we can copy/paste\n // some images from other documents, hence it'd be a pity to use an id from an\n // other manager.\n isValidId(id) {\n return id.startsWith(`image_${this.#baseId}_`);\n }\n}\n\n/**\n * Class to handle undo/redo.\n * Commands are just saved in a buffer.\n * If we hit some memory issues we could likely use a circular buffer.\n * It has to be used as a singleton.\n */\nclass CommandManager {\n #commands = [];\n\n #locked = false;\n\n #maxSize;\n\n #position = -1;\n\n constructor(maxSize = 128) {\n this.#maxSize = maxSize;\n }\n\n /**\n * @typedef {Object} addOptions\n * @property {function} cmd\n * @property {function} undo\n * @property {function} [post]\n * @property {boolean} mustExec\n * @property {number} type\n * @property {boolean} overwriteIfSameType\n * @property {boolean} keepUndo\n */\n\n /**\n * Add a new couple of commands to be used in case of redo/undo.\n * @param {addOptions} options\n */\n add({\n cmd,\n undo,\n post,\n mustExec,\n type = NaN,\n overwriteIfSameType = false,\n keepUndo = false,\n }) {\n if (mustExec) {\n cmd();\n }\n\n if (this.#locked) {\n return;\n }\n\n const save = { cmd, undo, post, type };\n if (this.#position === -1) {\n if (this.#commands.length > 0) {\n // All the commands have been undone and then a new one is added\n // hence we clear the queue.\n this.#commands.length = 0;\n }\n this.#position = 0;\n this.#commands.push(save);\n return;\n }\n\n if (overwriteIfSameType && this.#commands[this.#position].type === type) {\n // For example when we change a color we don't want to\n // be able to undo all the steps, hence we only want to\n // keep the last undoable action in this sequence of actions.\n if (keepUndo) {\n save.undo = this.#commands[this.#position].undo;\n }\n this.#commands[this.#position] = save;\n return;\n }\n\n const next = this.#position + 1;\n if (next === this.#maxSize) {\n this.#commands.splice(0, 1);\n } else {\n this.#position = next;\n if (next < this.#commands.length) {\n this.#commands.splice(next);\n }\n }\n\n this.#commands.push(save);\n }\n\n /**\n * Undo the last command.\n */\n undo() {\n if (this.#position === -1) {\n // Nothing to undo.\n return;\n }\n\n // Avoid to insert something during the undo execution.\n this.#locked = true;\n const { undo, post } = this.#commands[this.#position];\n undo();\n post?.();\n this.#locked = false;\n\n this.#position -= 1;\n }\n\n /**\n * Redo the last command.\n */\n redo() {\n if (this.#position < this.#commands.length - 1) {\n this.#position += 1;\n\n // Avoid to insert something during the redo execution.\n this.#locked = true;\n const { cmd, post } = this.#commands[this.#position];\n cmd();\n post?.();\n this.#locked = false;\n }\n }\n\n /**\n * Check if there is something to undo.\n * @returns {boolean}\n */\n hasSomethingToUndo() {\n return this.#position !== -1;\n }\n\n /**\n * Check if there is something to redo.\n * @returns {boolean}\n */\n hasSomethingToRedo() {\n return this.#position < this.#commands.length - 1;\n }\n\n destroy() {\n this.#commands = null;\n }\n}\n\n/**\n * Class to handle the different keyboards shortcuts we can have on mac or\n * non-mac OSes.\n */\nclass KeyboardManager {\n /**\n * Create a new keyboard manager class.\n * @param {Array} callbacks - an array containing an array of shortcuts\n * and a callback to call.\n * A shortcut is a string like `ctrl+c` or `mac+ctrl+c` for mac OS.\n */\n constructor(callbacks) {\n this.buffer = [];\n this.callbacks = new Map();\n this.allKeys = new Set();\n\n const { isMac } = FeatureTest.platform;\n for (const [keys, callback, options = {}] of callbacks) {\n for (const key of keys) {\n const isMacKey = key.startsWith(\"mac+\");\n if (isMac && isMacKey) {\n this.callbacks.set(key.slice(4), { callback, options });\n this.allKeys.add(key.split(\"+\").at(-1));\n } else if (!isMac && !isMacKey) {\n this.callbacks.set(key, { callback, options });\n this.allKeys.add(key.split(\"+\").at(-1));\n }\n }\n }\n }\n\n /**\n * Serialize an event into a string in order to match a\n * potential key for a callback.\n * @param {KeyboardEvent} event\n * @returns {string}\n */\n #serialize(event) {\n if (event.altKey) {\n this.buffer.push(\"alt\");\n }\n if (event.ctrlKey) {\n this.buffer.push(\"ctrl\");\n }\n if (event.metaKey) {\n this.buffer.push(\"meta\");\n }\n if (event.shiftKey) {\n this.buffer.push(\"shift\");\n }\n this.buffer.push(event.key);\n const str = this.buffer.join(\"+\");\n this.buffer.length = 0;\n\n return str;\n }\n\n /**\n * Execute a callback, if any, for a given keyboard event.\n * The self is used as `this` in the callback.\n * @param {Object} self\n * @param {KeyboardEvent} event\n * @returns\n */\n exec(self, event) {\n if (!this.allKeys.has(event.key)) {\n return;\n }\n const info = this.callbacks.get(this.#serialize(event));\n if (!info) {\n return;\n }\n const {\n callback,\n options: { bubbles = false, args = [], checker = null },\n } = info;\n\n if (checker && !checker(self, event)) {\n return;\n }\n callback.bind(self, ...args, event)();\n\n // For example, ctrl+s in a FreeText must be handled by the viewer, hence\n // the event must bubble.\n if (!bubbles) {\n event.stopPropagation();\n event.preventDefault();\n }\n }\n}\n\nclass ColorManager {\n static _colorsMapping = new Map([\n [\"CanvasText\", [0, 0, 0]],\n [\"Canvas\", [255, 255, 255]],\n ]);\n\n get _colors() {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof document === \"undefined\"\n ) {\n return shadow(this, \"_colors\", ColorManager._colorsMapping);\n }\n\n const colors = new Map([\n [\"CanvasText\", null],\n [\"Canvas\", null],\n ]);\n getColorValues(colors);\n return shadow(this, \"_colors\", colors);\n }\n\n /**\n * In High Contrast Mode, the color on the screen is not always the\n * real color used in the pdf.\n * For example in some cases white can appear to be black but when saving\n * we want to have white.\n * @param {string} color\n * @returns {Array}\n */\n convert(color) {\n const rgb = getRGB(color);\n if (!window.matchMedia(\"(forced-colors: active)\").matches) {\n return rgb;\n }\n\n for (const [name, RGB] of this._colors) {\n if (RGB.every((x, i) => x === rgb[i])) {\n return ColorManager._colorsMapping.get(name);\n }\n }\n return rgb;\n }\n\n /**\n * An input element must have its color value as a hex string\n * and not as color name.\n * So this function converts a name into an hex string.\n * @param {string} name\n * @returns {string}\n */\n getHexCode(name) {\n const rgb = this._colors.get(name);\n if (!rgb) {\n return name;\n }\n return Util.makeHexColor(...rgb);\n }\n}\n\n/**\n * A pdf has several pages and each of them when it will rendered\n * will have an AnnotationEditorLayer which will contain the some\n * new Annotations associated to an editor in order to modify them.\n *\n * This class is used to manage all the different layers, editors and\n * some action like copy/paste, undo/redo, ...\n */\nclass AnnotationEditorUIManager {\n #activeEditor = null;\n\n #allEditors = new Map();\n\n #allLayers = new Map();\n\n #altTextManager = null;\n\n #annotationStorage = null;\n\n #changedExistingAnnotations = null;\n\n #commandManager = new CommandManager();\n\n #currentPageIndex = 0;\n\n #deletedAnnotationsElementIds = new Set();\n\n #draggingEditors = null;\n\n #editorTypes = null;\n\n #editorsToRescale = new Set();\n\n #enableHighlightFloatingButton = false;\n\n #filterFactory = null;\n\n #focusMainContainerTimeoutId = null;\n\n #highlightColors = null;\n\n #highlightWhenShiftUp = false;\n\n #highlightToolbar = null;\n\n #idManager = new IdManager();\n\n #isEnabled = false;\n\n #isWaiting = false;\n\n #lastActiveElement = null;\n\n #mainHighlightColorPicker = null;\n\n #mlManager = null;\n\n #mode = AnnotationEditorType.NONE;\n\n #selectedEditors = new Set();\n\n #selectedTextNode = null;\n\n #pageColors = null;\n\n #showAllStates = null;\n\n #boundBlur = this.blur.bind(this);\n\n #boundFocus = this.focus.bind(this);\n\n #boundCopy = this.copy.bind(this);\n\n #boundCut = this.cut.bind(this);\n\n #boundPaste = this.paste.bind(this);\n\n #boundKeydown = this.keydown.bind(this);\n\n #boundKeyup = this.keyup.bind(this);\n\n #boundOnEditingAction = this.onEditingAction.bind(this);\n\n #boundOnPageChanging = this.onPageChanging.bind(this);\n\n #boundOnScaleChanging = this.onScaleChanging.bind(this);\n\n #boundSelectionChange = this.#selectionChange.bind(this);\n\n #boundOnRotationChanging = this.onRotationChanging.bind(this);\n\n #previousStates = {\n isEditing: false,\n isEmpty: true,\n hasSomethingToUndo: false,\n hasSomethingToRedo: false,\n hasSelectedEditor: false,\n hasSelectedText: false,\n };\n\n #translation = [0, 0];\n\n #translationTimeoutId = null;\n\n #container = null;\n\n #viewer = null;\n\n static TRANSLATE_SMALL = 1; // page units.\n\n static TRANSLATE_BIG = 10; // page units.\n\n static get _keyboardManager() {\n const proto = AnnotationEditorUIManager.prototype;\n\n /**\n * If the focused element is an input, we don't want to handle the arrow.\n * For example, sliders can be controlled with the arrow keys.\n */\n const arrowChecker = self =>\n self.#container.contains(document.activeElement) &&\n document.activeElement.tagName !== \"BUTTON\" &&\n self.hasSomethingToControl();\n\n const textInputChecker = (_self, { target: el }) => {\n if (el instanceof HTMLInputElement) {\n const { type } = el;\n return type !== \"text\" && type !== \"number\";\n }\n return true;\n };\n\n const small = this.TRANSLATE_SMALL;\n const big = this.TRANSLATE_BIG;\n\n return shadow(\n this,\n \"_keyboardManager\",\n new KeyboardManager([\n [\n [\"ctrl+a\", \"mac+meta+a\"],\n proto.selectAll,\n { checker: textInputChecker },\n ],\n [[\"ctrl+z\", \"mac+meta+z\"], proto.undo, { checker: textInputChecker }],\n [\n // On mac, depending of the OS version, the event.key is either \"z\" or\n // \"Z\" when the user presses \"meta+shift+z\".\n [\n \"ctrl+y\",\n \"ctrl+shift+z\",\n \"mac+meta+shift+z\",\n \"ctrl+shift+Z\",\n \"mac+meta+shift+Z\",\n ],\n proto.redo,\n { checker: textInputChecker },\n ],\n [\n [\n \"Backspace\",\n \"alt+Backspace\",\n \"ctrl+Backspace\",\n \"shift+Backspace\",\n \"mac+Backspace\",\n \"mac+alt+Backspace\",\n \"mac+ctrl+Backspace\",\n \"Delete\",\n \"ctrl+Delete\",\n \"shift+Delete\",\n \"mac+Delete\",\n ],\n proto.delete,\n { checker: textInputChecker },\n ],\n [\n [\"Enter\", \"mac+Enter\"],\n proto.addNewEditorFromKeyboard,\n {\n // Those shortcuts can be used in the toolbar for some other actions\n // like zooming, hence we need to check if the container has the\n // focus.\n checker: (self, { target: el }) =>\n !(el instanceof HTMLButtonElement) &&\n self.#container.contains(el) &&\n !self.isEnterHandled,\n },\n ],\n [\n [\" \", \"mac+ \"],\n proto.addNewEditorFromKeyboard,\n {\n // Those shortcuts can be used in the toolbar for some other actions\n // like zooming, hence we need to check if the container has the\n // focus.\n checker: (self, { target: el }) =>\n !(el instanceof HTMLButtonElement) &&\n self.#container.contains(document.activeElement),\n },\n ],\n [[\"Escape\", \"mac+Escape\"], proto.unselectAll],\n [\n [\"ArrowLeft\", \"mac+ArrowLeft\"],\n proto.translateSelectedEditors,\n { args: [-small, 0], checker: arrowChecker },\n ],\n [\n [\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"],\n proto.translateSelectedEditors,\n { args: [-big, 0], checker: arrowChecker },\n ],\n [\n [\"ArrowRight\", \"mac+ArrowRight\"],\n proto.translateSelectedEditors,\n { args: [small, 0], checker: arrowChecker },\n ],\n [\n [\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"],\n proto.translateSelectedEditors,\n { args: [big, 0], checker: arrowChecker },\n ],\n [\n [\"ArrowUp\", \"mac+ArrowUp\"],\n proto.translateSelectedEditors,\n { args: [0, -small], checker: arrowChecker },\n ],\n [\n [\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"],\n proto.translateSelectedEditors,\n { args: [0, -big], checker: arrowChecker },\n ],\n [\n [\"ArrowDown\", \"mac+ArrowDown\"],\n proto.translateSelectedEditors,\n { args: [0, small], checker: arrowChecker },\n ],\n [\n [\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"],\n proto.translateSelectedEditors,\n { args: [0, big], checker: arrowChecker },\n ],\n ])\n );\n }\n\n constructor(\n container,\n viewer,\n altTextManager,\n eventBus,\n pdfDocument,\n pageColors,\n highlightColors,\n enableHighlightFloatingButton,\n mlManager\n ) {\n this.#container = container;\n this.#viewer = viewer;\n this.#altTextManager = altTextManager;\n this._eventBus = eventBus;\n this._eventBus._on(\"editingaction\", this.#boundOnEditingAction);\n this._eventBus._on(\"pagechanging\", this.#boundOnPageChanging);\n this._eventBus._on(\"scalechanging\", this.#boundOnScaleChanging);\n this._eventBus._on(\"rotationchanging\", this.#boundOnRotationChanging);\n this.#addSelectionListener();\n this.#addKeyboardManager();\n this.#annotationStorage = pdfDocument.annotationStorage;\n this.#filterFactory = pdfDocument.filterFactory;\n this.#pageColors = pageColors;\n this.#highlightColors = highlightColors || null;\n this.#enableHighlightFloatingButton = enableHighlightFloatingButton;\n this.#mlManager = mlManager || null;\n this.viewParameters = {\n realScale: PixelsPerInch.PDF_TO_CSS_UNITS,\n rotation: 0,\n };\n this.isShiftKeyDown = false;\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n Object.defineProperty(this, \"reset\", {\n value: () => {\n this.selectAll();\n this.delete();\n this.#idManager.reset();\n },\n });\n }\n }\n\n destroy() {\n this.#removeKeyboardManager();\n this.#removeFocusManager();\n this._eventBus._off(\"editingaction\", this.#boundOnEditingAction);\n this._eventBus._off(\"pagechanging\", this.#boundOnPageChanging);\n this._eventBus._off(\"scalechanging\", this.#boundOnScaleChanging);\n this._eventBus._off(\"rotationchanging\", this.#boundOnRotationChanging);\n for (const layer of this.#allLayers.values()) {\n layer.destroy();\n }\n this.#allLayers.clear();\n this.#allEditors.clear();\n this.#editorsToRescale.clear();\n this.#activeEditor = null;\n this.#selectedEditors.clear();\n this.#commandManager.destroy();\n this.#altTextManager?.destroy();\n this.#highlightToolbar?.hide();\n this.#highlightToolbar = null;\n if (this.#focusMainContainerTimeoutId) {\n clearTimeout(this.#focusMainContainerTimeoutId);\n this.#focusMainContainerTimeoutId = null;\n }\n if (this.#translationTimeoutId) {\n clearTimeout(this.#translationTimeoutId);\n this.#translationTimeoutId = null;\n }\n this.#removeSelectionListener();\n }\n\n async mlGuess(data) {\n return this.#mlManager?.guess(data) || null;\n }\n\n get hasMLManager() {\n return !!this.#mlManager;\n }\n\n get hcmFilter() {\n return shadow(\n this,\n \"hcmFilter\",\n this.#pageColors\n ? this.#filterFactory.addHCMFilter(\n this.#pageColors.foreground,\n this.#pageColors.background\n )\n : \"none\"\n );\n }\n\n get direction() {\n return shadow(\n this,\n \"direction\",\n getComputedStyle(this.#container).direction\n );\n }\n\n get highlightColors() {\n return shadow(\n this,\n \"highlightColors\",\n this.#highlightColors\n ? new Map(\n this.#highlightColors\n .split(\",\")\n .map(pair => pair.split(\"=\").map(x => x.trim()))\n )\n : null\n );\n }\n\n get highlightColorNames() {\n return shadow(\n this,\n \"highlightColorNames\",\n this.highlightColors\n ? new Map(Array.from(this.highlightColors, e => e.reverse()))\n : null\n );\n }\n\n setMainHighlightColorPicker(colorPicker) {\n this.#mainHighlightColorPicker = colorPicker;\n }\n\n editAltText(editor) {\n this.#altTextManager?.editAltText(this, editor);\n }\n\n onPageChanging({ pageNumber }) {\n this.#currentPageIndex = pageNumber - 1;\n }\n\n focusMainContainer() {\n this.#container.focus();\n }\n\n findParent(x, y) {\n for (const layer of this.#allLayers.values()) {\n const {\n x: layerX,\n y: layerY,\n width,\n height,\n } = layer.div.getBoundingClientRect();\n if (\n x >= layerX &&\n x <= layerX + width &&\n y >= layerY &&\n y <= layerY + height\n ) {\n return layer;\n }\n }\n return null;\n }\n\n disableUserSelect(value = false) {\n this.#viewer.classList.toggle(\"noUserSelect\", value);\n }\n\n addShouldRescale(editor) {\n this.#editorsToRescale.add(editor);\n }\n\n removeShouldRescale(editor) {\n this.#editorsToRescale.delete(editor);\n }\n\n onScaleChanging({ scale }) {\n this.commitOrRemove();\n this.viewParameters.realScale = scale * PixelsPerInch.PDF_TO_CSS_UNITS;\n for (const editor of this.#editorsToRescale) {\n editor.onScaleChanging();\n }\n }\n\n onRotationChanging({ pagesRotation }) {\n this.commitOrRemove();\n this.viewParameters.rotation = pagesRotation;\n }\n\n #getAnchorElementForSelection({ anchorNode }) {\n return anchorNode.nodeType === Node.TEXT_NODE\n ? anchorNode.parentElement\n : anchorNode;\n }\n\n highlightSelection(methodOfCreation = \"\") {\n const selection = document.getSelection();\n if (!selection || selection.isCollapsed) {\n return;\n }\n const { anchorNode, anchorOffset, focusNode, focusOffset } = selection;\n const text = selection.toString();\n const anchorElement = this.#getAnchorElementForSelection(selection);\n const textLayer = anchorElement.closest(\".textLayer\");\n const boxes = this.getSelectionBoxes(textLayer);\n if (!boxes) {\n return;\n }\n selection.empty();\n if (this.#mode === AnnotationEditorType.NONE) {\n this._eventBus.dispatch(\"showannotationeditorui\", {\n source: this,\n mode: AnnotationEditorType.HIGHLIGHT,\n });\n this.showAllEditors(\"highlight\", true, /* updateButton = */ true);\n }\n for (const layer of this.#allLayers.values()) {\n if (layer.hasTextLayer(textLayer)) {\n layer.createAndAddNewEditor({ x: 0, y: 0 }, false, {\n methodOfCreation,\n boxes,\n anchorNode,\n anchorOffset,\n focusNode,\n focusOffset,\n text,\n });\n break;\n }\n }\n }\n\n #displayHighlightToolbar() {\n const selection = document.getSelection();\n if (!selection || selection.isCollapsed) {\n return;\n }\n const anchorElement = this.#getAnchorElementForSelection(selection);\n const textLayer = anchorElement.closest(\".textLayer\");\n const boxes = this.getSelectionBoxes(textLayer);\n if (!boxes) {\n return;\n }\n this.#highlightToolbar ||= new HighlightToolbar(this);\n this.#highlightToolbar.show(textLayer, boxes, this.direction === \"ltr\");\n }\n\n /**\n * Add an editor in the annotation storage.\n * @param {AnnotationEditor} editor\n */\n addToAnnotationStorage(editor) {\n if (\n !editor.isEmpty() &&\n this.#annotationStorage &&\n !this.#annotationStorage.has(editor.id)\n ) {\n this.#annotationStorage.setValue(editor.id, editor);\n }\n }\n\n #selectionChange() {\n const selection = document.getSelection();\n if (!selection || selection.isCollapsed) {\n if (this.#selectedTextNode) {\n this.#highlightToolbar?.hide();\n this.#selectedTextNode = null;\n this.#dispatchUpdateStates({\n hasSelectedText: false,\n });\n }\n return;\n }\n const { anchorNode } = selection;\n if (anchorNode === this.#selectedTextNode) {\n return;\n }\n\n const anchorElement = this.#getAnchorElementForSelection(selection);\n const textLayer = anchorElement.closest(\".textLayer\");\n if (!textLayer) {\n if (this.#selectedTextNode) {\n this.#highlightToolbar?.hide();\n this.#selectedTextNode = null;\n this.#dispatchUpdateStates({\n hasSelectedText: false,\n });\n }\n return;\n }\n this.#highlightToolbar?.hide();\n this.#selectedTextNode = anchorNode;\n this.#dispatchUpdateStates({\n hasSelectedText: true,\n });\n\n if (\n this.#mode !== AnnotationEditorType.HIGHLIGHT &&\n this.#mode !== AnnotationEditorType.NONE\n ) {\n return;\n }\n\n if (this.#mode === AnnotationEditorType.HIGHLIGHT) {\n this.showAllEditors(\"highlight\", true, /* updateButton = */ true);\n }\n\n this.#highlightWhenShiftUp = this.isShiftKeyDown;\n if (!this.isShiftKeyDown) {\n const pointerup = e => {\n if (e.type === \"pointerup\" && e.button !== 0) {\n // Do nothing on right click.\n return;\n }\n window.removeEventListener(\"pointerup\", pointerup);\n window.removeEventListener(\"blur\", pointerup);\n if (e.type === \"pointerup\") {\n this.#onSelectEnd(\"main_toolbar\");\n }\n };\n window.addEventListener(\"pointerup\", pointerup);\n window.addEventListener(\"blur\", pointerup);\n }\n }\n\n #onSelectEnd(methodOfCreation = \"\") {\n if (this.#mode === AnnotationEditorType.HIGHLIGHT) {\n this.highlightSelection(methodOfCreation);\n } else if (this.#enableHighlightFloatingButton) {\n this.#displayHighlightToolbar();\n }\n }\n\n #addSelectionListener() {\n document.addEventListener(\"selectionchange\", this.#boundSelectionChange);\n }\n\n #removeSelectionListener() {\n document.removeEventListener(\"selectionchange\", this.#boundSelectionChange);\n }\n\n #addFocusManager() {\n window.addEventListener(\"focus\", this.#boundFocus);\n window.addEventListener(\"blur\", this.#boundBlur);\n }\n\n #removeFocusManager() {\n window.removeEventListener(\"focus\", this.#boundFocus);\n window.removeEventListener(\"blur\", this.#boundBlur);\n }\n\n blur() {\n this.isShiftKeyDown = false;\n if (this.#highlightWhenShiftUp) {\n this.#highlightWhenShiftUp = false;\n this.#onSelectEnd(\"main_toolbar\");\n }\n if (!this.hasSelection) {\n return;\n }\n // When several editors are selected and the window loses focus, we want to\n // keep the last active element in order to be able to focus it again when\n // the window gets the focus back but we don't want to trigger any focus\n // callbacks else only one editor will be selected.\n const { activeElement } = document;\n for (const editor of this.#selectedEditors) {\n if (editor.div.contains(activeElement)) {\n this.#lastActiveElement = [editor, activeElement];\n editor._focusEventsAllowed = false;\n break;\n }\n }\n }\n\n focus() {\n if (!this.#lastActiveElement) {\n return;\n }\n const [lastEditor, lastActiveElement] = this.#lastActiveElement;\n this.#lastActiveElement = null;\n lastActiveElement.addEventListener(\n \"focusin\",\n () => {\n lastEditor._focusEventsAllowed = true;\n },\n { once: true }\n );\n lastActiveElement.focus();\n }\n\n #addKeyboardManager() {\n // The keyboard events are caught at the container level in order to be able\n // to execute some callbacks even if the current page doesn't have focus.\n window.addEventListener(\"keydown\", this.#boundKeydown);\n window.addEventListener(\"keyup\", this.#boundKeyup);\n }\n\n #removeKeyboardManager() {\n window.removeEventListener(\"keydown\", this.#boundKeydown);\n window.removeEventListener(\"keyup\", this.#boundKeyup);\n }\n\n #addCopyPasteListeners() {\n document.addEventListener(\"copy\", this.#boundCopy);\n document.addEventListener(\"cut\", this.#boundCut);\n document.addEventListener(\"paste\", this.#boundPaste);\n }\n\n #removeCopyPasteListeners() {\n document.removeEventListener(\"copy\", this.#boundCopy);\n document.removeEventListener(\"cut\", this.#boundCut);\n document.removeEventListener(\"paste\", this.#boundPaste);\n }\n\n addEditListeners() {\n this.#addKeyboardManager();\n this.#addCopyPasteListeners();\n }\n\n removeEditListeners() {\n this.#removeKeyboardManager();\n this.#removeCopyPasteListeners();\n }\n\n /**\n * Copy callback.\n * @param {ClipboardEvent} event\n */\n copy(event) {\n event.preventDefault();\n\n // An editor is being edited so just commit it.\n this.#activeEditor?.commitOrRemove();\n\n if (!this.hasSelection) {\n return;\n }\n\n const editors = [];\n for (const editor of this.#selectedEditors) {\n const serialized = editor.serialize(/* isForCopying = */ true);\n if (serialized) {\n editors.push(serialized);\n }\n }\n if (editors.length === 0) {\n return;\n }\n\n event.clipboardData.setData(\"application/pdfjs\", JSON.stringify(editors));\n }\n\n /**\n * Cut callback.\n * @param {ClipboardEvent} event\n */\n cut(event) {\n this.copy(event);\n this.delete();\n }\n\n /**\n * Paste callback.\n * @param {ClipboardEvent} event\n */\n paste(event) {\n event.preventDefault();\n const { clipboardData } = event;\n for (const item of clipboardData.items) {\n for (const editorType of this.#editorTypes) {\n if (editorType.isHandlingMimeForPasting(item.type)) {\n editorType.paste(item, this.currentLayer);\n return;\n }\n }\n }\n\n let data = clipboardData.getData(\"application/pdfjs\");\n if (!data) {\n return;\n }\n\n try {\n data = JSON.parse(data);\n } catch (ex) {\n warn(`paste: \"${ex.message}\".`);\n return;\n }\n\n if (!Array.isArray(data)) {\n return;\n }\n\n this.unselectAll();\n const layer = this.currentLayer;\n\n try {\n const newEditors = [];\n for (const editor of data) {\n const deserializedEditor = layer.deserialize(editor);\n if (!deserializedEditor) {\n return;\n }\n newEditors.push(deserializedEditor);\n }\n\n const cmd = () => {\n for (const editor of newEditors) {\n this.#addEditorToLayer(editor);\n }\n this.#selectEditors(newEditors);\n };\n const undo = () => {\n for (const editor of newEditors) {\n editor.remove();\n }\n };\n this.addCommands({ cmd, undo, mustExec: true });\n } catch (ex) {\n warn(`paste: \"${ex.message}\".`);\n }\n }\n\n /**\n * Keydown callback.\n * @param {KeyboardEvent} event\n */\n keydown(event) {\n if (!this.isShiftKeyDown && event.key === \"Shift\") {\n this.isShiftKeyDown = true;\n }\n if (\n this.#mode !== AnnotationEditorType.NONE &&\n !this.isEditorHandlingKeyboard\n ) {\n AnnotationEditorUIManager._keyboardManager.exec(this, event);\n }\n }\n\n /**\n * Keyup callback.\n * @param {KeyboardEvent} event\n */\n keyup(event) {\n if (this.isShiftKeyDown && event.key === \"Shift\") {\n this.isShiftKeyDown = false;\n if (this.#highlightWhenShiftUp) {\n this.#highlightWhenShiftUp = false;\n this.#onSelectEnd(\"main_toolbar\");\n }\n }\n }\n\n /**\n * Execute an action for a given name.\n * For example, the user can click on the \"Undo\" entry in the context menu\n * and it'll trigger the undo action.\n */\n onEditingAction({ name }) {\n switch (name) {\n case \"undo\":\n case \"redo\":\n case \"delete\":\n case \"selectAll\":\n this[name]();\n break;\n case \"highlightSelection\":\n this.highlightSelection(\"context_menu\");\n break;\n }\n }\n\n /**\n * Update the different possible states of this manager, e.g. is there\n * something to undo, redo, ...\n * @param {Object} details\n */\n #dispatchUpdateStates(details) {\n const hasChanged = Object.entries(details).some(\n ([key, value]) => this.#previousStates[key] !== value\n );\n\n if (hasChanged) {\n this._eventBus.dispatch(\"annotationeditorstateschanged\", {\n source: this,\n details: Object.assign(this.#previousStates, details),\n });\n // We could listen on our own event but it sounds like a bit weird and\n // it's a way to simpler to handle that stuff here instead of having to\n // add something in every place where an editor can be unselected.\n if (\n this.#mode === AnnotationEditorType.HIGHLIGHT &&\n details.hasSelectedEditor === false\n ) {\n this.#dispatchUpdateUI([\n [AnnotationEditorParamsType.HIGHLIGHT_FREE, true],\n ]);\n }\n }\n }\n\n #dispatchUpdateUI(details) {\n this._eventBus.dispatch(\"annotationeditorparamschanged\", {\n source: this,\n details,\n });\n }\n\n /**\n * Set the editing state.\n * It can be useful to temporarily disable it when the user is editing a\n * FreeText annotation.\n * @param {boolean} isEditing\n */\n setEditingState(isEditing) {\n if (isEditing) {\n this.#addFocusManager();\n this.#addCopyPasteListeners();\n this.#dispatchUpdateStates({\n isEditing: this.#mode !== AnnotationEditorType.NONE,\n isEmpty: this.#isEmpty(),\n hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),\n hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),\n hasSelectedEditor: false,\n });\n } else {\n this.#removeFocusManager();\n this.#removeCopyPasteListeners();\n this.#dispatchUpdateStates({\n isEditing: false,\n });\n this.disableUserSelect(false);\n }\n }\n\n registerEditorTypes(types) {\n if (this.#editorTypes) {\n return;\n }\n this.#editorTypes = types;\n for (const editorType of this.#editorTypes) {\n this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate);\n }\n }\n\n /**\n * Get an id.\n * @returns {string}\n */\n getId() {\n return this.#idManager.id;\n }\n\n get currentLayer() {\n return this.#allLayers.get(this.#currentPageIndex);\n }\n\n getLayer(pageIndex) {\n return this.#allLayers.get(pageIndex);\n }\n\n get currentPageIndex() {\n return this.#currentPageIndex;\n }\n\n /**\n * Add a new layer for a page which will contains the editors.\n * @param {AnnotationEditorLayer} layer\n */\n addLayer(layer) {\n this.#allLayers.set(layer.pageIndex, layer);\n if (this.#isEnabled) {\n layer.enable();\n } else {\n layer.disable();\n }\n }\n\n /**\n * Remove a layer.\n * @param {AnnotationEditorLayer} layer\n */\n removeLayer(layer) {\n this.#allLayers.delete(layer.pageIndex);\n }\n\n /**\n * Change the editor mode (None, FreeText, Ink, ...)\n * @param {number} mode\n * @param {string|null} editId\n * @param {boolean} [isFromKeyboard] - true if the mode change is due to a\n * keyboard action.\n */\n updateMode(mode, editId = null, isFromKeyboard = false) {\n if (this.#mode === mode) {\n return;\n }\n this.#mode = mode;\n if (mode === AnnotationEditorType.NONE) {\n this.setEditingState(false);\n this.#disableAll();\n return;\n }\n this.setEditingState(true);\n this.#enableAll();\n this.unselectAll();\n for (const layer of this.#allLayers.values()) {\n layer.updateMode(mode);\n }\n if (!editId && isFromKeyboard) {\n this.addNewEditorFromKeyboard();\n return;\n }\n\n if (!editId) {\n return;\n }\n for (const editor of this.#allEditors.values()) {\n if (editor.annotationElementId === editId) {\n this.setSelected(editor);\n editor.enterInEditMode();\n break;\n }\n }\n }\n\n addNewEditorFromKeyboard() {\n if (this.currentLayer.canCreateNewEmptyEditor()) {\n this.currentLayer.addNewEditor();\n }\n }\n\n /**\n * Update the toolbar if it's required to reflect the tool currently used.\n * @param {number} mode\n * @returns {undefined}\n */\n updateToolbar(mode) {\n if (mode === this.#mode) {\n return;\n }\n this._eventBus.dispatch(\"switchannotationeditormode\", {\n source: this,\n mode,\n });\n }\n\n /**\n * Update a parameter in the current editor or globally.\n * @param {number} type\n * @param {*} value\n */\n updateParams(type, value) {\n if (!this.#editorTypes) {\n return;\n }\n\n switch (type) {\n case AnnotationEditorParamsType.CREATE:\n this.currentLayer.addNewEditor();\n return;\n case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR:\n this.#mainHighlightColorPicker?.updateColor(value);\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:\n this._eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"editing\",\n data: {\n type: \"highlight\",\n action: \"toggle_visibility\",\n },\n },\n });\n (this.#showAllStates ||= new Map()).set(type, value);\n this.showAllEditors(\"highlight\", value);\n break;\n }\n\n for (const editor of this.#selectedEditors) {\n editor.updateParams(type, value);\n }\n\n for (const editorType of this.#editorTypes) {\n editorType.updateDefaultParams(type, value);\n }\n }\n\n showAllEditors(type, visible, updateButton = false) {\n for (const editor of this.#allEditors.values()) {\n if (editor.editorType === type) {\n editor.show(visible);\n }\n }\n const state =\n this.#showAllStates?.get(AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL) ??\n true;\n if (state !== visible) {\n this.#dispatchUpdateUI([\n [AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL, visible],\n ]);\n }\n }\n\n enableWaiting(mustWait = false) {\n if (this.#isWaiting === mustWait) {\n return;\n }\n this.#isWaiting = mustWait;\n for (const layer of this.#allLayers.values()) {\n if (mustWait) {\n layer.disableClick();\n } else {\n layer.enableClick();\n }\n layer.div.classList.toggle(\"waiting\", mustWait);\n }\n }\n\n /**\n * Enable all the layers.\n */\n #enableAll() {\n if (!this.#isEnabled) {\n this.#isEnabled = true;\n for (const layer of this.#allLayers.values()) {\n layer.enable();\n }\n for (const editor of this.#allEditors.values()) {\n editor.enable();\n }\n }\n }\n\n /**\n * Disable all the layers.\n */\n #disableAll() {\n this.unselectAll();\n if (this.#isEnabled) {\n this.#isEnabled = false;\n for (const layer of this.#allLayers.values()) {\n layer.disable();\n }\n for (const editor of this.#allEditors.values()) {\n editor.disable();\n }\n }\n }\n\n /**\n * Get all the editors belonging to a given page.\n * @param {number} pageIndex\n * @returns {Array}\n */\n getEditors(pageIndex) {\n const editors = [];\n for (const editor of this.#allEditors.values()) {\n if (editor.pageIndex === pageIndex) {\n editors.push(editor);\n }\n }\n return editors;\n }\n\n /**\n * Get an editor with the given id.\n * @param {string} id\n * @returns {AnnotationEditor}\n */\n getEditor(id) {\n return this.#allEditors.get(id);\n }\n\n /**\n * Add a new editor.\n * @param {AnnotationEditor} editor\n */\n addEditor(editor) {\n this.#allEditors.set(editor.id, editor);\n }\n\n /**\n * Remove an editor.\n * @param {AnnotationEditor} editor\n */\n removeEditor(editor) {\n if (editor.div.contains(document.activeElement)) {\n if (this.#focusMainContainerTimeoutId) {\n clearTimeout(this.#focusMainContainerTimeoutId);\n }\n this.#focusMainContainerTimeoutId = setTimeout(() => {\n // When the div is removed from DOM the focus can move on the\n // document.body, so we need to move it back to the main container.\n this.focusMainContainer();\n this.#focusMainContainerTimeoutId = null;\n }, 0);\n }\n this.#allEditors.delete(editor.id);\n this.unselect(editor);\n if (\n !editor.annotationElementId ||\n !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)\n ) {\n this.#annotationStorage?.remove(editor.id);\n }\n }\n\n /**\n * The annotation element with the given id has been deleted.\n * @param {AnnotationEditor} editor\n */\n addDeletedAnnotationElement(editor) {\n this.#deletedAnnotationsElementIds.add(editor.annotationElementId);\n this.addChangedExistingAnnotation(editor);\n editor.deleted = true;\n }\n\n /**\n * Check if the annotation element with the given id has been deleted.\n * @param {string} annotationElementId\n * @returns {boolean}\n */\n isDeletedAnnotationElement(annotationElementId) {\n return this.#deletedAnnotationsElementIds.has(annotationElementId);\n }\n\n /**\n * The annotation element with the given id have been restored.\n * @param {AnnotationEditor} editor\n */\n removeDeletedAnnotationElement(editor) {\n this.#deletedAnnotationsElementIds.delete(editor.annotationElementId);\n this.removeChangedExistingAnnotation(editor);\n editor.deleted = false;\n }\n\n /**\n * Add an editor to the layer it belongs to or add it to the global map.\n * @param {AnnotationEditor} editor\n */\n #addEditorToLayer(editor) {\n const layer = this.#allLayers.get(editor.pageIndex);\n if (layer) {\n layer.addOrRebuild(editor);\n } else {\n this.addEditor(editor);\n this.addToAnnotationStorage(editor);\n }\n }\n\n /**\n * Set the given editor as the active one.\n * @param {AnnotationEditor} editor\n */\n setActiveEditor(editor) {\n if (this.#activeEditor === editor) {\n return;\n }\n\n this.#activeEditor = editor;\n if (editor) {\n this.#dispatchUpdateUI(editor.propertiesToUpdate);\n }\n }\n\n get #lastSelectedEditor() {\n let ed = null;\n for (ed of this.#selectedEditors) {\n // Iterate to get the last element.\n }\n return ed;\n }\n\n /**\n * Update the UI of the active editor.\n * @param {AnnotationEditor} editor\n */\n updateUI(editor) {\n if (this.#lastSelectedEditor === editor) {\n this.#dispatchUpdateUI(editor.propertiesToUpdate);\n }\n }\n\n /**\n * Add or remove an editor the current selection.\n * @param {AnnotationEditor} editor\n */\n toggleSelected(editor) {\n if (this.#selectedEditors.has(editor)) {\n this.#selectedEditors.delete(editor);\n editor.unselect();\n this.#dispatchUpdateStates({\n hasSelectedEditor: this.hasSelection,\n });\n return;\n }\n this.#selectedEditors.add(editor);\n editor.select();\n this.#dispatchUpdateUI(editor.propertiesToUpdate);\n this.#dispatchUpdateStates({\n hasSelectedEditor: true,\n });\n }\n\n /**\n * Set the last selected editor.\n * @param {AnnotationEditor} editor\n */\n setSelected(editor) {\n for (const ed of this.#selectedEditors) {\n if (ed !== editor) {\n ed.unselect();\n }\n }\n this.#selectedEditors.clear();\n\n this.#selectedEditors.add(editor);\n editor.select();\n this.#dispatchUpdateUI(editor.propertiesToUpdate);\n this.#dispatchUpdateStates({\n hasSelectedEditor: true,\n });\n }\n\n /**\n * Check if the editor is selected.\n * @param {AnnotationEditor} editor\n */\n isSelected(editor) {\n return this.#selectedEditors.has(editor);\n }\n\n get firstSelectedEditor() {\n return this.#selectedEditors.values().next().value;\n }\n\n /**\n * Unselect an editor.\n * @param {AnnotationEditor} editor\n */\n unselect(editor) {\n editor.unselect();\n this.#selectedEditors.delete(editor);\n this.#dispatchUpdateStates({\n hasSelectedEditor: this.hasSelection,\n });\n }\n\n get hasSelection() {\n return this.#selectedEditors.size !== 0;\n }\n\n get isEnterHandled() {\n return (\n this.#selectedEditors.size === 1 &&\n this.firstSelectedEditor.isEnterHandled\n );\n }\n\n /**\n * Undo the last command.\n */\n undo() {\n this.#commandManager.undo();\n this.#dispatchUpdateStates({\n hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),\n hasSomethingToRedo: true,\n isEmpty: this.#isEmpty(),\n });\n }\n\n /**\n * Redo the last undoed command.\n */\n redo() {\n this.#commandManager.redo();\n this.#dispatchUpdateStates({\n hasSomethingToUndo: true,\n hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),\n isEmpty: this.#isEmpty(),\n });\n }\n\n /**\n * Add a command to execute (cmd) and another one to undo it.\n * @param {Object} params\n */\n addCommands(params) {\n this.#commandManager.add(params);\n this.#dispatchUpdateStates({\n hasSomethingToUndo: true,\n hasSomethingToRedo: false,\n isEmpty: this.#isEmpty(),\n });\n }\n\n #isEmpty() {\n if (this.#allEditors.size === 0) {\n return true;\n }\n\n if (this.#allEditors.size === 1) {\n for (const editor of this.#allEditors.values()) {\n return editor.isEmpty();\n }\n }\n\n return false;\n }\n\n /**\n * Delete the current editor or all.\n */\n delete() {\n this.commitOrRemove();\n if (!this.hasSelection) {\n return;\n }\n\n const editors = [...this.#selectedEditors];\n const cmd = () => {\n for (const editor of editors) {\n editor.remove();\n }\n };\n const undo = () => {\n for (const editor of editors) {\n this.#addEditorToLayer(editor);\n }\n };\n\n this.addCommands({ cmd, undo, mustExec: true });\n }\n\n commitOrRemove() {\n // An editor is being edited so just commit it.\n this.#activeEditor?.commitOrRemove();\n }\n\n hasSomethingToControl() {\n return this.#activeEditor || this.hasSelection;\n }\n\n /**\n * Select the editors.\n * @param {Array} editors\n */\n #selectEditors(editors) {\n for (const editor of this.#selectedEditors) {\n editor.unselect();\n }\n this.#selectedEditors.clear();\n for (const editor of editors) {\n if (editor.isEmpty()) {\n continue;\n }\n this.#selectedEditors.add(editor);\n editor.select();\n }\n this.#dispatchUpdateStates({ hasSelectedEditor: this.hasSelection });\n }\n\n /**\n * Select all the editors.\n */\n selectAll() {\n for (const editor of this.#selectedEditors) {\n editor.commit();\n }\n this.#selectEditors(this.#allEditors.values());\n }\n\n /**\n * Unselect all the selected editors.\n */\n unselectAll() {\n if (this.#activeEditor) {\n // An editor is being edited so just commit it.\n this.#activeEditor.commitOrRemove();\n if (this.#mode !== AnnotationEditorType.NONE) {\n // If the mode is NONE, we want to really unselect the editor, hence we\n // mustn't return here.\n return;\n }\n }\n\n if (!this.hasSelection) {\n return;\n }\n for (const editor of this.#selectedEditors) {\n editor.unselect();\n }\n this.#selectedEditors.clear();\n this.#dispatchUpdateStates({\n hasSelectedEditor: false,\n });\n }\n\n translateSelectedEditors(x, y, noCommit = false) {\n if (!noCommit) {\n this.commitOrRemove();\n }\n if (!this.hasSelection) {\n return;\n }\n\n this.#translation[0] += x;\n this.#translation[1] += y;\n const [totalX, totalY] = this.#translation;\n const editors = [...this.#selectedEditors];\n\n // We don't want to have an undo/redo for each translation so we wait a bit\n // before adding the command to the command manager.\n const TIME_TO_WAIT = 1000;\n\n if (this.#translationTimeoutId) {\n clearTimeout(this.#translationTimeoutId);\n }\n\n this.#translationTimeoutId = setTimeout(() => {\n this.#translationTimeoutId = null;\n this.#translation[0] = this.#translation[1] = 0;\n\n this.addCommands({\n cmd: () => {\n for (const editor of editors) {\n if (this.#allEditors.has(editor.id)) {\n editor.translateInPage(totalX, totalY);\n }\n }\n },\n undo: () => {\n for (const editor of editors) {\n if (this.#allEditors.has(editor.id)) {\n editor.translateInPage(-totalX, -totalY);\n }\n }\n },\n mustExec: false,\n });\n }, TIME_TO_WAIT);\n\n for (const editor of editors) {\n editor.translateInPage(x, y);\n }\n }\n\n /**\n * Set up the drag session for moving the selected editors.\n */\n setUpDragSession() {\n // Note: don't use any references to the editor's parent which can be null\n // if the editor belongs to a destroyed page.\n if (!this.hasSelection) {\n return;\n }\n // Avoid to have spurious text selection in the text layer when dragging.\n this.disableUserSelect(true);\n this.#draggingEditors = new Map();\n for (const editor of this.#selectedEditors) {\n this.#draggingEditors.set(editor, {\n savedX: editor.x,\n savedY: editor.y,\n savedPageIndex: editor.pageIndex,\n newX: 0,\n newY: 0,\n newPageIndex: -1,\n });\n }\n }\n\n /**\n * Ends the drag session.\n * @returns {boolean} true if at least one editor has been moved.\n */\n endDragSession() {\n if (!this.#draggingEditors) {\n return false;\n }\n this.disableUserSelect(false);\n const map = this.#draggingEditors;\n this.#draggingEditors = null;\n let mustBeAddedInUndoStack = false;\n\n for (const [{ x, y, pageIndex }, value] of map) {\n value.newX = x;\n value.newY = y;\n value.newPageIndex = pageIndex;\n mustBeAddedInUndoStack ||=\n x !== value.savedX ||\n y !== value.savedY ||\n pageIndex !== value.savedPageIndex;\n }\n\n if (!mustBeAddedInUndoStack) {\n return false;\n }\n\n const move = (editor, x, y, pageIndex) => {\n if (this.#allEditors.has(editor.id)) {\n // The editor can be undone/redone on a page which is not visible (and\n // which potentially has no annotation editor layer), hence we need to\n // use the pageIndex instead of the parent.\n const parent = this.#allLayers.get(pageIndex);\n if (parent) {\n editor._setParentAndPosition(parent, x, y);\n } else {\n editor.pageIndex = pageIndex;\n editor.x = x;\n editor.y = y;\n }\n }\n };\n\n this.addCommands({\n cmd: () => {\n for (const [editor, { newX, newY, newPageIndex }] of map) {\n move(editor, newX, newY, newPageIndex);\n }\n },\n undo: () => {\n for (const [editor, { savedX, savedY, savedPageIndex }] of map) {\n move(editor, savedX, savedY, savedPageIndex);\n }\n },\n mustExec: true,\n });\n\n return true;\n }\n\n /**\n * Drag the set of selected editors.\n * @param {number} tx\n * @param {number} ty\n */\n dragSelectedEditors(tx, ty) {\n if (!this.#draggingEditors) {\n return;\n }\n for (const editor of this.#draggingEditors.keys()) {\n editor.drag(tx, ty);\n }\n }\n\n /**\n * Rebuild the editor (usually on undo/redo actions) on a potentially\n * non-rendered page.\n * @param {AnnotationEditor} editor\n */\n rebuild(editor) {\n if (editor.parent === null) {\n const parent = this.getLayer(editor.pageIndex);\n if (parent) {\n parent.changeParent(editor);\n parent.addOrRebuild(editor);\n } else {\n this.addEditor(editor);\n this.addToAnnotationStorage(editor);\n editor.rebuild();\n }\n } else {\n editor.parent.addOrRebuild(editor);\n }\n }\n\n get isEditorHandlingKeyboard() {\n return (\n this.getActive()?.shouldGetKeyboardEvents() ||\n (this.#selectedEditors.size === 1 &&\n this.firstSelectedEditor.shouldGetKeyboardEvents())\n );\n }\n\n /**\n * Is the current editor the one passed as argument?\n * @param {AnnotationEditor} editor\n * @returns\n */\n isActive(editor) {\n return this.#activeEditor === editor;\n }\n\n /**\n * Get the current active editor.\n * @returns {AnnotationEditor|null}\n */\n getActive() {\n return this.#activeEditor;\n }\n\n /**\n * Get the current editor mode.\n * @returns {number}\n */\n getMode() {\n return this.#mode;\n }\n\n get imageManager() {\n return shadow(this, \"imageManager\", new ImageManager());\n }\n\n getSelectionBoxes(textLayer) {\n if (!textLayer) {\n return null;\n }\n const selection = document.getSelection();\n for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n if (\n !textLayer.contains(selection.getRangeAt(i).commonAncestorContainer)\n ) {\n return null;\n }\n }\n\n const {\n x: layerX,\n y: layerY,\n width: parentWidth,\n height: parentHeight,\n } = textLayer.getBoundingClientRect();\n\n // We must rotate the boxes because we want to have them in the non-rotated\n // page coordinates.\n let rotator;\n switch (textLayer.getAttribute(\"data-main-rotation\")) {\n case \"90\":\n rotator = (x, y, w, h) => ({\n x: (y - layerY) / parentHeight,\n y: 1 - (x + w - layerX) / parentWidth,\n width: h / parentHeight,\n height: w / parentWidth,\n });\n break;\n case \"180\":\n rotator = (x, y, w, h) => ({\n x: 1 - (x + w - layerX) / parentWidth,\n y: 1 - (y + h - layerY) / parentHeight,\n width: w / parentWidth,\n height: h / parentHeight,\n });\n break;\n case \"270\":\n rotator = (x, y, w, h) => ({\n x: 1 - (y + h - layerY) / parentHeight,\n y: (x - layerX) / parentWidth,\n width: h / parentHeight,\n height: w / parentWidth,\n });\n break;\n default:\n rotator = (x, y, w, h) => ({\n x: (x - layerX) / parentWidth,\n y: (y - layerY) / parentHeight,\n width: w / parentWidth,\n height: h / parentHeight,\n });\n break;\n }\n\n const boxes = [];\n for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n const range = selection.getRangeAt(i);\n if (range.collapsed) {\n continue;\n }\n for (const { x, y, width, height } of range.getClientRects()) {\n if (width === 0 || height === 0) {\n continue;\n }\n boxes.push(rotator(x, y, width, height));\n }\n }\n return boxes.length === 0 ? null : boxes;\n }\n\n addChangedExistingAnnotation({ annotationElementId, id }) {\n (this.#changedExistingAnnotations ||= new Map()).set(\n annotationElementId,\n id\n );\n }\n\n removeChangedExistingAnnotation({ annotationElementId }) {\n this.#changedExistingAnnotations?.delete(annotationElementId);\n }\n\n renderAnnotationElement(annotation) {\n const editorId = this.#changedExistingAnnotations?.get(annotation.data.id);\n if (!editorId) {\n return;\n }\n const editor = this.#annotationStorage.getRawValue(editorId);\n if (!editor) {\n return;\n }\n if (this.#mode === AnnotationEditorType.NONE && !editor.hasBeenModified) {\n return;\n }\n editor.renderAnnotationElement(annotation);\n }\n}\n\nexport {\n AnnotationEditorUIManager,\n bindEvents,\n ColorManager,\n CommandManager,\n KeyboardManager,\n opacityToHex,\n};\n","/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu } from \"../display_utils.js\";\n\nclass AltText {\n #altText = \"\";\n\n #altTextDecorative = false;\n\n #altTextButton = null;\n\n #altTextTooltip = null;\n\n #altTextTooltipTimeout = null;\n\n #altTextWasFromKeyBoard = false;\n\n #editor = null;\n\n static _l10nPromise = null;\n\n constructor(editor) {\n this.#editor = editor;\n }\n\n static initialize(l10nPromise) {\n AltText._l10nPromise ||= l10nPromise;\n }\n\n async render() {\n const altText = (this.#altTextButton = document.createElement(\"button\"));\n altText.className = \"altText\";\n const msg = await AltText._l10nPromise.get(\n \"pdfjs-editor-alt-text-button-label\"\n );\n altText.textContent = msg;\n altText.setAttribute(\"aria-label\", msg);\n altText.tabIndex = \"0\";\n altText.addEventListener(\"contextmenu\", noContextMenu);\n altText.addEventListener(\"pointerdown\", event => event.stopPropagation());\n\n const onClick = event => {\n event.preventDefault();\n this.#editor._uiManager.editAltText(this.#editor);\n };\n altText.addEventListener(\"click\", onClick, { capture: true });\n altText.addEventListener(\"keydown\", event => {\n if (event.target === altText && event.key === \"Enter\") {\n this.#altTextWasFromKeyBoard = true;\n onClick(event);\n }\n });\n await this.#setState();\n\n return altText;\n }\n\n finish() {\n if (!this.#altTextButton) {\n return;\n }\n this.#altTextButton.focus({ focusVisible: this.#altTextWasFromKeyBoard });\n this.#altTextWasFromKeyBoard = false;\n }\n\n isEmpty() {\n return !this.#altText && !this.#altTextDecorative;\n }\n\n get data() {\n return {\n altText: this.#altText,\n decorative: this.#altTextDecorative,\n };\n }\n\n /**\n * Set the alt text data.\n */\n set data({ altText, decorative }) {\n if (this.#altText === altText && this.#altTextDecorative === decorative) {\n return;\n }\n this.#altText = altText;\n this.#altTextDecorative = decorative;\n this.#setState();\n }\n\n toggle(enabled = false) {\n if (!this.#altTextButton) {\n return;\n }\n if (!enabled && this.#altTextTooltipTimeout) {\n clearTimeout(this.#altTextTooltipTimeout);\n this.#altTextTooltipTimeout = null;\n }\n this.#altTextButton.disabled = !enabled;\n }\n\n destroy() {\n this.#altTextButton?.remove();\n this.#altTextButton = null;\n this.#altTextTooltip = null;\n }\n\n async #setState() {\n const button = this.#altTextButton;\n if (!button) {\n return;\n }\n if (!this.#altText && !this.#altTextDecorative) {\n button.classList.remove(\"done\");\n this.#altTextTooltip?.remove();\n return;\n }\n button.classList.add(\"done\");\n\n AltText._l10nPromise\n .get(\"pdfjs-editor-alt-text-edit-button-label\")\n .then(msg => {\n button.setAttribute(\"aria-label\", msg);\n });\n let tooltip = this.#altTextTooltip;\n if (!tooltip) {\n this.#altTextTooltip = tooltip = document.createElement(\"span\");\n tooltip.className = \"tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n const id = (tooltip.id = `alt-text-tooltip-${this.#editor.id}`);\n button.setAttribute(\"aria-describedby\", id);\n\n const DELAY_TO_SHOW_TOOLTIP = 100;\n button.addEventListener(\"mouseenter\", () => {\n this.#altTextTooltipTimeout = setTimeout(() => {\n this.#altTextTooltipTimeout = null;\n this.#altTextTooltip.classList.add(\"show\");\n this.#editor._reportTelemetry({\n action: \"alt_text_tooltip\",\n });\n }, DELAY_TO_SHOW_TOOLTIP);\n });\n button.addEventListener(\"mouseleave\", () => {\n if (this.#altTextTooltipTimeout) {\n clearTimeout(this.#altTextTooltipTimeout);\n this.#altTextTooltipTimeout = null;\n }\n this.#altTextTooltip?.classList.remove(\"show\");\n });\n }\n tooltip.innerText = this.#altTextDecorative\n ? await AltText._l10nPromise.get(\n \"pdfjs-editor-alt-text-decorative-tooltip\"\n )\n : this.#altText;\n\n if (!tooltip.parentNode) {\n button.append(tooltip);\n }\n\n const element = this.#editor.getImageForAltText();\n element?.setAttribute(\"aria-describedby\", tooltip.id);\n }\n}\n\nexport { AltText };\n","/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./annotation_editor_layer.js\").AnnotationEditorLayer} AnnotationEditorLayer */\n\nimport {\n AnnotationEditorUIManager,\n bindEvents,\n ColorManager,\n KeyboardManager,\n} from \"./tools.js\";\nimport { FeatureTest, shadow, unreachable } from \"../../shared/util.js\";\nimport { AltText } from \"./alt_text.js\";\nimport { EditorToolbar } from \"./toolbar.js\";\nimport { noContextMenu } from \"../display_utils.js\";\n\n/**\n * @typedef {Object} AnnotationEditorParameters\n * @property {AnnotationEditorUIManager} uiManager - the global manager\n * @property {AnnotationEditorLayer} parent - the layer containing this editor\n * @property {string} id - editor id\n * @property {number} x - x-coordinate\n * @property {number} y - y-coordinate\n */\n\n/**\n * Base class for editors.\n */\nclass AnnotationEditor {\n #allResizerDivs = null;\n\n #altText = null;\n\n #disabled = false;\n\n #keepAspectRatio = false;\n\n #resizersDiv = null;\n\n #savedDimensions = null;\n\n #boundFocusin = this.focusin.bind(this);\n\n #boundFocusout = this.focusout.bind(this);\n\n #editToolbar = null;\n\n #focusedResizerName = \"\";\n\n #hasBeenClicked = false;\n\n #initialPosition = null;\n\n #isEditing = false;\n\n #isInEditMode = false;\n\n #isResizerEnabledForKeyboard = false;\n\n #moveInDOMTimeout = null;\n\n #prevDragX = 0;\n\n #prevDragY = 0;\n\n #telemetryTimeouts = null;\n\n _initialOptions = Object.create(null);\n\n _isVisible = true;\n\n _uiManager = null;\n\n _focusEventsAllowed = true;\n\n _l10nPromise = null;\n\n #isDraggable = false;\n\n #zIndex = AnnotationEditor._zIndex++;\n\n static _borderLineWidth = -1;\n\n static _colorManager = new ColorManager();\n\n static _zIndex = 1;\n\n // Time to wait (in ms) before sending the telemetry data.\n // We wait a bit to avoid sending too many requests when changing something\n // like the thickness of a line.\n static _telemetryTimeout = 1000;\n\n static get _resizerKeyboardManager() {\n const resize = AnnotationEditor.prototype._resizeWithKeyboard;\n const small = AnnotationEditorUIManager.TRANSLATE_SMALL;\n const big = AnnotationEditorUIManager.TRANSLATE_BIG;\n\n return shadow(\n this,\n \"_resizerKeyboardManager\",\n new KeyboardManager([\n [[\"ArrowLeft\", \"mac+ArrowLeft\"], resize, { args: [-small, 0] }],\n [\n [\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"],\n resize,\n { args: [-big, 0] },\n ],\n [[\"ArrowRight\", \"mac+ArrowRight\"], resize, { args: [small, 0] }],\n [\n [\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"],\n resize,\n { args: [big, 0] },\n ],\n [[\"ArrowUp\", \"mac+ArrowUp\"], resize, { args: [0, -small] }],\n [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], resize, { args: [0, -big] }],\n [[\"ArrowDown\", \"mac+ArrowDown\"], resize, { args: [0, small] }],\n [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], resize, { args: [0, big] }],\n [\n [\"Escape\", \"mac+Escape\"],\n AnnotationEditor.prototype._stopResizingWithKeyboard,\n ],\n ])\n );\n }\n\n /**\n * @param {AnnotationEditorParameters} parameters\n */\n constructor(parameters) {\n if (this.constructor === AnnotationEditor) {\n unreachable(\"Cannot initialize AnnotationEditor.\");\n }\n\n this.parent = parameters.parent;\n this.id = parameters.id;\n this.width = this.height = null;\n this.pageIndex = parameters.parent.pageIndex;\n this.name = parameters.name;\n this.div = null;\n this._uiManager = parameters.uiManager;\n this.annotationElementId = null;\n this._willKeepAspectRatio = false;\n this._initialOptions.isCentered = parameters.isCentered;\n this._structTreeParentId = null;\n\n const {\n rotation,\n rawDims: { pageWidth, pageHeight, pageX, pageY },\n } = this.parent.viewport;\n\n this.rotation = rotation;\n this.pageRotation =\n (360 + rotation - this._uiManager.viewParameters.rotation) % 360;\n this.pageDimensions = [pageWidth, pageHeight];\n this.pageTranslation = [pageX, pageY];\n\n const [width, height] = this.parentDimensions;\n this.x = parameters.x / width;\n this.y = parameters.y / height;\n\n this.isAttachedToDOM = false;\n this.deleted = false;\n }\n\n get editorType() {\n return Object.getPrototypeOf(this).constructor._type;\n }\n\n static get _defaultLineColor() {\n return shadow(\n this,\n \"_defaultLineColor\",\n this._colorManager.getHexCode(\"CanvasText\")\n );\n }\n\n static deleteAnnotationElement(editor) {\n const fakeEditor = new FakeEditor({\n id: editor.parent.getNextId(),\n parent: editor.parent,\n uiManager: editor._uiManager,\n });\n fakeEditor.annotationElementId = editor.annotationElementId;\n fakeEditor.deleted = true;\n fakeEditor._uiManager.addToAnnotationStorage(fakeEditor);\n }\n\n /**\n * Initialize the l10n stuff for this type of editor.\n * @param {Object} l10n\n */\n static initialize(l10n, _uiManager, options) {\n AnnotationEditor._l10nPromise ||= new Map(\n [\n \"pdfjs-editor-alt-text-button-label\",\n \"pdfjs-editor-alt-text-edit-button-label\",\n \"pdfjs-editor-alt-text-decorative-tooltip\",\n \"pdfjs-editor-resizer-label-topLeft\",\n \"pdfjs-editor-resizer-label-topMiddle\",\n \"pdfjs-editor-resizer-label-topRight\",\n \"pdfjs-editor-resizer-label-middleRight\",\n \"pdfjs-editor-resizer-label-bottomRight\",\n \"pdfjs-editor-resizer-label-bottomMiddle\",\n \"pdfjs-editor-resizer-label-bottomLeft\",\n \"pdfjs-editor-resizer-label-middleLeft\",\n ].map(str => [\n str,\n l10n.get(str.replaceAll(/([A-Z])/g, c => `-${c.toLowerCase()}`)),\n ])\n );\n if (options?.strings) {\n for (const str of options.strings) {\n AnnotationEditor._l10nPromise.set(str, l10n.get(str));\n }\n }\n if (AnnotationEditor._borderLineWidth !== -1) {\n return;\n }\n const style = getComputedStyle(document.documentElement);\n AnnotationEditor._borderLineWidth =\n parseFloat(style.getPropertyValue(\"--outline-width\")) || 0;\n }\n\n /**\n * Update the default parameters for this type of editor.\n * @param {number} _type\n * @param {*} _value\n */\n static updateDefaultParams(_type, _value) {}\n\n /**\n * Get the default properties to set in the UI for this type of editor.\n * @returns {Array}\n */\n static get defaultPropertiesToUpdate() {\n return [];\n }\n\n /**\n * Check if this kind of editor is able to handle the given mime type for\n * pasting.\n * @param {string} mime\n * @returns {boolean}\n */\n static isHandlingMimeForPasting(mime) {\n return false;\n }\n\n /**\n * Extract the data from the clipboard item and delegate the creation of the\n * editor to the parent.\n * @param {DataTransferItem} item\n * @param {AnnotationEditorLayer} parent\n */\n static paste(item, parent) {\n unreachable(\"Not implemented\");\n }\n\n /**\n * Get the properties to update in the UI for this editor.\n * @returns {Array}\n */\n get propertiesToUpdate() {\n return [];\n }\n\n get _isDraggable() {\n return this.#isDraggable;\n }\n\n set _isDraggable(value) {\n this.#isDraggable = value;\n this.div?.classList.toggle(\"draggable\", value);\n }\n\n /**\n * @returns {boolean} true if the editor handles the Enter key itself.\n */\n get isEnterHandled() {\n return true;\n }\n\n center() {\n const [pageWidth, pageHeight] = this.pageDimensions;\n switch (this.parentRotation) {\n case 90:\n this.x -= (this.height * pageHeight) / (pageWidth * 2);\n this.y += (this.width * pageWidth) / (pageHeight * 2);\n break;\n case 180:\n this.x += this.width / 2;\n this.y += this.height / 2;\n break;\n case 270:\n this.x += (this.height * pageHeight) / (pageWidth * 2);\n this.y -= (this.width * pageWidth) / (pageHeight * 2);\n break;\n default:\n this.x -= this.width / 2;\n this.y -= this.height / 2;\n break;\n }\n this.fixAndSetPosition();\n }\n\n /**\n * Add some commands into the CommandManager (undo/redo stuff).\n * @param {Object} params\n */\n addCommands(params) {\n this._uiManager.addCommands(params);\n }\n\n get currentLayer() {\n return this._uiManager.currentLayer;\n }\n\n /**\n * This editor will be behind the others.\n */\n setInBackground() {\n this.div.style.zIndex = 0;\n }\n\n /**\n * This editor will be in the foreground.\n */\n setInForeground() {\n this.div.style.zIndex = this.#zIndex;\n }\n\n setParent(parent) {\n if (parent !== null) {\n this.pageIndex = parent.pageIndex;\n this.pageDimensions = parent.pageDimensions;\n } else {\n // The editor is being removed from the DOM, so we need to stop resizing.\n this.#stopResizing();\n }\n this.parent = parent;\n }\n\n /**\n * onfocus callback.\n */\n focusin(event) {\n if (!this._focusEventsAllowed) {\n return;\n }\n if (!this.#hasBeenClicked) {\n this.parent.setSelected(this);\n } else {\n this.#hasBeenClicked = false;\n }\n }\n\n /**\n * onblur callback.\n * @param {FocusEvent} event\n */\n focusout(event) {\n if (!this._focusEventsAllowed) {\n return;\n }\n\n if (!this.isAttachedToDOM) {\n return;\n }\n\n // In case of focusout, the relatedTarget is the element which\n // is grabbing the focus.\n // So if the related target is an element under the div for this\n // editor, then the editor isn't unactive.\n const target = event.relatedTarget;\n if (target?.closest(`#${this.id}`)) {\n return;\n }\n\n event.preventDefault();\n\n if (!this.parent?.isMultipleSelection) {\n this.commitOrRemove();\n }\n }\n\n commitOrRemove() {\n if (this.isEmpty()) {\n this.remove();\n } else {\n this.commit();\n }\n }\n\n /**\n * Commit the data contained in this editor.\n */\n commit() {\n this.addToAnnotationStorage();\n }\n\n addToAnnotationStorage() {\n this._uiManager.addToAnnotationStorage(this);\n }\n\n /**\n * Set the editor position within its parent.\n * @param {number} x\n * @param {number} y\n * @param {number} tx - x-translation in screen coordinates.\n * @param {number} ty - y-translation in screen coordinates.\n */\n setAt(x, y, tx, ty) {\n const [width, height] = this.parentDimensions;\n [tx, ty] = this.screenToPageTranslation(tx, ty);\n\n this.x = (x + tx) / width;\n this.y = (y + ty) / height;\n\n this.fixAndSetPosition();\n }\n\n #translate([width, height], x, y) {\n [x, y] = this.screenToPageTranslation(x, y);\n\n this.x += x / width;\n this.y += y / height;\n\n this.fixAndSetPosition();\n }\n\n /**\n * Translate the editor position within its parent.\n * @param {number} x - x-translation in screen coordinates.\n * @param {number} y - y-translation in screen coordinates.\n */\n translate(x, y) {\n // We don't change the initial position because the move here hasn't been\n // done by the user.\n this.#translate(this.parentDimensions, x, y);\n }\n\n /**\n * Translate the editor position within its page and adjust the scroll\n * in order to have the editor in the view.\n * @param {number} x - x-translation in page coordinates.\n * @param {number} y - y-translation in page coordinates.\n */\n translateInPage(x, y) {\n this.#initialPosition ||= [this.x, this.y];\n this.#translate(this.pageDimensions, x, y);\n this.div.scrollIntoView({ block: \"nearest\" });\n }\n\n drag(tx, ty) {\n this.#initialPosition ||= [this.x, this.y];\n const [parentWidth, parentHeight] = this.parentDimensions;\n this.x += tx / parentWidth;\n this.y += ty / parentHeight;\n if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) {\n // It's possible to not have a parent: for example, when the user is\n // dragging all the selected editors but this one on a page which has been\n // destroyed.\n // It's why we need to check for it. In such a situation, it isn't really\n // a problem to not find a new parent: it's something which is related to\n // what the user is seeing, hence it depends on how pages are layed out.\n\n // The element will be outside of its parent so change the parent.\n const { x, y } = this.div.getBoundingClientRect();\n if (this.parent.findNewParent(this, x, y)) {\n this.x -= Math.floor(this.x);\n this.y -= Math.floor(this.y);\n }\n }\n\n // The editor can be moved wherever the user wants, so we don't need to fix\n // the position: it'll be done when the user will release the mouse button.\n\n let { x, y } = this;\n const [bx, by] = this.getBaseTranslation();\n x += bx;\n y += by;\n\n this.div.style.left = `${(100 * x).toFixed(2)}%`;\n this.div.style.top = `${(100 * y).toFixed(2)}%`;\n this.div.scrollIntoView({ block: \"nearest\" });\n }\n\n get _hasBeenMoved() {\n return (\n !!this.#initialPosition &&\n (this.#initialPosition[0] !== this.x ||\n this.#initialPosition[1] !== this.y)\n );\n }\n\n /**\n * Get the translation to take into account the editor border.\n * The CSS engine positions the element by taking the border into account so\n * we must apply the opposite translation to have the editor in the right\n * position.\n * @returns {Array}\n */\n getBaseTranslation() {\n const [parentWidth, parentHeight] = this.parentDimensions;\n const { _borderLineWidth } = AnnotationEditor;\n const x = _borderLineWidth / parentWidth;\n const y = _borderLineWidth / parentHeight;\n switch (this.rotation) {\n case 90:\n return [-x, y];\n case 180:\n return [x, y];\n case 270:\n return [x, -y];\n default:\n return [-x, -y];\n }\n }\n\n /**\n * @returns {boolean} true if position must be fixed (i.e. make the x and y\n * living in the page).\n */\n get _mustFixPosition() {\n return true;\n }\n\n /**\n * Fix the position of the editor in order to keep it inside its parent page.\n * @param {number} [rotation] - the rotation of the page.\n */\n fixAndSetPosition(rotation = this.rotation) {\n const [pageWidth, pageHeight] = this.pageDimensions;\n let { x, y, width, height } = this;\n width *= pageWidth;\n height *= pageHeight;\n x *= pageWidth;\n y *= pageHeight;\n\n if (this._mustFixPosition) {\n switch (rotation) {\n case 0:\n x = Math.max(0, Math.min(pageWidth - width, x));\n y = Math.max(0, Math.min(pageHeight - height, y));\n break;\n case 90:\n x = Math.max(0, Math.min(pageWidth - height, x));\n y = Math.min(pageHeight, Math.max(width, y));\n break;\n case 180:\n x = Math.min(pageWidth, Math.max(width, x));\n y = Math.min(pageHeight, Math.max(height, y));\n break;\n case 270:\n x = Math.min(pageWidth, Math.max(height, x));\n y = Math.max(0, Math.min(pageHeight - width, y));\n break;\n }\n }\n\n this.x = x /= pageWidth;\n this.y = y /= pageHeight;\n\n const [bx, by] = this.getBaseTranslation();\n x += bx;\n y += by;\n\n const { style } = this.div;\n style.left = `${(100 * x).toFixed(2)}%`;\n style.top = `${(100 * y).toFixed(2)}%`;\n\n this.moveInDOM();\n }\n\n static #rotatePoint(x, y, angle) {\n switch (angle) {\n case 90:\n return [y, -x];\n case 180:\n return [-x, -y];\n case 270:\n return [-y, x];\n default:\n return [x, y];\n }\n }\n\n /**\n * Convert a screen translation into a page one.\n * @param {number} x\n * @param {number} y\n */\n screenToPageTranslation(x, y) {\n return AnnotationEditor.#rotatePoint(x, y, this.parentRotation);\n }\n\n /**\n * Convert a page translation into a screen one.\n * @param {number} x\n * @param {number} y\n */\n pageTranslationToScreen(x, y) {\n return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation);\n }\n\n #getRotationMatrix(rotation) {\n switch (rotation) {\n case 90: {\n const [pageWidth, pageHeight] = this.pageDimensions;\n return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0];\n }\n case 180:\n return [-1, 0, 0, -1];\n case 270: {\n const [pageWidth, pageHeight] = this.pageDimensions;\n return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0];\n }\n default:\n return [1, 0, 0, 1];\n }\n }\n\n get parentScale() {\n return this._uiManager.viewParameters.realScale;\n }\n\n get parentRotation() {\n return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360;\n }\n\n get parentDimensions() {\n const {\n parentScale,\n pageDimensions: [pageWidth, pageHeight],\n } = this;\n const scaledWidth = pageWidth * parentScale;\n const scaledHeight = pageHeight * parentScale;\n return FeatureTest.isCSSRoundSupported\n ? [Math.round(scaledWidth), Math.round(scaledHeight)]\n : [scaledWidth, scaledHeight];\n }\n\n /**\n * Set the dimensions of this editor.\n * @param {number} width\n * @param {number} height\n */\n setDims(width, height) {\n const [parentWidth, parentHeight] = this.parentDimensions;\n this.div.style.width = `${((100 * width) / parentWidth).toFixed(2)}%`;\n if (!this.#keepAspectRatio) {\n this.div.style.height = `${((100 * height) / parentHeight).toFixed(2)}%`;\n }\n }\n\n fixDims() {\n const { style } = this.div;\n const { height, width } = style;\n const widthPercent = width.endsWith(\"%\");\n const heightPercent = !this.#keepAspectRatio && height.endsWith(\"%\");\n if (widthPercent && heightPercent) {\n return;\n }\n\n const [parentWidth, parentHeight] = this.parentDimensions;\n if (!widthPercent) {\n style.width = `${((100 * parseFloat(width)) / parentWidth).toFixed(2)}%`;\n }\n if (!this.#keepAspectRatio && !heightPercent) {\n style.height = `${((100 * parseFloat(height)) / parentHeight).toFixed(\n 2\n )}%`;\n }\n }\n\n /**\n * Get the translation used to position this editor when it's created.\n * @returns {Array}\n */\n getInitialTranslation() {\n return [0, 0];\n }\n\n #createResizers() {\n if (this.#resizersDiv) {\n return;\n }\n this.#resizersDiv = document.createElement(\"div\");\n this.#resizersDiv.classList.add(\"resizers\");\n // When the resizers are used with the keyboard, they're focusable, hence\n // we want to have them in this order (top left, top middle, top right, ...)\n // in the DOM to have the focus order correct.\n const classes = this._willKeepAspectRatio\n ? [\"topLeft\", \"topRight\", \"bottomRight\", \"bottomLeft\"]\n : [\n \"topLeft\",\n \"topMiddle\",\n \"topRight\",\n \"middleRight\",\n \"bottomRight\",\n \"bottomMiddle\",\n \"bottomLeft\",\n \"middleLeft\",\n ];\n for (const name of classes) {\n const div = document.createElement(\"div\");\n this.#resizersDiv.append(div);\n div.classList.add(\"resizer\", name);\n div.setAttribute(\"data-resizer-name\", name);\n div.addEventListener(\n \"pointerdown\",\n this.#resizerPointerdown.bind(this, name)\n );\n div.addEventListener(\"contextmenu\", noContextMenu);\n div.tabIndex = -1;\n }\n this.div.prepend(this.#resizersDiv);\n }\n\n #resizerPointerdown(name, event) {\n event.preventDefault();\n const { isMac } = FeatureTest.platform;\n if (event.button !== 0 || (event.ctrlKey && isMac)) {\n return;\n }\n\n this.#altText?.toggle(false);\n\n const boundResizerPointermove = this.#resizerPointermove.bind(this, name);\n const savedDraggable = this._isDraggable;\n this._isDraggable = false;\n const pointerMoveOptions = { passive: true, capture: true };\n this.parent.togglePointerEvents(false);\n window.addEventListener(\n \"pointermove\",\n boundResizerPointermove,\n pointerMoveOptions\n );\n window.addEventListener(\"contextmenu\", noContextMenu);\n const savedX = this.x;\n const savedY = this.y;\n const savedWidth = this.width;\n const savedHeight = this.height;\n const savedParentCursor = this.parent.div.style.cursor;\n const savedCursor = this.div.style.cursor;\n this.div.style.cursor = this.parent.div.style.cursor =\n window.getComputedStyle(event.target).cursor;\n\n const pointerUpCallback = () => {\n this.parent.togglePointerEvents(true);\n this.#altText?.toggle(true);\n this._isDraggable = savedDraggable;\n window.removeEventListener(\"pointerup\", pointerUpCallback);\n window.removeEventListener(\"blur\", pointerUpCallback);\n window.removeEventListener(\n \"pointermove\",\n boundResizerPointermove,\n pointerMoveOptions\n );\n window.removeEventListener(\"contextmenu\", noContextMenu);\n this.parent.div.style.cursor = savedParentCursor;\n this.div.style.cursor = savedCursor;\n\n this.#addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight);\n };\n window.addEventListener(\"pointerup\", pointerUpCallback);\n // If the user switches to another window (with alt+tab), then we end the\n // resize session.\n window.addEventListener(\"blur\", pointerUpCallback);\n }\n\n #addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight) {\n const newX = this.x;\n const newY = this.y;\n const newWidth = this.width;\n const newHeight = this.height;\n if (\n newX === savedX &&\n newY === savedY &&\n newWidth === savedWidth &&\n newHeight === savedHeight\n ) {\n return;\n }\n\n this.addCommands({\n cmd: () => {\n this.width = newWidth;\n this.height = newHeight;\n this.x = newX;\n this.y = newY;\n const [parentWidth, parentHeight] = this.parentDimensions;\n this.setDims(parentWidth * newWidth, parentHeight * newHeight);\n this.fixAndSetPosition();\n },\n undo: () => {\n this.width = savedWidth;\n this.height = savedHeight;\n this.x = savedX;\n this.y = savedY;\n const [parentWidth, parentHeight] = this.parentDimensions;\n this.setDims(parentWidth * savedWidth, parentHeight * savedHeight);\n this.fixAndSetPosition();\n },\n mustExec: true,\n });\n }\n\n #resizerPointermove(name, event) {\n const [parentWidth, parentHeight] = this.parentDimensions;\n const savedX = this.x;\n const savedY = this.y;\n const savedWidth = this.width;\n const savedHeight = this.height;\n const minWidth = AnnotationEditor.MIN_SIZE / parentWidth;\n const minHeight = AnnotationEditor.MIN_SIZE / parentHeight;\n\n // 10000 because we multiply by 100 and use toFixed(2) in fixAndSetPosition.\n // Without rounding, the positions of the corners other than the top left\n // one can be slightly wrong.\n const round = x => Math.round(x * 10000) / 10000;\n const rotationMatrix = this.#getRotationMatrix(this.rotation);\n const transf = (x, y) => [\n rotationMatrix[0] * x + rotationMatrix[2] * y,\n rotationMatrix[1] * x + rotationMatrix[3] * y,\n ];\n const invRotationMatrix = this.#getRotationMatrix(360 - this.rotation);\n const invTransf = (x, y) => [\n invRotationMatrix[0] * x + invRotationMatrix[2] * y,\n invRotationMatrix[1] * x + invRotationMatrix[3] * y,\n ];\n let getPoint;\n let getOpposite;\n let isDiagonal = false;\n let isHorizontal = false;\n\n switch (name) {\n case \"topLeft\":\n isDiagonal = true;\n getPoint = (w, h) => [0, 0];\n getOpposite = (w, h) => [w, h];\n break;\n case \"topMiddle\":\n getPoint = (w, h) => [w / 2, 0];\n getOpposite = (w, h) => [w / 2, h];\n break;\n case \"topRight\":\n isDiagonal = true;\n getPoint = (w, h) => [w, 0];\n getOpposite = (w, h) => [0, h];\n break;\n case \"middleRight\":\n isHorizontal = true;\n getPoint = (w, h) => [w, h / 2];\n getOpposite = (w, h) => [0, h / 2];\n break;\n case \"bottomRight\":\n isDiagonal = true;\n getPoint = (w, h) => [w, h];\n getOpposite = (w, h) => [0, 0];\n break;\n case \"bottomMiddle\":\n getPoint = (w, h) => [w / 2, h];\n getOpposite = (w, h) => [w / 2, 0];\n break;\n case \"bottomLeft\":\n isDiagonal = true;\n getPoint = (w, h) => [0, h];\n getOpposite = (w, h) => [w, 0];\n break;\n case \"middleLeft\":\n isHorizontal = true;\n getPoint = (w, h) => [0, h / 2];\n getOpposite = (w, h) => [w, h / 2];\n break;\n }\n\n const point = getPoint(savedWidth, savedHeight);\n const oppositePoint = getOpposite(savedWidth, savedHeight);\n let transfOppositePoint = transf(...oppositePoint);\n const oppositeX = round(savedX + transfOppositePoint[0]);\n const oppositeY = round(savedY + transfOppositePoint[1]);\n let ratioX = 1;\n let ratioY = 1;\n\n let [deltaX, deltaY] = this.screenToPageTranslation(\n event.movementX,\n event.movementY\n );\n [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight);\n\n if (isDiagonal) {\n const oldDiag = Math.hypot(savedWidth, savedHeight);\n ratioX = ratioY = Math.max(\n Math.min(\n Math.hypot(\n oppositePoint[0] - point[0] - deltaX,\n oppositePoint[1] - point[1] - deltaY\n ) / oldDiag,\n // Avoid the editor to be larger than the page.\n 1 / savedWidth,\n 1 / savedHeight\n ),\n // Avoid the editor to be smaller than the minimum size.\n minWidth / savedWidth,\n minHeight / savedHeight\n );\n } else if (isHorizontal) {\n ratioX =\n Math.max(\n minWidth,\n Math.min(1, Math.abs(oppositePoint[0] - point[0] - deltaX))\n ) / savedWidth;\n } else {\n ratioY =\n Math.max(\n minHeight,\n Math.min(1, Math.abs(oppositePoint[1] - point[1] - deltaY))\n ) / savedHeight;\n }\n\n const newWidth = round(savedWidth * ratioX);\n const newHeight = round(savedHeight * ratioY);\n transfOppositePoint = transf(...getOpposite(newWidth, newHeight));\n const newX = oppositeX - transfOppositePoint[0];\n const newY = oppositeY - transfOppositePoint[1];\n\n this.width = newWidth;\n this.height = newHeight;\n this.x = newX;\n this.y = newY;\n\n this.setDims(parentWidth * newWidth, parentHeight * newHeight);\n this.fixAndSetPosition();\n }\n\n altTextFinish() {\n this.#altText?.finish();\n }\n\n /**\n * Add a toolbar for this editor.\n * @returns {Promise}\n */\n async addEditToolbar() {\n if (this.#editToolbar || this.#isInEditMode) {\n return this.#editToolbar;\n }\n this.#editToolbar = new EditorToolbar(this);\n this.div.append(this.#editToolbar.render());\n if (this.#altText) {\n this.#editToolbar.addAltTextButton(await this.#altText.render());\n }\n\n return this.#editToolbar;\n }\n\n removeEditToolbar() {\n if (!this.#editToolbar) {\n return;\n }\n this.#editToolbar.remove();\n this.#editToolbar = null;\n\n // We destroy the alt text but we don't null it because we want to be able\n // to restore it in case the user undoes the deletion.\n this.#altText?.destroy();\n }\n\n getClientDimensions() {\n return this.div.getBoundingClientRect();\n }\n\n async addAltTextButton() {\n if (this.#altText) {\n return;\n }\n AltText.initialize(AnnotationEditor._l10nPromise);\n this.#altText = new AltText(this);\n await this.addEditToolbar();\n }\n\n get altTextData() {\n return this.#altText?.data;\n }\n\n /**\n * Set the alt text data.\n */\n set altTextData(data) {\n if (!this.#altText) {\n return;\n }\n this.#altText.data = data;\n }\n\n hasAltText() {\n return !this.#altText?.isEmpty();\n }\n\n /**\n * Render this editor in a div.\n * @returns {HTMLDivElement | null}\n */\n render() {\n this.div = document.createElement(\"div\");\n this.div.setAttribute(\"data-editor-rotation\", (360 - this.rotation) % 360);\n this.div.className = this.name;\n this.div.setAttribute(\"id\", this.id);\n this.div.tabIndex = this.#disabled ? -1 : 0;\n if (!this._isVisible) {\n this.div.classList.add(\"hidden\");\n }\n\n this.setInForeground();\n\n this.div.addEventListener(\"focusin\", this.#boundFocusin);\n this.div.addEventListener(\"focusout\", this.#boundFocusout);\n\n const [parentWidth, parentHeight] = this.parentDimensions;\n if (this.parentRotation % 180 !== 0) {\n this.div.style.maxWidth = `${((100 * parentHeight) / parentWidth).toFixed(\n 2\n )}%`;\n this.div.style.maxHeight = `${(\n (100 * parentWidth) /\n parentHeight\n ).toFixed(2)}%`;\n }\n\n const [tx, ty] = this.getInitialTranslation();\n this.translate(tx, ty);\n\n bindEvents(this, this.div, [\"pointerdown\"]);\n\n return this.div;\n }\n\n /**\n * Onpointerdown callback.\n * @param {PointerEvent} event\n */\n pointerdown(event) {\n const { isMac } = FeatureTest.platform;\n if (event.button !== 0 || (event.ctrlKey && isMac)) {\n // Avoid to focus this editor because of a non-left click.\n event.preventDefault();\n return;\n }\n\n this.#hasBeenClicked = true;\n\n if (this._isDraggable) {\n this.#setUpDragSession(event);\n return;\n }\n\n this.#selectOnPointerEvent(event);\n }\n\n #selectOnPointerEvent(event) {\n const { isMac } = FeatureTest.platform;\n if (\n (event.ctrlKey && !isMac) ||\n event.shiftKey ||\n (event.metaKey && isMac)\n ) {\n this.parent.toggleSelected(this);\n } else {\n this.parent.setSelected(this);\n }\n }\n\n #setUpDragSession(event) {\n const isSelected = this._uiManager.isSelected(this);\n this._uiManager.setUpDragSession();\n\n let pointerMoveOptions, pointerMoveCallback;\n if (isSelected) {\n this.div.classList.add(\"moving\");\n pointerMoveOptions = { passive: true, capture: true };\n this.#prevDragX = event.clientX;\n this.#prevDragY = event.clientY;\n pointerMoveCallback = e => {\n const { clientX: x, clientY: y } = e;\n const [tx, ty] = this.screenToPageTranslation(\n x - this.#prevDragX,\n y - this.#prevDragY\n );\n this.#prevDragX = x;\n this.#prevDragY = y;\n this._uiManager.dragSelectedEditors(tx, ty);\n };\n window.addEventListener(\n \"pointermove\",\n pointerMoveCallback,\n pointerMoveOptions\n );\n }\n\n const pointerUpCallback = () => {\n window.removeEventListener(\"pointerup\", pointerUpCallback);\n window.removeEventListener(\"blur\", pointerUpCallback);\n if (isSelected) {\n this.div.classList.remove(\"moving\");\n window.removeEventListener(\n \"pointermove\",\n pointerMoveCallback,\n pointerMoveOptions\n );\n }\n\n this.#hasBeenClicked = false;\n if (!this._uiManager.endDragSession()) {\n this.#selectOnPointerEvent(event);\n }\n };\n window.addEventListener(\"pointerup\", pointerUpCallback);\n // If the user is using alt+tab during the dragging session, the pointerup\n // event could be not fired, but a blur event is fired so we can use it in\n // order to interrupt the dragging session.\n window.addEventListener(\"blur\", pointerUpCallback);\n }\n\n moveInDOM() {\n // Moving the editor in the DOM can be expensive, so we wait a bit before.\n // It's important to not block the UI (for example when changing the font\n // size in a FreeText).\n if (this.#moveInDOMTimeout) {\n clearTimeout(this.#moveInDOMTimeout);\n }\n this.#moveInDOMTimeout = setTimeout(() => {\n this.#moveInDOMTimeout = null;\n this.parent?.moveEditorInDOM(this);\n }, 0);\n }\n\n _setParentAndPosition(parent, x, y) {\n parent.changeParent(this);\n this.x = x;\n this.y = y;\n this.fixAndSetPosition();\n }\n\n /**\n * Convert the current rect into a page one.\n * @param {number} tx - x-translation in screen coordinates.\n * @param {number} ty - y-translation in screen coordinates.\n * @param {number} [rotation] - the rotation of the page.\n */\n getRect(tx, ty, rotation = this.rotation) {\n const scale = this.parentScale;\n const [pageWidth, pageHeight] = this.pageDimensions;\n const [pageX, pageY] = this.pageTranslation;\n const shiftX = tx / scale;\n const shiftY = ty / scale;\n const x = this.x * pageWidth;\n const y = this.y * pageHeight;\n const width = this.width * pageWidth;\n const height = this.height * pageHeight;\n\n switch (rotation) {\n case 0:\n return [\n x + shiftX + pageX,\n pageHeight - y - shiftY - height + pageY,\n x + shiftX + width + pageX,\n pageHeight - y - shiftY + pageY,\n ];\n case 90:\n return [\n x + shiftY + pageX,\n pageHeight - y + shiftX + pageY,\n x + shiftY + height + pageX,\n pageHeight - y + shiftX + width + pageY,\n ];\n case 180:\n return [\n x - shiftX - width + pageX,\n pageHeight - y + shiftY + pageY,\n x - shiftX + pageX,\n pageHeight - y + shiftY + height + pageY,\n ];\n case 270:\n return [\n x - shiftY - height + pageX,\n pageHeight - y - shiftX - width + pageY,\n x - shiftY + pageX,\n pageHeight - y - shiftX + pageY,\n ];\n default:\n throw new Error(\"Invalid rotation\");\n }\n }\n\n getRectInCurrentCoords(rect, pageHeight) {\n const [x1, y1, x2, y2] = rect;\n\n const width = x2 - x1;\n const height = y2 - y1;\n\n switch (this.rotation) {\n case 0:\n return [x1, pageHeight - y2, width, height];\n case 90:\n return [x1, pageHeight - y1, height, width];\n case 180:\n return [x2, pageHeight - y1, width, height];\n case 270:\n return [x2, pageHeight - y2, height, width];\n default:\n throw new Error(\"Invalid rotation\");\n }\n }\n\n /**\n * Executed once this editor has been rendered.\n */\n onceAdded() {}\n\n /**\n * Check if the editor contains something.\n * @returns {boolean}\n */\n isEmpty() {\n return false;\n }\n\n /**\n * Enable edit mode.\n */\n enableEditMode() {\n this.#isInEditMode = true;\n }\n\n /**\n * Disable edit mode.\n */\n disableEditMode() {\n this.#isInEditMode = false;\n }\n\n /**\n * Check if the editor is edited.\n * @returns {boolean}\n */\n isInEditMode() {\n return this.#isInEditMode;\n }\n\n /**\n * If it returns true, then this editor handles the keyboard\n * events itself.\n * @returns {boolean}\n */\n shouldGetKeyboardEvents() {\n return this.#isResizerEnabledForKeyboard;\n }\n\n /**\n * Check if this editor needs to be rebuilt or not.\n * @returns {boolean}\n */\n needsToBeRebuilt() {\n return this.div && !this.isAttachedToDOM;\n }\n\n /**\n * Rebuild the editor in case it has been removed on undo.\n *\n * To implement in subclasses.\n */\n rebuild() {\n this.div?.addEventListener(\"focusin\", this.#boundFocusin);\n this.div?.addEventListener(\"focusout\", this.#boundFocusout);\n }\n\n /**\n * Rotate the editor.\n * @param {number} angle\n */\n rotate(_angle) {}\n\n /**\n * Serialize the editor.\n * The result of the serialization will be used to construct a\n * new annotation to add to the pdf document.\n *\n * To implement in subclasses.\n * @param {boolean} [isForCopying]\n * @param {Object | null} [context]\n * @returns {Object | null}\n */\n serialize(isForCopying = false, context = null) {\n unreachable(\"An editor must be serializable\");\n }\n\n /**\n * Deserialize the editor.\n * The result of the deserialization is a new editor.\n *\n * @param {Object} data\n * @param {AnnotationEditorLayer} parent\n * @param {AnnotationEditorUIManager} uiManager\n * @returns {AnnotationEditor | null}\n */\n static deserialize(data, parent, uiManager) {\n const editor = new this.prototype.constructor({\n parent,\n id: parent.getNextId(),\n uiManager,\n });\n editor.rotation = data.rotation;\n\n const [pageWidth, pageHeight] = editor.pageDimensions;\n const [x, y, width, height] = editor.getRectInCurrentCoords(\n data.rect,\n pageHeight\n );\n editor.x = x / pageWidth;\n editor.y = y / pageHeight;\n editor.width = width / pageWidth;\n editor.height = height / pageHeight;\n\n return editor;\n }\n\n /**\n * Check if an existing annotation associated with this editor has been\n * modified.\n * @returns {boolean}\n */\n get hasBeenModified() {\n return (\n !!this.annotationElementId && (this.deleted || this.serialize() !== null)\n );\n }\n\n /**\n * Remove this editor.\n * It's used on ctrl+backspace action.\n */\n remove() {\n this.div.removeEventListener(\"focusin\", this.#boundFocusin);\n this.div.removeEventListener(\"focusout\", this.#boundFocusout);\n\n if (!this.isEmpty()) {\n // The editor is removed but it can be back at some point thanks to\n // undo/redo so we must commit it before.\n this.commit();\n }\n if (this.parent) {\n this.parent.remove(this);\n } else {\n this._uiManager.removeEditor(this);\n }\n\n if (this.#moveInDOMTimeout) {\n clearTimeout(this.#moveInDOMTimeout);\n this.#moveInDOMTimeout = null;\n }\n this.#stopResizing();\n this.removeEditToolbar();\n if (this.#telemetryTimeouts) {\n for (const timeout of this.#telemetryTimeouts.values()) {\n clearTimeout(timeout);\n }\n this.#telemetryTimeouts = null;\n }\n this.parent = null;\n }\n\n /**\n * @returns {boolean} true if this editor can be resized.\n */\n get isResizable() {\n return false;\n }\n\n /**\n * Add the resizers to this editor.\n */\n makeResizable() {\n if (this.isResizable) {\n this.#createResizers();\n this.#resizersDiv.classList.remove(\"hidden\");\n bindEvents(this, this.div, [\"keydown\"]);\n }\n }\n\n get toolbarPosition() {\n return null;\n }\n\n /**\n * onkeydown callback.\n * @param {KeyboardEvent} event\n */\n keydown(event) {\n if (\n !this.isResizable ||\n event.target !== this.div ||\n event.key !== \"Enter\"\n ) {\n return;\n }\n this._uiManager.setSelected(this);\n this.#savedDimensions = {\n savedX: this.x,\n savedY: this.y,\n savedWidth: this.width,\n savedHeight: this.height,\n };\n const children = this.#resizersDiv.children;\n if (!this.#allResizerDivs) {\n this.#allResizerDivs = Array.from(children);\n const boundResizerKeydown = this.#resizerKeydown.bind(this);\n const boundResizerBlur = this.#resizerBlur.bind(this);\n for (const div of this.#allResizerDivs) {\n const name = div.getAttribute(\"data-resizer-name\");\n div.setAttribute(\"role\", \"spinbutton\");\n div.addEventListener(\"keydown\", boundResizerKeydown);\n div.addEventListener(\"blur\", boundResizerBlur);\n div.addEventListener(\"focus\", this.#resizerFocus.bind(this, name));\n AnnotationEditor._l10nPromise\n .get(`pdfjs-editor-resizer-label-${name}`)\n .then(msg => div.setAttribute(\"aria-label\", msg));\n }\n }\n\n // We want to have the resizers in the visual order, so we move the first\n // (top-left) to the right place.\n const first = this.#allResizerDivs[0];\n let firstPosition = 0;\n for (const div of children) {\n if (div === first) {\n break;\n }\n firstPosition++;\n }\n const nextFirstPosition =\n (((360 - this.rotation + this.parentRotation) % 360) / 90) *\n (this.#allResizerDivs.length / 4);\n\n if (nextFirstPosition !== firstPosition) {\n // We need to reorder the resizers in the DOM in order to have the focus\n // on the top-left one.\n if (nextFirstPosition < firstPosition) {\n for (let i = 0; i < firstPosition - nextFirstPosition; i++) {\n this.#resizersDiv.append(this.#resizersDiv.firstChild);\n }\n } else if (nextFirstPosition > firstPosition) {\n for (let i = 0; i < nextFirstPosition - firstPosition; i++) {\n this.#resizersDiv.firstChild.before(this.#resizersDiv.lastChild);\n }\n }\n\n let i = 0;\n for (const child of children) {\n const div = this.#allResizerDivs[i++];\n const name = div.getAttribute(\"data-resizer-name\");\n AnnotationEditor._l10nPromise\n .get(`pdfjs-editor-resizer-label-${name}`)\n .then(msg => child.setAttribute(\"aria-label\", msg));\n }\n }\n\n this.#setResizerTabIndex(0);\n this.#isResizerEnabledForKeyboard = true;\n this.#resizersDiv.firstChild.focus({ focusVisible: true });\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n #resizerKeydown(event) {\n AnnotationEditor._resizerKeyboardManager.exec(this, event);\n }\n\n #resizerBlur(event) {\n if (\n this.#isResizerEnabledForKeyboard &&\n event.relatedTarget?.parentNode !== this.#resizersDiv\n ) {\n this.#stopResizing();\n }\n }\n\n #resizerFocus(name) {\n this.#focusedResizerName = this.#isResizerEnabledForKeyboard ? name : \"\";\n }\n\n #setResizerTabIndex(value) {\n if (!this.#allResizerDivs) {\n return;\n }\n for (const div of this.#allResizerDivs) {\n div.tabIndex = value;\n }\n }\n\n _resizeWithKeyboard(x, y) {\n if (!this.#isResizerEnabledForKeyboard) {\n return;\n }\n this.#resizerPointermove(this.#focusedResizerName, {\n movementX: x,\n movementY: y,\n });\n }\n\n #stopResizing() {\n this.#isResizerEnabledForKeyboard = false;\n this.#setResizerTabIndex(-1);\n if (this.#savedDimensions) {\n const { savedX, savedY, savedWidth, savedHeight } = this.#savedDimensions;\n this.#addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight);\n this.#savedDimensions = null;\n }\n }\n\n _stopResizingWithKeyboard() {\n this.#stopResizing();\n this.div.focus();\n }\n\n /**\n * Select this editor.\n */\n select() {\n this.makeResizable();\n this.div?.classList.add(\"selectedEditor\");\n if (!this.#editToolbar) {\n this.addEditToolbar().then(() => {\n if (this.div?.classList.contains(\"selectedEditor\")) {\n // The editor can have been unselected while we were waiting for the\n // edit toolbar to be created, hence we want to be sure that this\n // editor is still selected.\n this.#editToolbar?.show();\n }\n });\n return;\n }\n this.#editToolbar?.show();\n }\n\n /**\n * Unselect this editor.\n */\n unselect() {\n this.#resizersDiv?.classList.add(\"hidden\");\n this.div?.classList.remove(\"selectedEditor\");\n if (this.div?.contains(document.activeElement)) {\n // Don't use this.div.blur() because we don't know where the focus will\n // go.\n this._uiManager.currentLayer.div.focus({\n preventScroll: true,\n });\n }\n this.#editToolbar?.hide();\n }\n\n /**\n * Update some parameters which have been changed through the UI.\n * @param {number} type\n * @param {*} value\n */\n updateParams(type, value) {}\n\n /**\n * When the user disables the editing mode some editors can change some of\n * their properties.\n */\n disableEditing() {}\n\n /**\n * When the user enables the editing mode some editors can change some of\n * their properties.\n */\n enableEditing() {}\n\n /**\n * The editor is about to be edited.\n */\n enterInEditMode() {}\n\n /**\n * @returns {HTMLElement | null} the element requiring an alt text.\n */\n getImageForAltText() {\n return null;\n }\n\n /**\n * Get the div which really contains the displayed content.\n * @returns {HTMLDivElement | undefined}\n */\n get contentDiv() {\n return this.div;\n }\n\n /**\n * If true then the editor is currently edited.\n * @type {boolean}\n */\n get isEditing() {\n return this.#isEditing;\n }\n\n /**\n * When set to true, it means that this editor is currently edited.\n * @param {boolean} value\n */\n set isEditing(value) {\n this.#isEditing = value;\n if (!this.parent) {\n return;\n }\n if (value) {\n this.parent.setSelected(this);\n this.parent.setActiveEditor(this);\n } else {\n this.parent.setActiveEditor(null);\n }\n }\n\n /**\n * Set the aspect ratio to use when resizing.\n * @param {number} width\n * @param {number} height\n */\n setAspectRatio(width, height) {\n this.#keepAspectRatio = true;\n const aspectRatio = width / height;\n const { style } = this.div;\n style.aspectRatio = aspectRatio;\n style.height = \"auto\";\n }\n\n static get MIN_SIZE() {\n return 16;\n }\n\n static canCreateNewEmptyEditor() {\n return true;\n }\n\n /**\n * Get the data to report to the telemetry when the editor is added.\n * @returns {Object}\n */\n get telemetryInitialData() {\n return { action: \"added\" };\n }\n\n /**\n * The telemetry data to use when saving/printing.\n * @returns {Object|null}\n */\n get telemetryFinalData() {\n return null;\n }\n\n _reportTelemetry(data, mustWait = false) {\n if (mustWait) {\n this.#telemetryTimeouts ||= new Map();\n const { action } = data;\n let timeout = this.#telemetryTimeouts.get(action);\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n this._reportTelemetry(data);\n this.#telemetryTimeouts.delete(action);\n if (this.#telemetryTimeouts.size === 0) {\n this.#telemetryTimeouts = null;\n }\n }, AnnotationEditor._telemetryTimeout);\n this.#telemetryTimeouts.set(action, timeout);\n return;\n }\n data.type ||= this.editorType;\n this._uiManager._eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"editing\",\n data,\n },\n });\n }\n\n /**\n * Show or hide this editor.\n * @param {boolean|undefined} visible\n */\n show(visible = this._isVisible) {\n this.div.classList.toggle(\"hidden\", !visible);\n this._isVisible = visible;\n }\n\n enable() {\n if (this.div) {\n this.div.tabIndex = 0;\n }\n this.#disabled = false;\n }\n\n disable() {\n if (this.div) {\n this.div.tabIndex = -1;\n }\n this.#disabled = true;\n }\n\n /**\n * Render an annotation in the annotation layer.\n * @param {Object} annotation\n * @returns {HTMLElement}\n */\n renderAnnotationElement(annotation) {\n let content = annotation.container.querySelector(\".annotationContent\");\n if (!content) {\n content = document.createElement(\"div\");\n content.classList.add(\"annotationContent\", this.editorType);\n annotation.container.prepend(content);\n } else if (content.nodeName === \"CANVAS\") {\n const canvas = content;\n content = document.createElement(\"div\");\n content.classList.add(\"annotationContent\", this.editorType);\n canvas.before(content);\n }\n\n return content;\n }\n\n resetAnnotationElement(annotation) {\n const { firstChild } = annotation.container;\n if (\n firstChild.nodeName === \"DIV\" &&\n firstChild.classList.contains(\"annotationContent\")\n ) {\n firstChild.remove();\n }\n }\n}\n\n// This class is used to fake an editor which has been deleted.\nclass FakeEditor extends AnnotationEditor {\n constructor(params) {\n super(params);\n this.annotationElementId = params.annotationElementId;\n this.deleted = true;\n }\n\n serialize() {\n return {\n id: this.annotationElementId,\n deleted: true,\n pageIndex: this.pageIndex,\n };\n }\n}\n\nexport { AnnotationEditor };\n","/* Copyright 2014 Opera Software ASA\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n *\n * Based on https://code.google.com/p/smhasher/wiki/MurmurHash3.\n * Hashes roughly 100 KB per millisecond on i7 3.4 GHz.\n */\n\nconst SEED = 0xc3d2e1f0;\n// Workaround for missing math precision in JS.\nconst MASK_HIGH = 0xffff0000;\nconst MASK_LOW = 0xffff;\n\nclass MurmurHash3_64 {\n constructor(seed) {\n this.h1 = seed ? seed & 0xffffffff : SEED;\n this.h2 = seed ? seed & 0xffffffff : SEED;\n }\n\n update(input) {\n let data, length;\n if (typeof input === \"string\") {\n data = new Uint8Array(input.length * 2);\n length = 0;\n for (let i = 0, ii = input.length; i < ii; i++) {\n const code = input.charCodeAt(i);\n if (code <= 0xff) {\n data[length++] = code;\n } else {\n data[length++] = code >>> 8;\n data[length++] = code & 0xff;\n }\n }\n } else if (ArrayBuffer.isView(input)) {\n data = input.slice();\n length = data.byteLength;\n } else {\n throw new Error(\"Invalid data format, must be a string or TypedArray.\");\n }\n\n const blockCounts = length >> 2;\n const tailLength = length - blockCounts * 4;\n // We don't care about endianness here.\n const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts);\n let k1 = 0,\n k2 = 0;\n let h1 = this.h1,\n h2 = this.h2;\n const C1 = 0xcc9e2d51,\n C2 = 0x1b873593;\n const C1_LOW = C1 & MASK_LOW,\n C2_LOW = C2 & MASK_LOW;\n\n for (let i = 0; i < blockCounts; i++) {\n if (i & 1) {\n k1 = dataUint32[i];\n k1 = ((k1 * C1) & MASK_HIGH) | ((k1 * C1_LOW) & MASK_LOW);\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = ((k1 * C2) & MASK_HIGH) | ((k1 * C2_LOW) & MASK_LOW);\n h1 ^= k1;\n h1 = (h1 << 13) | (h1 >>> 19);\n h1 = h1 * 5 + 0xe6546b64;\n } else {\n k2 = dataUint32[i];\n k2 = ((k2 * C1) & MASK_HIGH) | ((k2 * C1_LOW) & MASK_LOW);\n k2 = (k2 << 15) | (k2 >>> 17);\n k2 = ((k2 * C2) & MASK_HIGH) | ((k2 * C2_LOW) & MASK_LOW);\n h2 ^= k2;\n h2 = (h2 << 13) | (h2 >>> 19);\n h2 = h2 * 5 + 0xe6546b64;\n }\n }\n\n k1 = 0;\n\n switch (tailLength) {\n case 3:\n k1 ^= data[blockCounts * 4 + 2] << 16;\n /* falls through */\n case 2:\n k1 ^= data[blockCounts * 4 + 1] << 8;\n /* falls through */\n case 1:\n k1 ^= data[blockCounts * 4];\n /* falls through */\n\n k1 = ((k1 * C1) & MASK_HIGH) | ((k1 * C1_LOW) & MASK_LOW);\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = ((k1 * C2) & MASK_HIGH) | ((k1 * C2_LOW) & MASK_LOW);\n if (blockCounts & 1) {\n h1 ^= k1;\n } else {\n h2 ^= k1;\n }\n }\n\n this.h1 = h1;\n this.h2 = h2;\n }\n\n hexdigest() {\n let h1 = this.h1,\n h2 = this.h2;\n\n h1 ^= h2 >>> 1;\n h1 = ((h1 * 0xed558ccd) & MASK_HIGH) | ((h1 * 0x8ccd) & MASK_LOW);\n h2 =\n ((h2 * 0xff51afd7) & MASK_HIGH) |\n (((((h2 << 16) | (h1 >>> 16)) * 0xafd7ed55) & MASK_HIGH) >>> 16);\n h1 ^= h2 >>> 1;\n h1 = ((h1 * 0x1a85ec53) & MASK_HIGH) | ((h1 * 0xec53) & MASK_LOW);\n h2 =\n ((h2 * 0xc4ceb9fe) & MASK_HIGH) |\n (((((h2 << 16) | (h1 >>> 16)) * 0xb9fe1a85) & MASK_HIGH) >>> 16);\n h1 ^= h2 >>> 1;\n\n return (\n (h1 >>> 0).toString(16).padStart(8, \"0\") +\n (h2 >>> 0).toString(16).padStart(8, \"0\")\n );\n }\n}\n\nexport { MurmurHash3_64 };\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { objectFromMap, unreachable } from \"../shared/util.js\";\nimport { AnnotationEditor } from \"./editor/editor.js\";\nimport { MurmurHash3_64 } from \"../shared/murmurhash3.js\";\n\nconst SerializableEmpty = Object.freeze({\n map: null,\n hash: \"\",\n transfer: undefined,\n});\n\n/**\n * Key/value storage for annotation data in forms.\n */\nclass AnnotationStorage {\n #modified = false;\n\n #storage = new Map();\n\n constructor() {\n // Callbacks to signal when the modification state is set or reset.\n // This is used by the viewer to only bind on `beforeunload` if forms\n // are actually edited to prevent doing so unconditionally since that\n // can have undesirable effects.\n this.onSetModified = null;\n this.onResetModified = null;\n this.onAnnotationEditor = null;\n }\n\n /**\n * Get the value for a given key if it exists, or return the default value.\n * @param {string} key\n * @param {Object} defaultValue\n * @returns {Object}\n */\n getValue(key, defaultValue) {\n const value = this.#storage.get(key);\n if (value === undefined) {\n return defaultValue;\n }\n\n return Object.assign(defaultValue, value);\n }\n\n /**\n * Get the value for a given key.\n * @param {string} key\n * @returns {Object}\n */\n getRawValue(key) {\n return this.#storage.get(key);\n }\n\n /**\n * Remove a value from the storage.\n * @param {string} key\n */\n remove(key) {\n this.#storage.delete(key);\n\n if (this.#storage.size === 0) {\n this.resetModified();\n }\n\n if (typeof this.onAnnotationEditor === \"function\") {\n for (const value of this.#storage.values()) {\n if (value instanceof AnnotationEditor) {\n return;\n }\n }\n this.onAnnotationEditor(null);\n }\n }\n\n /**\n * Set the value for a given key\n * @param {string} key\n * @param {Object} value\n */\n setValue(key, value) {\n const obj = this.#storage.get(key);\n let modified = false;\n if (obj !== undefined) {\n for (const [entry, val] of Object.entries(value)) {\n if (obj[entry] !== val) {\n modified = true;\n obj[entry] = val;\n }\n }\n } else {\n modified = true;\n this.#storage.set(key, value);\n }\n if (modified) {\n this.#setModified();\n }\n\n if (\n value instanceof AnnotationEditor &&\n typeof this.onAnnotationEditor === \"function\"\n ) {\n this.onAnnotationEditor(value.constructor._type);\n }\n }\n\n /**\n * Check if the storage contains the given key.\n * @param {string} key\n * @returns {boolean}\n */\n has(key) {\n return this.#storage.has(key);\n }\n\n /**\n * @returns {Object | null}\n */\n getAll() {\n return this.#storage.size > 0 ? objectFromMap(this.#storage) : null;\n }\n\n /**\n * @param {Object} obj\n */\n setAll(obj) {\n for (const [key, val] of Object.entries(obj)) {\n this.setValue(key, val);\n }\n }\n\n get size() {\n return this.#storage.size;\n }\n\n #setModified() {\n if (!this.#modified) {\n this.#modified = true;\n if (typeof this.onSetModified === \"function\") {\n this.onSetModified();\n }\n }\n }\n\n resetModified() {\n if (this.#modified) {\n this.#modified = false;\n if (typeof this.onResetModified === \"function\") {\n this.onResetModified();\n }\n }\n }\n\n /**\n * @returns {PrintAnnotationStorage}\n */\n get print() {\n return new PrintAnnotationStorage(this);\n }\n\n /**\n * PLEASE NOTE: Only intended for usage within the API itself.\n * @ignore\n */\n get serializable() {\n if (this.#storage.size === 0) {\n return SerializableEmpty;\n }\n const map = new Map(),\n hash = new MurmurHash3_64(),\n transfer = [];\n const context = Object.create(null);\n let hasBitmap = false;\n\n for (const [key, val] of this.#storage) {\n const serialized =\n val instanceof AnnotationEditor\n ? val.serialize(/* isForCopying = */ false, context)\n : val;\n if (serialized) {\n map.set(key, serialized);\n\n hash.update(`${key}:${JSON.stringify(serialized)}`);\n hasBitmap ||= !!serialized.bitmap;\n }\n }\n\n if (hasBitmap) {\n // We must transfer the bitmap data separately, since it can be changed\n // during serialization with SVG images.\n for (const value of map.values()) {\n if (value.bitmap) {\n transfer.push(value.bitmap);\n }\n }\n }\n\n return map.size > 0\n ? { map, hash: hash.hexdigest(), transfer }\n : SerializableEmpty;\n }\n\n get editorStats() {\n let stats = null;\n const typeToEditor = new Map();\n for (const value of this.#storage.values()) {\n if (!(value instanceof AnnotationEditor)) {\n continue;\n }\n const editorStats = value.telemetryFinalData;\n if (!editorStats) {\n continue;\n }\n const { type } = editorStats;\n if (!typeToEditor.has(type)) {\n typeToEditor.set(type, Object.getPrototypeOf(value).constructor);\n }\n stats ||= Object.create(null);\n const map = (stats[type] ||= new Map());\n for (const [key, val] of Object.entries(editorStats)) {\n if (key === \"type\") {\n continue;\n }\n let counters = map.get(key);\n if (!counters) {\n counters = new Map();\n map.set(key, counters);\n }\n const count = counters.get(val) ?? 0;\n counters.set(val, count + 1);\n }\n }\n for (const [type, editor] of typeToEditor) {\n stats[type] = editor.computeTelemetryFinalData(stats[type]);\n }\n return stats;\n }\n}\n\n/**\n * A special `AnnotationStorage` for use during printing, where the serializable\n * data is *frozen* upon initialization, to prevent scripting from modifying its\n * contents. (Necessary since printing is triggered synchronously in browsers.)\n */\nclass PrintAnnotationStorage extends AnnotationStorage {\n #serializable;\n\n constructor(parent) {\n super();\n const { map, hash, transfer } = parent.serializable;\n // Create a *copy* of the data, since Objects are passed by reference in JS.\n const clone = structuredClone(map, transfer ? { transfer } : null);\n\n this.#serializable = { map: clone, hash, transfer };\n }\n\n /**\n * @returns {PrintAnnotationStorage}\n */\n // eslint-disable-next-line getter-return\n get print() {\n unreachable(\"Should not call PrintAnnotationStorage.print\");\n }\n\n /**\n * PLEASE NOTE: Only intended for usage within the API itself.\n * @ignore\n */\n get serializable() {\n return this.#serializable;\n }\n}\n\nexport { AnnotationStorage, PrintAnnotationStorage, SerializableEmpty };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n assert,\n bytesToString,\n FontRenderOps,\n isNodeJS,\n shadow,\n string32,\n unreachable,\n warn,\n} from \"../shared/util.js\";\n\nclass FontLoader {\n #systemFonts = new Set();\n\n constructor({\n ownerDocument = globalThis.document,\n styleElement = null, // For testing only.\n }) {\n this._document = ownerDocument;\n\n this.nativeFontFaces = new Set();\n this.styleElement =\n typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")\n ? styleElement\n : null;\n\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n this.loadingRequests = [];\n this.loadTestFontId = 0;\n }\n }\n\n addNativeFontFace(nativeFontFace) {\n this.nativeFontFaces.add(nativeFontFace);\n this._document.fonts.add(nativeFontFace);\n }\n\n removeNativeFontFace(nativeFontFace) {\n this.nativeFontFaces.delete(nativeFontFace);\n this._document.fonts.delete(nativeFontFace);\n }\n\n insertRule(rule) {\n if (!this.styleElement) {\n this.styleElement = this._document.createElement(\"style\");\n this._document.documentElement\n .getElementsByTagName(\"head\")[0]\n .append(this.styleElement);\n }\n const styleSheet = this.styleElement.sheet;\n styleSheet.insertRule(rule, styleSheet.cssRules.length);\n }\n\n clear() {\n for (const nativeFontFace of this.nativeFontFaces) {\n this._document.fonts.delete(nativeFontFace);\n }\n this.nativeFontFaces.clear();\n this.#systemFonts.clear();\n\n if (this.styleElement) {\n // Note: ChildNode.remove doesn't throw if the parentNode is undefined.\n this.styleElement.remove();\n this.styleElement = null;\n }\n }\n\n async loadSystemFont({ systemFontInfo: info, _inspectFont }) {\n if (!info || this.#systemFonts.has(info.loadedName)) {\n return;\n }\n assert(\n !this.disableFontFace,\n \"loadSystemFont shouldn't be called when `disableFontFace` is set.\"\n );\n\n if (this.isFontLoadingAPISupported) {\n const { loadedName, src, style } = info;\n const fontFace = new FontFace(loadedName, src, style);\n this.addNativeFontFace(fontFace);\n try {\n await fontFace.load();\n this.#systemFonts.add(loadedName);\n _inspectFont?.(info);\n } catch {\n warn(\n `Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`\n );\n\n this.removeNativeFontFace(fontFace);\n }\n return;\n }\n\n unreachable(\n \"Not implemented: loadSystemFont without the Font Loading API.\"\n );\n }\n\n async bind(font) {\n // Add the font to the DOM only once; skip if the font is already loaded.\n if (font.attached || (font.missingFile && !font.systemFontInfo)) {\n return;\n }\n font.attached = true;\n\n if (font.systemFontInfo) {\n await this.loadSystemFont(font);\n return;\n }\n\n if (this.isFontLoadingAPISupported) {\n const nativeFontFace = font.createNativeFontFace();\n if (nativeFontFace) {\n this.addNativeFontFace(nativeFontFace);\n try {\n await nativeFontFace.loaded;\n } catch (ex) {\n warn(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);\n\n // When font loading failed, fall back to the built-in font renderer.\n font.disableFontFace = true;\n throw ex;\n }\n }\n return; // The font was, asynchronously, loaded.\n }\n\n // !this.isFontLoadingAPISupported\n const rule = font.createFontFaceRule();\n if (rule) {\n this.insertRule(rule);\n\n if (this.isSyncFontLoadingSupported) {\n return; // The font was, synchronously, loaded.\n }\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: async font loading\");\n }\n await new Promise(resolve => {\n const request = this._queueLoadingCallback(resolve);\n this._prepareFontLoadEvent(font, request);\n });\n // The font was, asynchronously, loaded.\n }\n }\n\n get isFontLoadingAPISupported() {\n const hasFonts = !!this._document?.fonts;\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n return shadow(\n this,\n \"isFontLoadingAPISupported\",\n hasFonts && !this.styleElement\n );\n }\n return shadow(this, \"isFontLoadingAPISupported\", hasFonts);\n }\n\n get isSyncFontLoadingSupported() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n return shadow(this, \"isSyncFontLoadingSupported\", true);\n }\n\n let supported = false;\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"CHROME\")) {\n if (isNodeJS) {\n // Node.js - we can pretend that sync font loading is supported.\n supported = true;\n } else if (\n typeof navigator !== \"undefined\" &&\n typeof navigator?.userAgent === \"string\" &&\n // User agent string sniffing is bad, but there is no reliable way to\n // tell if the font is fully loaded and ready to be used with canvas.\n /Mozilla\\/5.0.*?rv:\\d+.*? Gecko/.test(navigator.userAgent)\n ) {\n // Firefox, from version 14, supports synchronous font loading.\n supported = true;\n }\n }\n return shadow(this, \"isSyncFontLoadingSupported\", supported);\n }\n\n _queueLoadingCallback(callback) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: _queueLoadingCallback\");\n }\n\n function completeRequest() {\n assert(!request.done, \"completeRequest() cannot be called twice.\");\n request.done = true;\n\n // Sending all completed requests in order of how they were queued.\n while (loadingRequests.length > 0 && loadingRequests[0].done) {\n const otherRequest = loadingRequests.shift();\n setTimeout(otherRequest.callback, 0);\n }\n }\n\n const { loadingRequests } = this;\n const request = {\n done: false,\n complete: completeRequest,\n callback,\n };\n loadingRequests.push(request);\n return request;\n }\n\n get _loadTestFont() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: _loadTestFont\");\n }\n\n // This is a CFF font with 1 glyph for '.' that fills its entire width\n // and height.\n const testFont = atob(\n \"T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA\" +\n \"FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA\" +\n \"ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA\" +\n \"AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1\" +\n \"AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD\" +\n \"6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM\" +\n \"AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D\" +\n \"IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA\" +\n \"AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA\" +\n \"AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB\" +\n \"AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY\" +\n \"AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA\" +\n \"AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA\" +\n \"AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC\" +\n \"AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3\" +\n \"Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj\" +\n \"FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==\"\n );\n return shadow(this, \"_loadTestFont\", testFont);\n }\n\n _prepareFontLoadEvent(font, request) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: _prepareFontLoadEvent\");\n }\n\n /** Hack begin */\n // There's currently no event when a font has finished downloading so the\n // following code is a dirty hack to 'guess' when a font is ready.\n // It's assumed fonts are loaded in order, so add a known test font after\n // the desired fonts and then test for the loading of that test font.\n\n function int32(data, offset) {\n return (\n (data.charCodeAt(offset) << 24) |\n (data.charCodeAt(offset + 1) << 16) |\n (data.charCodeAt(offset + 2) << 8) |\n (data.charCodeAt(offset + 3) & 0xff)\n );\n }\n function spliceString(s, offset, remove, insert) {\n const chunk1 = s.substring(0, offset);\n const chunk2 = s.substring(offset + remove);\n return chunk1 + insert + chunk2;\n }\n let i, ii;\n\n // The temporary canvas is used to determine if fonts are loaded.\n const canvas = this._document.createElement(\"canvas\");\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext(\"2d\");\n\n let called = 0;\n function isFontReady(name, callback) {\n // With setTimeout clamping this gives the font ~100ms to load.\n if (++called > 30) {\n warn(\"Load test font never loaded.\");\n callback();\n return;\n }\n ctx.font = \"30px \" + name;\n ctx.fillText(\".\", 0, 20);\n const imageData = ctx.getImageData(0, 0, 1, 1);\n if (imageData.data[3] > 0) {\n callback();\n return;\n }\n setTimeout(isFontReady.bind(null, name, callback));\n }\n\n const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;\n // Chromium seems to cache fonts based on a hash of the actual font data,\n // so the font must be modified for each load test else it will appear to\n // be loaded already.\n // TODO: This could maybe be made faster by avoiding the btoa of the full\n // font by splitting it in chunks before hand and padding the font id.\n let data = this._loadTestFont;\n const COMMENT_OFFSET = 976; // has to be on 4 byte boundary (for checksum)\n data = spliceString(\n data,\n COMMENT_OFFSET,\n loadTestFontId.length,\n loadTestFontId\n );\n // CFF checksum is important for IE, adjusting it\n const CFF_CHECKSUM_OFFSET = 16;\n const XXXX_VALUE = 0x58585858; // the \"comment\" filled with 'X'\n let checksum = int32(data, CFF_CHECKSUM_OFFSET);\n for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {\n checksum = (checksum - XXXX_VALUE + int32(loadTestFontId, i)) | 0;\n }\n if (i < loadTestFontId.length) {\n // align to 4 bytes boundary\n checksum = (checksum - XXXX_VALUE + int32(loadTestFontId + \"XXX\", i)) | 0;\n }\n data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum));\n\n const url = `url(data:font/opentype;base64,${btoa(data)});`;\n const rule = `@font-face {font-family:\"${loadTestFontId}\";src:${url}}`;\n this.insertRule(rule);\n\n const div = this._document.createElement(\"div\");\n div.style.visibility = \"hidden\";\n div.style.width = div.style.height = \"10px\";\n div.style.position = \"absolute\";\n div.style.top = div.style.left = \"0px\";\n\n for (const name of [font.loadedName, loadTestFontId]) {\n const span = this._document.createElement(\"span\");\n span.textContent = \"Hi\";\n span.style.fontFamily = name;\n div.append(span);\n }\n this._document.body.append(div);\n\n isFontReady(loadTestFontId, () => {\n div.remove();\n request.complete();\n });\n /** Hack end */\n }\n}\n\nclass FontFaceObject {\n constructor(translatedData, { disableFontFace = false, inspectFont = null }) {\n this.compiledGlyphs = Object.create(null);\n // importing translated data\n for (const i in translatedData) {\n this[i] = translatedData[i];\n }\n this.disableFontFace = disableFontFace === true;\n this._inspectFont = inspectFont;\n }\n\n createNativeFontFace() {\n if (!this.data || this.disableFontFace) {\n return null;\n }\n let nativeFontFace;\n if (!this.cssFontInfo) {\n nativeFontFace = new FontFace(this.loadedName, this.data, {});\n } else {\n const css = {\n weight: this.cssFontInfo.fontWeight,\n };\n if (this.cssFontInfo.italicAngle) {\n css.style = `oblique ${this.cssFontInfo.italicAngle}deg`;\n }\n nativeFontFace = new FontFace(\n this.cssFontInfo.fontFamily,\n this.data,\n css\n );\n }\n\n this._inspectFont?.(this);\n return nativeFontFace;\n }\n\n createFontFaceRule() {\n if (!this.data || this.disableFontFace) {\n return null;\n }\n const data = bytesToString(this.data);\n // Add the @font-face rule to the document.\n const url = `url(data:${this.mimetype};base64,${btoa(data)});`;\n let rule;\n if (!this.cssFontInfo) {\n rule = `@font-face {font-family:\"${this.loadedName}\";src:${url}}`;\n } else {\n let css = `font-weight: ${this.cssFontInfo.fontWeight};`;\n if (this.cssFontInfo.italicAngle) {\n css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`;\n }\n rule = `@font-face {font-family:\"${this.cssFontInfo.fontFamily}\";${css}src:${url}}`;\n }\n\n this._inspectFont?.(this, url);\n return rule;\n }\n\n getPathGenerator(objs, character) {\n if (this.compiledGlyphs[character] !== undefined) {\n return this.compiledGlyphs[character];\n }\n\n let cmds;\n try {\n cmds = objs.get(this.loadedName + \"_path_\" + character);\n } catch (ex) {\n warn(`getPathGenerator - ignoring character: \"${ex}\".`);\n }\n\n if (!Array.isArray(cmds) || cmds.length === 0) {\n return (this.compiledGlyphs[character] = function (c, size) {\n // No-op function, to allow rendering to continue.\n });\n }\n\n const commands = [];\n for (let i = 0, ii = cmds.length; i < ii; ) {\n switch (cmds[i++]) {\n case FontRenderOps.BEZIER_CURVE_TO:\n {\n const [a, b, c, d, e, f] = cmds.slice(i, i + 6);\n commands.push(ctx => ctx.bezierCurveTo(a, b, c, d, e, f));\n i += 6;\n }\n break;\n case FontRenderOps.MOVE_TO:\n {\n const [a, b] = cmds.slice(i, i + 2);\n commands.push(ctx => ctx.moveTo(a, b));\n i += 2;\n }\n break;\n case FontRenderOps.LINE_TO:\n {\n const [a, b] = cmds.slice(i, i + 2);\n commands.push(ctx => ctx.lineTo(a, b));\n i += 2;\n }\n break;\n case FontRenderOps.QUADRATIC_CURVE_TO:\n {\n const [a, b, c, d] = cmds.slice(i, i + 4);\n commands.push(ctx => ctx.quadraticCurveTo(a, b, c, d));\n i += 4;\n }\n break;\n case FontRenderOps.RESTORE:\n commands.push(ctx => ctx.restore());\n break;\n case FontRenderOps.SAVE:\n commands.push(ctx => ctx.save());\n break;\n case FontRenderOps.SCALE:\n // The scale command must be at the third position, after save and\n // transform (for the font matrix) commands (see also\n // font_renderer.js).\n // The goal is to just scale the canvas and then run the commands loop\n // without the need to pass the size parameter to each command.\n assert(\n commands.length === 2,\n \"Scale command is only valid at the third position.\"\n );\n break;\n case FontRenderOps.TRANSFORM:\n {\n const [a, b, c, d, e, f] = cmds.slice(i, i + 6);\n commands.push(ctx => ctx.transform(a, b, c, d, e, f));\n i += 6;\n }\n break;\n case FontRenderOps.TRANSLATE:\n {\n const [a, b] = cmds.slice(i, i + 2);\n commands.push(ctx => ctx.translate(a, b));\n i += 2;\n }\n break;\n }\n }\n\n return (this.compiledGlyphs[character] = function glyphDrawer(ctx, size) {\n commands[0](ctx);\n commands[1](ctx);\n ctx.scale(size, -size);\n for (let i = 2, ii = commands.length; i < ii; i++) {\n commands[i](ctx);\n }\n });\n }\n}\n\nexport { FontFaceObject, FontLoader };\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n BaseCanvasFactory,\n BaseCMapReaderFactory,\n BaseFilterFactory,\n BaseStandardFontDataFactory,\n} from \"./base_factory.js\";\nimport { isNodeJS, warn } from \"../shared/util.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\n 'Module \"./node_utils.js\" shall not be used with MOZCENTRAL builds.'\n );\n}\n\nif (isNodeJS) {\n // eslint-disable-next-line no-var\n var packageCapability = Promise.withResolvers();\n // eslint-disable-next-line no-var\n var packageMap = null;\n\n const loadPackages = async () => {\n // Native packages.\n const fs = await __non_webpack_import__(\"fs\"),\n http = await __non_webpack_import__(\"http\"),\n https = await __non_webpack_import__(\"https\"),\n url = await __non_webpack_import__(\"url\");\n\n // Optional, third-party, packages.\n let canvas, path2d;\n if (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"SKIP_BABEL\")) {\n try {\n canvas = await __non_webpack_import__(\"canvas\");\n } catch {}\n try {\n path2d = await __non_webpack_import__(\"path2d\");\n } catch {}\n }\n\n return new Map(Object.entries({ fs, http, https, url, canvas, path2d }));\n };\n\n loadPackages().then(\n map => {\n packageMap = map;\n packageCapability.resolve();\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"SKIP_BABEL\")) {\n return;\n }\n if (!globalThis.DOMMatrix) {\n const DOMMatrix = map.get(\"canvas\")?.DOMMatrix;\n\n if (DOMMatrix) {\n globalThis.DOMMatrix = DOMMatrix;\n } else {\n warn(\"Cannot polyfill `DOMMatrix`, rendering may be broken.\");\n }\n }\n if (!globalThis.Path2D) {\n const CanvasRenderingContext2D =\n map.get(\"canvas\")?.CanvasRenderingContext2D;\n const applyPath2DToCanvasRenderingContext =\n map.get(\"path2d\")?.applyPath2DToCanvasRenderingContext;\n const Path2D = map.get(\"path2d\")?.Path2D;\n\n if (\n CanvasRenderingContext2D &&\n applyPath2DToCanvasRenderingContext &&\n Path2D\n ) {\n applyPath2DToCanvasRenderingContext(CanvasRenderingContext2D);\n globalThis.Path2D = Path2D;\n } else {\n warn(\"Cannot polyfill `Path2D`, rendering may be broken.\");\n }\n }\n },\n reason => {\n warn(`loadPackages: ${reason}`);\n\n packageMap = new Map();\n packageCapability.resolve();\n }\n );\n}\n\nclass NodePackages {\n static get promise() {\n return packageCapability.promise;\n }\n\n static get(name) {\n return packageMap?.get(name);\n }\n}\n\nconst fetchData = function (url) {\n const fs = NodePackages.get(\"fs\");\n return fs.promises.readFile(url).then(data => new Uint8Array(data));\n};\n\nclass NodeFilterFactory extends BaseFilterFactory {}\n\nclass NodeCanvasFactory extends BaseCanvasFactory {\n /**\n * @ignore\n */\n _createCanvas(width, height) {\n const canvas = NodePackages.get(\"canvas\");\n return canvas.createCanvas(width, height);\n }\n}\n\nclass NodeCMapReaderFactory extends BaseCMapReaderFactory {\n /**\n * @ignore\n */\n _fetchData(url, compressionType) {\n return fetchData(url).then(data => ({ cMapData: data, compressionType }));\n }\n}\n\nclass NodeStandardFontDataFactory extends BaseStandardFontDataFactory {\n /**\n * @ignore\n */\n _fetchData(url) {\n return fetchData(url);\n }\n}\n\nexport {\n NodeCanvasFactory,\n NodeCMapReaderFactory,\n NodeFilterFactory,\n NodePackages,\n NodeStandardFontDataFactory,\n};\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FormatError, info, unreachable, Util } from \"../shared/util.js\";\nimport { getCurrentTransform } from \"./display_utils.js\";\n\nconst PathType = {\n FILL: \"Fill\",\n STROKE: \"Stroke\",\n SHADING: \"Shading\",\n};\n\nfunction applyBoundingBox(ctx, bbox) {\n if (!bbox) {\n return;\n }\n const width = bbox[2] - bbox[0];\n const height = bbox[3] - bbox[1];\n const region = new Path2D();\n region.rect(bbox[0], bbox[1], width, height);\n ctx.clip(region);\n}\n\nclass BaseShadingPattern {\n constructor() {\n if (this.constructor === BaseShadingPattern) {\n unreachable(\"Cannot initialize BaseShadingPattern.\");\n }\n }\n\n getPattern() {\n unreachable(\"Abstract method `getPattern` called.\");\n }\n}\n\nclass RadialAxialShadingPattern extends BaseShadingPattern {\n constructor(IR) {\n super();\n this._type = IR[1];\n this._bbox = IR[2];\n this._colorStops = IR[3];\n this._p0 = IR[4];\n this._p1 = IR[5];\n this._r0 = IR[6];\n this._r1 = IR[7];\n this.matrix = null;\n }\n\n _createGradient(ctx) {\n let grad;\n if (this._type === \"axial\") {\n grad = ctx.createLinearGradient(\n this._p0[0],\n this._p0[1],\n this._p1[0],\n this._p1[1]\n );\n } else if (this._type === \"radial\") {\n grad = ctx.createRadialGradient(\n this._p0[0],\n this._p0[1],\n this._r0,\n this._p1[0],\n this._p1[1],\n this._r1\n );\n }\n\n for (const colorStop of this._colorStops) {\n grad.addColorStop(colorStop[0], colorStop[1]);\n }\n return grad;\n }\n\n getPattern(ctx, owner, inverse, pathType) {\n let pattern;\n if (pathType === PathType.STROKE || pathType === PathType.FILL) {\n const ownerBBox = owner.current.getClippedPathBoundingBox(\n pathType,\n getCurrentTransform(ctx)\n ) || [0, 0, 0, 0];\n // Create a canvas that is only as big as the current path. This doesn't\n // allow us to cache the pattern, but it generally creates much smaller\n // canvases and saves memory use. See bug 1722807 for an example.\n const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1;\n const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1;\n\n const tmpCanvas = owner.cachedCanvases.getCanvas(\n \"pattern\",\n width,\n height,\n true\n );\n\n const tmpCtx = tmpCanvas.context;\n tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);\n tmpCtx.beginPath();\n tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);\n // Non shading fill patterns are positioned relative to the base transform\n // (usually the page's initial transform), but we may have created a\n // smaller canvas based on the path, so we must account for the shift.\n tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]);\n inverse = Util.transform(inverse, [\n 1,\n 0,\n 0,\n 1,\n ownerBBox[0],\n ownerBBox[1],\n ]);\n\n tmpCtx.transform(...owner.baseTransform);\n if (this.matrix) {\n tmpCtx.transform(...this.matrix);\n }\n applyBoundingBox(tmpCtx, this._bbox);\n\n tmpCtx.fillStyle = this._createGradient(tmpCtx);\n tmpCtx.fill();\n\n pattern = ctx.createPattern(tmpCanvas.canvas, \"no-repeat\");\n const domMatrix = new DOMMatrix(inverse);\n pattern.setTransform(domMatrix);\n } else {\n // Shading fills are applied relative to the current matrix which is also\n // how canvas gradients work, so there's no need to do anything special\n // here.\n applyBoundingBox(ctx, this._bbox);\n pattern = this._createGradient(ctx);\n }\n return pattern;\n }\n}\n\nfunction drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {\n // Very basic Gouraud-shaded triangle rasterization algorithm.\n const coords = context.coords,\n colors = context.colors;\n const bytes = data.data,\n rowSize = data.width * 4;\n let tmp;\n if (coords[p1 + 1] > coords[p2 + 1]) {\n tmp = p1;\n p1 = p2;\n p2 = tmp;\n tmp = c1;\n c1 = c2;\n c2 = tmp;\n }\n if (coords[p2 + 1] > coords[p3 + 1]) {\n tmp = p2;\n p2 = p3;\n p3 = tmp;\n tmp = c2;\n c2 = c3;\n c3 = tmp;\n }\n if (coords[p1 + 1] > coords[p2 + 1]) {\n tmp = p1;\n p1 = p2;\n p2 = tmp;\n tmp = c1;\n c1 = c2;\n c2 = tmp;\n }\n const x1 = (coords[p1] + context.offsetX) * context.scaleX;\n const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;\n const x2 = (coords[p2] + context.offsetX) * context.scaleX;\n const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;\n const x3 = (coords[p3] + context.offsetX) * context.scaleX;\n const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;\n if (y1 >= y3) {\n return;\n }\n const c1r = colors[c1],\n c1g = colors[c1 + 1],\n c1b = colors[c1 + 2];\n const c2r = colors[c2],\n c2g = colors[c2 + 1],\n c2b = colors[c2 + 2];\n const c3r = colors[c3],\n c3g = colors[c3 + 1],\n c3b = colors[c3 + 2];\n\n const minY = Math.round(y1),\n maxY = Math.round(y3);\n let xa, car, cag, cab;\n let xb, cbr, cbg, cbb;\n for (let y = minY; y <= maxY; y++) {\n if (y < y2) {\n const k = y < y1 ? 0 : (y1 - y) / (y1 - y2);\n xa = x1 - (x1 - x2) * k;\n car = c1r - (c1r - c2r) * k;\n cag = c1g - (c1g - c2g) * k;\n cab = c1b - (c1b - c2b) * k;\n } else {\n let k;\n if (y > y3) {\n k = 1;\n } else if (y2 === y3) {\n k = 0;\n } else {\n k = (y2 - y) / (y2 - y3);\n }\n xa = x2 - (x2 - x3) * k;\n car = c2r - (c2r - c3r) * k;\n cag = c2g - (c2g - c3g) * k;\n cab = c2b - (c2b - c3b) * k;\n }\n\n let k;\n if (y < y1) {\n k = 0;\n } else if (y > y3) {\n k = 1;\n } else {\n k = (y1 - y) / (y1 - y3);\n }\n xb = x1 - (x1 - x3) * k;\n cbr = c1r - (c1r - c3r) * k;\n cbg = c1g - (c1g - c3g) * k;\n cbb = c1b - (c1b - c3b) * k;\n const x1_ = Math.round(Math.min(xa, xb));\n const x2_ = Math.round(Math.max(xa, xb));\n let j = rowSize * y + x1_ * 4;\n for (let x = x1_; x <= x2_; x++) {\n k = (xa - x) / (xa - xb);\n if (k < 0) {\n k = 0;\n } else if (k > 1) {\n k = 1;\n }\n bytes[j++] = (car - (car - cbr) * k) | 0;\n bytes[j++] = (cag - (cag - cbg) * k) | 0;\n bytes[j++] = (cab - (cab - cbb) * k) | 0;\n bytes[j++] = 255;\n }\n }\n}\n\nfunction drawFigure(data, figure, context) {\n const ps = figure.coords;\n const cs = figure.colors;\n let i, ii;\n switch (figure.type) {\n case \"lattice\":\n const verticesPerRow = figure.verticesPerRow;\n const rows = Math.floor(ps.length / verticesPerRow) - 1;\n const cols = verticesPerRow - 1;\n for (i = 0; i < rows; i++) {\n let q = i * verticesPerRow;\n for (let j = 0; j < cols; j++, q++) {\n drawTriangle(\n data,\n context,\n ps[q],\n ps[q + 1],\n ps[q + verticesPerRow],\n cs[q],\n cs[q + 1],\n cs[q + verticesPerRow]\n );\n drawTriangle(\n data,\n context,\n ps[q + verticesPerRow + 1],\n ps[q + 1],\n ps[q + verticesPerRow],\n cs[q + verticesPerRow + 1],\n cs[q + 1],\n cs[q + verticesPerRow]\n );\n }\n }\n break;\n case \"triangles\":\n for (i = 0, ii = ps.length; i < ii; i += 3) {\n drawTriangle(\n data,\n context,\n ps[i],\n ps[i + 1],\n ps[i + 2],\n cs[i],\n cs[i + 1],\n cs[i + 2]\n );\n }\n break;\n default:\n throw new Error(\"illegal figure\");\n }\n}\n\nclass MeshShadingPattern extends BaseShadingPattern {\n constructor(IR) {\n super();\n this._coords = IR[2];\n this._colors = IR[3];\n this._figures = IR[4];\n this._bounds = IR[5];\n this._bbox = IR[7];\n this._background = IR[8];\n this.matrix = null;\n }\n\n _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) {\n // we will increase scale on some weird factor to let antialiasing take\n // care of \"rough\" edges\n const EXPECTED_SCALE = 1.1;\n // MAX_PATTERN_SIZE is used to avoid OOM situation.\n const MAX_PATTERN_SIZE = 3000; // 10in @ 300dpi shall be enough\n // We need to keep transparent border around our pattern for fill():\n // createPattern with 'no-repeat' will bleed edges across entire area.\n const BORDER_SIZE = 2;\n\n const offsetX = Math.floor(this._bounds[0]);\n const offsetY = Math.floor(this._bounds[1]);\n const boundsWidth = Math.ceil(this._bounds[2]) - offsetX;\n const boundsHeight = Math.ceil(this._bounds[3]) - offsetY;\n\n const width = Math.min(\n Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)),\n MAX_PATTERN_SIZE\n );\n const height = Math.min(\n Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)),\n MAX_PATTERN_SIZE\n );\n const scaleX = boundsWidth / width;\n const scaleY = boundsHeight / height;\n\n const context = {\n coords: this._coords,\n colors: this._colors,\n offsetX: -offsetX,\n offsetY: -offsetY,\n scaleX: 1 / scaleX,\n scaleY: 1 / scaleY,\n };\n\n const paddedWidth = width + BORDER_SIZE * 2;\n const paddedHeight = height + BORDER_SIZE * 2;\n\n const tmpCanvas = cachedCanvases.getCanvas(\n \"mesh\",\n paddedWidth,\n paddedHeight,\n false\n );\n const tmpCtx = tmpCanvas.context;\n\n const data = tmpCtx.createImageData(width, height);\n if (backgroundColor) {\n const bytes = data.data;\n for (let i = 0, ii = bytes.length; i < ii; i += 4) {\n bytes[i] = backgroundColor[0];\n bytes[i + 1] = backgroundColor[1];\n bytes[i + 2] = backgroundColor[2];\n bytes[i + 3] = 255;\n }\n }\n for (const figure of this._figures) {\n drawFigure(data, figure, context);\n }\n tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);\n const canvas = tmpCanvas.canvas;\n\n return {\n canvas,\n offsetX: offsetX - BORDER_SIZE * scaleX,\n offsetY: offsetY - BORDER_SIZE * scaleY,\n scaleX,\n scaleY,\n };\n }\n\n getPattern(ctx, owner, inverse, pathType) {\n applyBoundingBox(ctx, this._bbox);\n let scale;\n if (pathType === PathType.SHADING) {\n scale = Util.singularValueDecompose2dScale(getCurrentTransform(ctx));\n } else {\n // Obtain scale from matrix and current transformation matrix.\n scale = Util.singularValueDecompose2dScale(owner.baseTransform);\n if (this.matrix) {\n const matrixScale = Util.singularValueDecompose2dScale(this.matrix);\n scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];\n }\n }\n\n // Rasterizing on the main thread since sending/queue large canvases\n // might cause OOM.\n const temporaryPatternCanvas = this._createMeshCanvas(\n scale,\n pathType === PathType.SHADING ? null : this._background,\n owner.cachedCanvases\n );\n\n if (pathType !== PathType.SHADING) {\n ctx.setTransform(...owner.baseTransform);\n if (this.matrix) {\n ctx.transform(...this.matrix);\n }\n }\n\n ctx.translate(\n temporaryPatternCanvas.offsetX,\n temporaryPatternCanvas.offsetY\n );\n ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);\n\n return ctx.createPattern(temporaryPatternCanvas.canvas, \"no-repeat\");\n }\n}\n\nclass DummyShadingPattern extends BaseShadingPattern {\n getPattern() {\n return \"hotpink\";\n }\n}\n\nfunction getShadingPattern(IR) {\n switch (IR[0]) {\n case \"RadialAxial\":\n return new RadialAxialShadingPattern(IR);\n case \"Mesh\":\n return new MeshShadingPattern(IR);\n case \"Dummy\":\n return new DummyShadingPattern();\n }\n throw new Error(`Unknown IR type: ${IR[0]}`);\n}\n\nconst PaintType = {\n COLORED: 1,\n UNCOLORED: 2,\n};\n\nclass TilingPattern {\n // 10in @ 300dpi shall be enough.\n static MAX_PATTERN_SIZE = 3000;\n\n constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) {\n this.operatorList = IR[2];\n this.matrix = IR[3];\n this.bbox = IR[4];\n this.xstep = IR[5];\n this.ystep = IR[6];\n this.paintType = IR[7];\n this.tilingType = IR[8];\n this.color = color;\n this.ctx = ctx;\n this.canvasGraphicsFactory = canvasGraphicsFactory;\n this.baseTransform = baseTransform;\n }\n\n createPatternCanvas(owner) {\n const operatorList = this.operatorList;\n const bbox = this.bbox;\n const xstep = this.xstep;\n const ystep = this.ystep;\n const paintType = this.paintType;\n const tilingType = this.tilingType;\n const color = this.color;\n const canvasGraphicsFactory = this.canvasGraphicsFactory;\n\n info(\"TilingType: \" + tilingType);\n\n // A tiling pattern as defined by PDF spec 8.7.2 is a cell whose size is\n // described by bbox, and may repeat regularly by shifting the cell by\n // xstep and ystep.\n // Because the HTML5 canvas API does not support pattern repetition with\n // gaps in between, we use the xstep/ystep instead of the bbox's size.\n //\n // This has the following consequences (similarly for ystep):\n //\n // - If xstep is the same as bbox, then there is no observable difference.\n //\n // - If xstep is larger than bbox, then the pattern canvas is partially\n // empty: the area bounded by bbox is painted, the outside area is void.\n //\n // - If xstep is smaller than bbox, then the pixels between xstep and the\n // bbox boundary will be missing. This is INCORRECT behavior.\n // \"Figures on adjacent tiles should not overlap\" (PDF spec 8.7.3.1),\n // but overlapping cells without common pixels are still valid.\n // TODO: Fix the implementation, to allow this scenario to be painted\n // correctly.\n\n const x0 = bbox[0],\n y0 = bbox[1],\n x1 = bbox[2],\n y1 = bbox[3];\n\n // Obtain scale from matrix and current transformation matrix.\n const matrixScale = Util.singularValueDecompose2dScale(this.matrix);\n const curMatrixScale = Util.singularValueDecompose2dScale(\n this.baseTransform\n );\n const combinedScale = [\n matrixScale[0] * curMatrixScale[0],\n matrixScale[1] * curMatrixScale[1],\n ];\n\n // Use width and height values that are as close as possible to the end\n // result when the pattern is used. Too low value makes the pattern look\n // blurry. Too large value makes it look too crispy.\n const dimx = this.getSizeAndScale(\n xstep,\n this.ctx.canvas.width,\n combinedScale[0]\n );\n const dimy = this.getSizeAndScale(\n ystep,\n this.ctx.canvas.height,\n combinedScale[1]\n );\n\n const tmpCanvas = owner.cachedCanvases.getCanvas(\n \"pattern\",\n dimx.size,\n dimy.size,\n true\n );\n const tmpCtx = tmpCanvas.context;\n const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);\n graphics.groupLevel = owner.groupLevel;\n\n this.setFillAndStrokeStyleToContext(graphics, paintType, color);\n\n let adjustedX0 = x0;\n let adjustedY0 = y0;\n let adjustedX1 = x1;\n let adjustedY1 = y1;\n // Some bounding boxes have negative x0/y0 coordinates which will cause the\n // some of the drawing to be off of the canvas. To avoid this shift the\n // bounding box over.\n if (x0 < 0) {\n adjustedX0 = 0;\n adjustedX1 += Math.abs(x0);\n }\n if (y0 < 0) {\n adjustedY0 = 0;\n adjustedY1 += Math.abs(y0);\n }\n tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0));\n graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);\n\n // To match CanvasGraphics beginDrawing we must save the context here or\n // else we end up with unbalanced save/restores.\n tmpCtx.save();\n\n this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1);\n\n graphics.baseTransform = getCurrentTransform(graphics.ctx);\n\n graphics.executeOperatorList(operatorList);\n\n graphics.endDrawing();\n\n return {\n canvas: tmpCanvas.canvas,\n scaleX: dimx.scale,\n scaleY: dimy.scale,\n offsetX: adjustedX0,\n offsetY: adjustedY0,\n };\n }\n\n getSizeAndScale(step, realOutputSize, scale) {\n // xstep / ystep may be negative -- normalize.\n step = Math.abs(step);\n // MAX_PATTERN_SIZE is used to avoid OOM situation.\n // Use the destination canvas's size if it is bigger than the hard-coded\n // limit of MAX_PATTERN_SIZE to avoid clipping patterns that cover the\n // whole canvas.\n const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize);\n let size = Math.ceil(step * scale);\n if (size >= maxSize) {\n size = maxSize;\n } else {\n scale = size / step;\n }\n return { scale, size };\n }\n\n clipBbox(graphics, x0, y0, x1, y1) {\n const bboxWidth = x1 - x0;\n const bboxHeight = y1 - y0;\n graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);\n graphics.current.updateRectMinMax(getCurrentTransform(graphics.ctx), [\n x0,\n y0,\n x1,\n y1,\n ]);\n graphics.clip();\n graphics.endPath();\n }\n\n setFillAndStrokeStyleToContext(graphics, paintType, color) {\n const context = graphics.ctx,\n current = graphics.current;\n switch (paintType) {\n case PaintType.COLORED:\n const ctx = this.ctx;\n context.fillStyle = ctx.fillStyle;\n context.strokeStyle = ctx.strokeStyle;\n current.fillColor = ctx.fillStyle;\n current.strokeColor = ctx.strokeStyle;\n break;\n case PaintType.UNCOLORED:\n const cssColor = Util.makeHexColor(color[0], color[1], color[2]);\n context.fillStyle = cssColor;\n context.strokeStyle = cssColor;\n // Set color needed by image masks (fixes issues 3226 and 8741).\n current.fillColor = cssColor;\n current.strokeColor = cssColor;\n break;\n default:\n throw new FormatError(`Unsupported paint type: ${paintType}`);\n }\n }\n\n getPattern(ctx, owner, inverse, pathType) {\n // PDF spec 8.7.2 NOTE 1: pattern's matrix is relative to initial matrix.\n let matrix = inverse;\n if (pathType !== PathType.SHADING) {\n matrix = Util.transform(matrix, owner.baseTransform);\n if (this.matrix) {\n matrix = Util.transform(matrix, this.matrix);\n }\n }\n\n const temporaryPatternCanvas = this.createPatternCanvas(owner);\n\n let domMatrix = new DOMMatrix(matrix);\n // Rescale and so that the ctx.createPattern call generates a pattern with\n // the desired size.\n domMatrix = domMatrix.translate(\n temporaryPatternCanvas.offsetX,\n temporaryPatternCanvas.offsetY\n );\n domMatrix = domMatrix.scale(\n 1 / temporaryPatternCanvas.scaleX,\n 1 / temporaryPatternCanvas.scaleY\n );\n\n const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, \"repeat\");\n pattern.setTransform(domMatrix);\n\n return pattern;\n }\n}\n\nexport { getShadingPattern, PathType, TilingPattern };\n","/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FeatureTest, ImageKind } from \"./util.js\";\n\nfunction convertToRGBA(params) {\n switch (params.kind) {\n case ImageKind.GRAYSCALE_1BPP:\n return convertBlackAndWhiteToRGBA(params);\n case ImageKind.RGB_24BPP:\n return convertRGBToRGBA(params);\n }\n\n return null;\n}\n\nfunction convertBlackAndWhiteToRGBA({\n src,\n srcPos = 0,\n dest,\n width,\n height,\n nonBlackColor = 0xffffffff,\n inverseDecode = false,\n}) {\n const black = FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;\n const [zeroMapping, oneMapping] = inverseDecode\n ? [nonBlackColor, black]\n : [black, nonBlackColor];\n const widthInSource = width >> 3;\n const widthRemainder = width & 7;\n const srcLength = src.length;\n dest = new Uint32Array(dest.buffer);\n let destPos = 0;\n\n for (let i = 0; i < height; i++) {\n for (const max = srcPos + widthInSource; srcPos < max; srcPos++) {\n const elem = srcPos < srcLength ? src[srcPos] : 255;\n dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping;\n }\n if (widthRemainder === 0) {\n continue;\n }\n const elem = srcPos < srcLength ? src[srcPos++] : 255;\n for (let j = 0; j < widthRemainder; j++) {\n dest[destPos++] = elem & (1 << (7 - j)) ? oneMapping : zeroMapping;\n }\n }\n return { srcPos, destPos };\n}\n\nfunction convertRGBToRGBA({\n src,\n srcPos = 0,\n dest,\n destPos = 0,\n width,\n height,\n}) {\n let i = 0;\n const len32 = src.length >> 2;\n const src32 = new Uint32Array(src.buffer, srcPos, len32);\n\n if (FeatureTest.isLittleEndian) {\n // It's a way faster to do the shuffle manually instead of working\n // component by component with some Uint8 arrays.\n for (; i < len32 - 2; i += 3, destPos += 4) {\n const s1 = src32[i]; // R2B1G1R1\n const s2 = src32[i + 1]; // G3R3B2G2\n const s3 = src32[i + 2]; // B4G4R4B3\n\n dest[destPos] = s1 | 0xff000000;\n dest[destPos + 1] = (s1 >>> 24) | (s2 << 8) | 0xff000000;\n dest[destPos + 2] = (s2 >>> 16) | (s3 << 16) | 0xff000000;\n dest[destPos + 3] = (s3 >>> 8) | 0xff000000;\n }\n\n for (let j = i * 4, jj = src.length; j < jj; j += 3) {\n dest[destPos++] =\n src[j] | (src[j + 1] << 8) | (src[j + 2] << 16) | 0xff000000;\n }\n } else {\n for (; i < len32 - 2; i += 3, destPos += 4) {\n const s1 = src32[i]; // R1G1B1R2\n const s2 = src32[i + 1]; // G2B2R3G3\n const s3 = src32[i + 2]; // B3R4G4B4\n\n dest[destPos] = s1 | 0xff;\n dest[destPos + 1] = (s1 << 24) | (s2 >>> 8) | 0xff;\n dest[destPos + 2] = (s2 << 16) | (s3 >>> 16) | 0xff;\n dest[destPos + 3] = (s3 << 8) | 0xff;\n }\n\n for (let j = i * 4, jj = src.length; j < jj; j += 3) {\n dest[destPos++] =\n (src[j] << 24) | (src[j + 1] << 16) | (src[j + 2] << 8) | 0xff;\n }\n }\n\n return { srcPos, destPos };\n}\n\nfunction grayToRGBA(src, dest) {\n if (FeatureTest.isLittleEndian) {\n for (let i = 0, ii = src.length; i < ii; i++) {\n dest[i] = (src[i] * 0x10101) | 0xff000000;\n }\n } else {\n for (let i = 0, ii = src.length; i < ii; i++) {\n dest[i] = (src[i] * 0x1010100) | 0x000000ff;\n }\n }\n}\n\nexport { convertBlackAndWhiteToRGBA, convertToRGBA, grayToRGBA };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n FeatureTest,\n FONT_IDENTITY_MATRIX,\n IDENTITY_MATRIX,\n ImageKind,\n info,\n isNodeJS,\n OPS,\n shadow,\n TextRenderingMode,\n unreachable,\n Util,\n warn,\n} from \"../shared/util.js\";\nimport {\n getCurrentTransform,\n getCurrentTransformInverse,\n PixelsPerInch,\n} from \"./display_utils.js\";\nimport {\n getShadingPattern,\n PathType,\n TilingPattern,\n} from \"./pattern_helper.js\";\nimport { convertBlackAndWhiteToRGBA } from \"../shared/image_utils.js\";\n\n// contexts store most of the state we need natively.\n// However, PDF needs a bit more state, which we store here.\n// Minimal font size that would be used during canvas fillText operations.\nconst MIN_FONT_SIZE = 16;\n// Maximum font size that would be used during canvas fillText operations.\nconst MAX_FONT_SIZE = 100;\n\n// Defines the time the `executeOperatorList`-method is going to be executing\n// before it stops and schedules a continue of execution.\nconst EXECUTION_TIME = 15; // ms\n// Defines the number of steps before checking the execution time.\nconst EXECUTION_STEPS = 10;\n\n// To disable Type3 compilation, set the value to `-1`.\nconst MAX_SIZE_TO_COMPILE = 1000;\n\nconst FULL_CHUNK_HEIGHT = 16;\n\n/**\n * Overrides certain methods on a 2d ctx so that when they are called they\n * will also call the same method on the destCtx. The methods that are\n * overridden are all the transformation state modifiers, path creation, and\n * save/restore. We only forward these specific methods because they are the\n * only state modifiers that we cannot copy over when we switch contexts.\n *\n * To remove mirroring call `ctx._removeMirroring()`.\n *\n * @param {Object} ctx - The 2d canvas context that will duplicate its calls on\n * the destCtx.\n * @param {Object} destCtx - The 2d canvas context that will receive the\n * forwarded calls.\n */\nfunction mirrorContextOperations(ctx, destCtx) {\n if (ctx._removeMirroring) {\n throw new Error(\"Context is already forwarding operations.\");\n }\n ctx.__originalSave = ctx.save;\n ctx.__originalRestore = ctx.restore;\n ctx.__originalRotate = ctx.rotate;\n ctx.__originalScale = ctx.scale;\n ctx.__originalTranslate = ctx.translate;\n ctx.__originalTransform = ctx.transform;\n ctx.__originalSetTransform = ctx.setTransform;\n ctx.__originalResetTransform = ctx.resetTransform;\n ctx.__originalClip = ctx.clip;\n ctx.__originalMoveTo = ctx.moveTo;\n ctx.__originalLineTo = ctx.lineTo;\n ctx.__originalBezierCurveTo = ctx.bezierCurveTo;\n ctx.__originalRect = ctx.rect;\n ctx.__originalClosePath = ctx.closePath;\n ctx.__originalBeginPath = ctx.beginPath;\n\n ctx._removeMirroring = () => {\n ctx.save = ctx.__originalSave;\n ctx.restore = ctx.__originalRestore;\n ctx.rotate = ctx.__originalRotate;\n ctx.scale = ctx.__originalScale;\n ctx.translate = ctx.__originalTranslate;\n ctx.transform = ctx.__originalTransform;\n ctx.setTransform = ctx.__originalSetTransform;\n ctx.resetTransform = ctx.__originalResetTransform;\n\n ctx.clip = ctx.__originalClip;\n ctx.moveTo = ctx.__originalMoveTo;\n ctx.lineTo = ctx.__originalLineTo;\n ctx.bezierCurveTo = ctx.__originalBezierCurveTo;\n ctx.rect = ctx.__originalRect;\n ctx.closePath = ctx.__originalClosePath;\n ctx.beginPath = ctx.__originalBeginPath;\n delete ctx._removeMirroring;\n };\n\n ctx.save = function ctxSave() {\n destCtx.save();\n this.__originalSave();\n };\n\n ctx.restore = function ctxRestore() {\n destCtx.restore();\n this.__originalRestore();\n };\n\n ctx.translate = function ctxTranslate(x, y) {\n destCtx.translate(x, y);\n this.__originalTranslate(x, y);\n };\n\n ctx.scale = function ctxScale(x, y) {\n destCtx.scale(x, y);\n this.__originalScale(x, y);\n };\n\n ctx.transform = function ctxTransform(a, b, c, d, e, f) {\n destCtx.transform(a, b, c, d, e, f);\n this.__originalTransform(a, b, c, d, e, f);\n };\n\n ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {\n destCtx.setTransform(a, b, c, d, e, f);\n this.__originalSetTransform(a, b, c, d, e, f);\n };\n\n ctx.resetTransform = function ctxResetTransform() {\n destCtx.resetTransform();\n this.__originalResetTransform();\n };\n\n ctx.rotate = function ctxRotate(angle) {\n destCtx.rotate(angle);\n this.__originalRotate(angle);\n };\n\n ctx.clip = function ctxRotate(rule) {\n destCtx.clip(rule);\n this.__originalClip(rule);\n };\n\n ctx.moveTo = function (x, y) {\n destCtx.moveTo(x, y);\n this.__originalMoveTo(x, y);\n };\n\n ctx.lineTo = function (x, y) {\n destCtx.lineTo(x, y);\n this.__originalLineTo(x, y);\n };\n\n ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) {\n destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n };\n\n ctx.rect = function (x, y, width, height) {\n destCtx.rect(x, y, width, height);\n this.__originalRect(x, y, width, height);\n };\n\n ctx.closePath = function () {\n destCtx.closePath();\n this.__originalClosePath();\n };\n\n ctx.beginPath = function () {\n destCtx.beginPath();\n this.__originalBeginPath();\n };\n}\n\nclass CachedCanvases {\n constructor(canvasFactory) {\n this.canvasFactory = canvasFactory;\n this.cache = Object.create(null);\n }\n\n getCanvas(id, width, height) {\n let canvasEntry;\n if (this.cache[id] !== undefined) {\n canvasEntry = this.cache[id];\n this.canvasFactory.reset(canvasEntry, width, height);\n } else {\n canvasEntry = this.canvasFactory.create(width, height);\n this.cache[id] = canvasEntry;\n }\n return canvasEntry;\n }\n\n delete(id) {\n delete this.cache[id];\n }\n\n clear() {\n for (const id in this.cache) {\n const canvasEntry = this.cache[id];\n this.canvasFactory.destroy(canvasEntry);\n delete this.cache[id];\n }\n }\n}\n\nfunction drawImageAtIntegerCoords(\n ctx,\n srcImg,\n srcX,\n srcY,\n srcW,\n srcH,\n destX,\n destY,\n destW,\n destH\n) {\n const [a, b, c, d, tx, ty] = getCurrentTransform(ctx);\n if (b === 0 && c === 0) {\n // top-left corner is at (X, Y) and\n // bottom-right one is at (X + width, Y + height).\n\n // If leftX is 4.321 then it's rounded to 4.\n // If width is 10.432 then it's rounded to 11 because\n // rightX = leftX + width = 14.753 which is rounded to 15\n // so after rounding the total width is 11 (15 - 4).\n // It's why we can't just floor/ceil uniformly, it just depends\n // on the values we've.\n\n const tlX = destX * a + tx;\n const rTlX = Math.round(tlX);\n const tlY = destY * d + ty;\n const rTlY = Math.round(tlY);\n const brX = (destX + destW) * a + tx;\n\n // Some pdf contains images with 1x1 images so in case of 0-width after\n // scaling we must fallback on 1 to be sure there is something.\n const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;\n const brY = (destY + destH) * d + ty;\n const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;\n\n // We must apply a transformation in order to apply it on the image itself.\n // For example if a == 1 && d == -1, it means that the image itself is\n // mirrored w.r.t. the x-axis.\n ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY);\n ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight);\n ctx.setTransform(a, b, c, d, tx, ty);\n\n return [rWidth, rHeight];\n }\n\n if (a === 0 && d === 0) {\n // This path is taken in issue9462.pdf (page 3).\n const tlX = destY * c + tx;\n const rTlX = Math.round(tlX);\n const tlY = destX * b + ty;\n const rTlY = Math.round(tlY);\n const brX = (destY + destH) * c + tx;\n const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;\n const brY = (destX + destW) * b + ty;\n const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;\n\n ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY);\n ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth);\n ctx.setTransform(a, b, c, d, tx, ty);\n\n return [rHeight, rWidth];\n }\n\n // Not a scale matrix so let the render handle the case without rounding.\n ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH);\n\n const scaleX = Math.hypot(a, b);\n const scaleY = Math.hypot(c, d);\n return [scaleX * destW, scaleY * destH];\n}\n\nfunction compileType3Glyph(imgData) {\n const { width, height } = imgData;\n if (width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) {\n return null;\n }\n\n const POINT_TO_PROCESS_LIMIT = 1000;\n const POINT_TYPES = new Uint8Array([\n 0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0,\n ]);\n\n const width1 = width + 1;\n let points = new Uint8Array(width1 * (height + 1));\n let i, j, j0;\n\n // decodes bit-packed mask data\n const lineSize = (width + 7) & ~7;\n let data = new Uint8Array(lineSize * height),\n pos = 0;\n for (const elem of imgData.data) {\n let mask = 128;\n while (mask > 0) {\n data[pos++] = elem & mask ? 0 : 255;\n mask >>= 1;\n }\n }\n\n // finding interesting points: every point is located between mask pixels,\n // so there will be points of the (width + 1)x(height + 1) grid. Every point\n // will have flags assigned based on neighboring mask pixels:\n // 4 | 8\n // --P--\n // 2 | 1\n // We are interested only in points with the flags:\n // - outside corners: 1, 2, 4, 8;\n // - inside corners: 7, 11, 13, 14;\n // - and, intersections: 5, 10.\n let count = 0;\n pos = 0;\n if (data[pos] !== 0) {\n points[0] = 1;\n ++count;\n }\n for (j = 1; j < width; j++) {\n if (data[pos] !== data[pos + 1]) {\n points[j] = data[pos] ? 2 : 1;\n ++count;\n }\n pos++;\n }\n if (data[pos] !== 0) {\n points[j] = 2;\n ++count;\n }\n for (i = 1; i < height; i++) {\n pos = i * lineSize;\n j0 = i * width1;\n if (data[pos - lineSize] !== data[pos]) {\n points[j0] = data[pos] ? 1 : 8;\n ++count;\n }\n // 'sum' is the position of the current pixel configuration in the 'TYPES'\n // array (in order 8-1-2-4, so we can use '>>2' to shift the column).\n let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);\n for (j = 1; j < width; j++) {\n sum =\n (sum >> 2) +\n (data[pos + 1] ? 4 : 0) +\n (data[pos - lineSize + 1] ? 8 : 0);\n if (POINT_TYPES[sum]) {\n points[j0 + j] = POINT_TYPES[sum];\n ++count;\n }\n pos++;\n }\n if (data[pos - lineSize] !== data[pos]) {\n points[j0 + j] = data[pos] ? 2 : 4;\n ++count;\n }\n\n if (count > POINT_TO_PROCESS_LIMIT) {\n return null;\n }\n }\n\n pos = lineSize * (height - 1);\n j0 = i * width1;\n if (data[pos] !== 0) {\n points[j0] = 8;\n ++count;\n }\n for (j = 1; j < width; j++) {\n if (data[pos] !== data[pos + 1]) {\n points[j0 + j] = data[pos] ? 4 : 8;\n ++count;\n }\n pos++;\n }\n if (data[pos] !== 0) {\n points[j0 + j] = 4;\n ++count;\n }\n if (count > POINT_TO_PROCESS_LIMIT) {\n return null;\n }\n\n // building outlines\n const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);\n const path = new Path2D();\n\n for (i = 0; count && i <= height; i++) {\n let p = i * width1;\n const end = p + width;\n while (p < end && !points[p]) {\n p++;\n }\n if (p === end) {\n continue;\n }\n path.moveTo(p % width1, i);\n\n const p0 = p;\n let type = points[p];\n do {\n const step = steps[type];\n do {\n p += step;\n } while (!points[p]);\n\n const pp = points[p];\n if (pp !== 5 && pp !== 10) {\n // set new direction\n type = pp;\n // delete mark\n points[p] = 0;\n } else {\n // type is 5 or 10, ie, a crossing\n // set new direction\n type = pp & ((0x33 * type) >> 4);\n // set new type for \"future hit\"\n points[p] &= (type >> 2) | (type << 2);\n }\n path.lineTo(p % width1, (p / width1) | 0);\n\n if (!points[p]) {\n --count;\n }\n } while (p0 !== p);\n --i;\n }\n\n // Immediately release the, potentially large, `Uint8Array`s after parsing.\n data = null;\n points = null;\n\n const drawOutline = function (c) {\n c.save();\n // the path shall be painted in [0..1]x[0..1] space\n c.scale(1 / width, -1 / height);\n c.translate(0, -height);\n c.fill(path);\n c.beginPath();\n c.restore();\n };\n\n return drawOutline;\n}\n\nclass CanvasExtraState {\n constructor(width, height) {\n // Are soft masks and alpha values shapes or opacities?\n this.alphaIsShape = false;\n this.fontSize = 0;\n this.fontSizeScale = 1;\n this.textMatrix = IDENTITY_MATRIX;\n this.textMatrixScale = 1;\n this.fontMatrix = FONT_IDENTITY_MATRIX;\n this.leading = 0;\n // Current point (in user coordinates)\n this.x = 0;\n this.y = 0;\n // Start of text line (in text coordinates)\n this.lineX = 0;\n this.lineY = 0;\n // Character and word spacing\n this.charSpacing = 0;\n this.wordSpacing = 0;\n this.textHScale = 1;\n this.textRenderingMode = TextRenderingMode.FILL;\n this.textRise = 0;\n // Default fore and background colors\n this.fillColor = \"#000000\";\n this.strokeColor = \"#000000\";\n this.patternFill = false;\n // Note: fill alpha applies to all non-stroking operations\n this.fillAlpha = 1;\n this.strokeAlpha = 1;\n this.lineWidth = 1;\n this.activeSMask = null;\n this.transferMaps = \"none\";\n\n this.startNewPathAndClipBox([0, 0, width, height]);\n }\n\n clone() {\n const clone = Object.create(this);\n clone.clipBox = this.clipBox.slice();\n return clone;\n }\n\n setCurrentPoint(x, y) {\n this.x = x;\n this.y = y;\n }\n\n updatePathMinMax(transform, x, y) {\n [x, y] = Util.applyTransform([x, y], transform);\n this.minX = Math.min(this.minX, x);\n this.minY = Math.min(this.minY, y);\n this.maxX = Math.max(this.maxX, x);\n this.maxY = Math.max(this.maxY, y);\n }\n\n updateRectMinMax(transform, rect) {\n const p1 = Util.applyTransform(rect, transform);\n const p2 = Util.applyTransform(rect.slice(2), transform);\n const p3 = Util.applyTransform([rect[0], rect[3]], transform);\n const p4 = Util.applyTransform([rect[2], rect[1]], transform);\n\n this.minX = Math.min(this.minX, p1[0], p2[0], p3[0], p4[0]);\n this.minY = Math.min(this.minY, p1[1], p2[1], p3[1], p4[1]);\n this.maxX = Math.max(this.maxX, p1[0], p2[0], p3[0], p4[0]);\n this.maxY = Math.max(this.maxY, p1[1], p2[1], p3[1], p4[1]);\n }\n\n updateScalingPathMinMax(transform, minMax) {\n Util.scaleMinMax(transform, minMax);\n this.minX = Math.min(this.minX, minMax[0]);\n this.minY = Math.min(this.minY, minMax[1]);\n this.maxX = Math.max(this.maxX, minMax[2]);\n this.maxY = Math.max(this.maxY, minMax[3]);\n }\n\n updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) {\n const box = Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax);\n if (minMax) {\n return;\n }\n this.updateRectMinMax(transform, box);\n }\n\n getPathBoundingBox(pathType = PathType.FILL, transform = null) {\n const box = [this.minX, this.minY, this.maxX, this.maxY];\n if (pathType === PathType.STROKE) {\n if (!transform) {\n unreachable(\"Stroke bounding box must include transform.\");\n }\n // Stroked paths can be outside of the path bounding box by 1/2 the line\n // width.\n const scale = Util.singularValueDecompose2dScale(transform);\n const xStrokePad = (scale[0] * this.lineWidth) / 2;\n const yStrokePad = (scale[1] * this.lineWidth) / 2;\n box[0] -= xStrokePad;\n box[1] -= yStrokePad;\n box[2] += xStrokePad;\n box[3] += yStrokePad;\n }\n return box;\n }\n\n updateClipFromPath() {\n const intersect = Util.intersect(this.clipBox, this.getPathBoundingBox());\n this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]);\n }\n\n isEmptyClip() {\n return this.minX === Infinity;\n }\n\n startNewPathAndClipBox(box) {\n this.clipBox = box;\n this.minX = Infinity;\n this.minY = Infinity;\n this.maxX = 0;\n this.maxY = 0;\n }\n\n getClippedPathBoundingBox(pathType = PathType.FILL, transform = null) {\n return Util.intersect(\n this.clipBox,\n this.getPathBoundingBox(pathType, transform)\n );\n }\n}\n\nfunction putBinaryImageData(ctx, imgData) {\n if (typeof ImageData !== \"undefined\" && imgData instanceof ImageData) {\n ctx.putImageData(imgData, 0, 0);\n return;\n }\n\n // Put the image data to the canvas in chunks, rather than putting the\n // whole image at once. This saves JS memory, because the ImageData object\n // is smaller. It also possibly saves C++ memory within the implementation\n // of putImageData(). (E.g. in Firefox we make two short-lived copies of\n // the data passed to putImageData()). |n| shouldn't be too small, however,\n // because too many putImageData() calls will slow things down.\n //\n // Note: as written, if the last chunk is partial, the putImageData() call\n // will (conceptually) put pixels past the bounds of the canvas. But\n // that's ok; any such pixels are ignored.\n\n const height = imgData.height,\n width = imgData.width;\n const partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n\n const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n let srcPos = 0,\n destPos;\n const src = imgData.data;\n const dest = chunkImgData.data;\n let i, j, thisChunkHeight, elemsInThisChunk;\n\n // There are multiple forms in which the pixel data can be passed, and\n // imgData.kind tells us which one this is.\n if (imgData.kind === ImageKind.GRAYSCALE_1BPP) {\n // Grayscale, 1 bit per pixel (i.e. black-and-white).\n const srcLength = src.byteLength;\n const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);\n const dest32DataLength = dest32.length;\n const fullSrcDiff = (width + 7) >> 3;\n const white = 0xffffffff;\n const black = FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;\n\n for (i = 0; i < totalChunks; i++) {\n thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\n destPos = 0;\n for (j = 0; j < thisChunkHeight; j++) {\n const srcDiff = srcLength - srcPos;\n let k = 0;\n const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;\n const kEndUnrolled = kEnd & ~7;\n let mask = 0;\n let srcByte = 0;\n for (; k < kEndUnrolled; k += 8) {\n srcByte = src[srcPos++];\n dest32[destPos++] = srcByte & 128 ? white : black;\n dest32[destPos++] = srcByte & 64 ? white : black;\n dest32[destPos++] = srcByte & 32 ? white : black;\n dest32[destPos++] = srcByte & 16 ? white : black;\n dest32[destPos++] = srcByte & 8 ? white : black;\n dest32[destPos++] = srcByte & 4 ? white : black;\n dest32[destPos++] = srcByte & 2 ? white : black;\n dest32[destPos++] = srcByte & 1 ? white : black;\n }\n for (; k < kEnd; k++) {\n if (mask === 0) {\n srcByte = src[srcPos++];\n mask = 128;\n }\n\n dest32[destPos++] = srcByte & mask ? white : black;\n mask >>= 1;\n }\n }\n // We ran out of input. Make all remaining pixels transparent.\n while (destPos < dest32DataLength) {\n dest32[destPos++] = 0;\n }\n\n ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n }\n } else if (imgData.kind === ImageKind.RGBA_32BPP) {\n // RGBA, 32-bits per pixel.\n j = 0;\n elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;\n for (i = 0; i < fullChunks; i++) {\n dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n srcPos += elemsInThisChunk;\n\n ctx.putImageData(chunkImgData, 0, j);\n j += FULL_CHUNK_HEIGHT;\n }\n if (i < totalChunks) {\n elemsInThisChunk = width * partialChunkHeight * 4;\n dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n\n ctx.putImageData(chunkImgData, 0, j);\n }\n } else if (imgData.kind === ImageKind.RGB_24BPP) {\n // RGB, 24-bits per pixel.\n thisChunkHeight = FULL_CHUNK_HEIGHT;\n elemsInThisChunk = width * thisChunkHeight;\n for (i = 0; i < totalChunks; i++) {\n if (i >= fullChunks) {\n thisChunkHeight = partialChunkHeight;\n elemsInThisChunk = width * thisChunkHeight;\n }\n\n destPos = 0;\n for (j = elemsInThisChunk; j--; ) {\n dest[destPos++] = src[srcPos++];\n dest[destPos++] = src[srcPos++];\n dest[destPos++] = src[srcPos++];\n dest[destPos++] = 255;\n }\n\n ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n }\n } else {\n throw new Error(`bad image kind: ${imgData.kind}`);\n }\n}\n\nfunction putBinaryImageMask(ctx, imgData) {\n if (imgData.bitmap) {\n // The bitmap has been created in the worker.\n ctx.drawImage(imgData.bitmap, 0, 0);\n return;\n }\n\n // Slow path: OffscreenCanvas isn't available in the worker.\n const height = imgData.height,\n width = imgData.width;\n const partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n\n const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n let srcPos = 0;\n const src = imgData.data;\n const dest = chunkImgData.data;\n\n for (let i = 0; i < totalChunks; i++) {\n const thisChunkHeight =\n i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\n\n // Expand the mask so it can be used by the canvas. Any required\n // inversion has already been handled.\n\n ({ srcPos } = convertBlackAndWhiteToRGBA({\n src,\n srcPos,\n dest,\n width,\n height: thisChunkHeight,\n nonBlackColor: 0,\n }));\n\n ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n }\n}\n\nfunction copyCtxState(sourceCtx, destCtx) {\n const properties = [\n \"strokeStyle\",\n \"fillStyle\",\n \"fillRule\",\n \"globalAlpha\",\n \"lineWidth\",\n \"lineCap\",\n \"lineJoin\",\n \"miterLimit\",\n \"globalCompositeOperation\",\n \"font\",\n \"filter\",\n ];\n for (const property of properties) {\n if (sourceCtx[property] !== undefined) {\n destCtx[property] = sourceCtx[property];\n }\n }\n if (sourceCtx.setLineDash !== undefined) {\n destCtx.setLineDash(sourceCtx.getLineDash());\n destCtx.lineDashOffset = sourceCtx.lineDashOffset;\n }\n}\n\nfunction resetCtxToDefault(ctx) {\n ctx.strokeStyle = ctx.fillStyle = \"#000000\";\n ctx.fillRule = \"nonzero\";\n ctx.globalAlpha = 1;\n ctx.lineWidth = 1;\n ctx.lineCap = \"butt\";\n ctx.lineJoin = \"miter\";\n ctx.miterLimit = 10;\n ctx.globalCompositeOperation = \"source-over\";\n ctx.font = \"10px sans-serif\";\n if (ctx.setLineDash !== undefined) {\n ctx.setLineDash([]);\n ctx.lineDashOffset = 0;\n }\n if (\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n !isNodeJS\n ) {\n const { filter } = ctx;\n if (filter !== \"none\" && filter !== \"\") {\n ctx.filter = \"none\";\n }\n }\n}\n\nfunction getImageSmoothingEnabled(transform, interpolate) {\n // In section 8.9.5.3 of the PDF spec, it's mentioned that the interpolate\n // flag should be used when the image is upscaled.\n // In Firefox, smoothing is always used when downscaling images (bug 1360415).\n\n if (interpolate) {\n return true;\n }\n\n const scale = Util.singularValueDecompose2dScale(transform);\n // Round to a 32bit float so that `<=` check below will pass for numbers that\n // are very close, but not exactly the same 64bit floats.\n scale[0] = Math.fround(scale[0]);\n scale[1] = Math.fround(scale[1]);\n const actualScale = Math.fround(\n (globalThis.devicePixelRatio || 1) * PixelsPerInch.PDF_TO_CSS_UNITS\n );\n return scale[0] <= actualScale && scale[1] <= actualScale;\n}\n\nconst LINE_CAP_STYLES = [\"butt\", \"round\", \"square\"];\nconst LINE_JOIN_STYLES = [\"miter\", \"round\", \"bevel\"];\nconst NORMAL_CLIP = {};\nconst EO_CLIP = {};\n\nclass CanvasGraphics {\n constructor(\n canvasCtx,\n commonObjs,\n objs,\n canvasFactory,\n filterFactory,\n { optionalContentConfig, markedContentStack = null },\n annotationCanvasMap,\n pageColors\n ) {\n this.ctx = canvasCtx;\n this.current = new CanvasExtraState(\n this.ctx.canvas.width,\n this.ctx.canvas.height\n );\n this.stateStack = [];\n this.pendingClip = null;\n this.pendingEOFill = false;\n this.res = null;\n this.xobjs = null;\n this.commonObjs = commonObjs;\n this.objs = objs;\n this.canvasFactory = canvasFactory;\n this.filterFactory = filterFactory;\n this.groupStack = [];\n this.processingType3 = null;\n // Patterns are painted relative to the initial page/form transform, see\n // PDF spec 8.7.2 NOTE 1.\n this.baseTransform = null;\n this.baseTransformStack = [];\n this.groupLevel = 0;\n this.smaskStack = [];\n this.smaskCounter = 0;\n this.tempSMask = null;\n this.suspendedCtx = null;\n this.contentVisible = true;\n this.markedContentStack = markedContentStack || [];\n this.optionalContentConfig = optionalContentConfig;\n this.cachedCanvases = new CachedCanvases(this.canvasFactory);\n this.cachedPatterns = new Map();\n this.annotationCanvasMap = annotationCanvasMap;\n this.viewportScale = 1;\n this.outputScaleX = 1;\n this.outputScaleY = 1;\n this.pageColors = pageColors;\n\n this._cachedScaleForStroking = [-1, 0];\n this._cachedGetSinglePixelWidth = null;\n this._cachedBitmapsMap = new Map();\n }\n\n getObject(data, fallback = null) {\n if (typeof data === \"string\") {\n return data.startsWith(\"g_\")\n ? this.commonObjs.get(data)\n : this.objs.get(data);\n }\n return fallback;\n }\n\n beginDrawing({\n transform,\n viewport,\n transparency = false,\n background = null,\n }) {\n // For pdfs that use blend modes we have to clear the canvas else certain\n // blend modes can look wrong since we'd be blending with a white\n // backdrop. The problem with a transparent backdrop though is we then\n // don't get sub pixel anti aliasing on text, creating temporary\n // transparent canvas when we have blend modes.\n const width = this.ctx.canvas.width;\n const height = this.ctx.canvas.height;\n\n const savedFillStyle = this.ctx.fillStyle;\n this.ctx.fillStyle = background || \"#ffffff\";\n this.ctx.fillRect(0, 0, width, height);\n this.ctx.fillStyle = savedFillStyle;\n\n if (transparency) {\n const transparentCanvas = this.cachedCanvases.getCanvas(\n \"transparent\",\n width,\n height\n );\n this.compositeCtx = this.ctx;\n this.transparentCanvas = transparentCanvas.canvas;\n this.ctx = transparentCanvas.context;\n this.ctx.save();\n // The transform can be applied before rendering, transferring it to\n // the new canvas.\n this.ctx.transform(...getCurrentTransform(this.compositeCtx));\n }\n\n this.ctx.save();\n resetCtxToDefault(this.ctx);\n if (transform) {\n this.ctx.transform(...transform);\n this.outputScaleX = transform[0];\n this.outputScaleY = transform[0];\n }\n this.ctx.transform(...viewport.transform);\n this.viewportScale = viewport.scale;\n\n this.baseTransform = getCurrentTransform(this.ctx);\n }\n\n executeOperatorList(\n operatorList,\n executionStartIdx,\n continueCallback,\n stepper\n ) {\n const argsArray = operatorList.argsArray;\n const fnArray = operatorList.fnArray;\n let i = executionStartIdx || 0;\n const argsArrayLen = argsArray.length;\n\n // Sometimes the OperatorList to execute is empty.\n if (argsArrayLen === i) {\n return i;\n }\n\n const chunkOperations =\n argsArrayLen - i > EXECUTION_STEPS &&\n typeof continueCallback === \"function\";\n const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;\n let steps = 0;\n\n const commonObjs = this.commonObjs;\n const objs = this.objs;\n let fnId;\n\n while (true) {\n if (stepper !== undefined && i === stepper.nextBreakPoint) {\n stepper.breakIt(i, continueCallback);\n return i;\n }\n\n fnId = fnArray[i];\n\n if (fnId !== OPS.dependency) {\n // eslint-disable-next-line prefer-spread\n this[fnId].apply(this, argsArray[i]);\n } else {\n for (const depObjId of argsArray[i]) {\n const objsPool = depObjId.startsWith(\"g_\") ? commonObjs : objs;\n\n // If the promise isn't resolved yet, add the continueCallback\n // to the promise and bail out.\n if (!objsPool.has(depObjId)) {\n objsPool.get(depObjId, continueCallback);\n return i;\n }\n }\n }\n\n i++;\n\n // If the entire operatorList was executed, stop as were done.\n if (i === argsArrayLen) {\n return i;\n }\n\n // If the execution took longer then a certain amount of time and\n // `continueCallback` is specified, interrupt the execution.\n if (chunkOperations && ++steps > EXECUTION_STEPS) {\n if (Date.now() > endTime) {\n continueCallback();\n return i;\n }\n steps = 0;\n }\n\n // If the operatorList isn't executed completely yet OR the execution\n // time was short enough, do another execution round.\n }\n }\n\n #restoreInitialState() {\n // Finishing all opened operations such as SMask group painting.\n while (this.stateStack.length || this.inSMaskMode) {\n this.restore();\n }\n\n this.ctx.restore();\n\n if (this.transparentCanvas) {\n this.ctx = this.compositeCtx;\n this.ctx.save();\n this.ctx.setTransform(1, 0, 0, 1, 0, 0); // Avoid apply transform twice\n this.ctx.drawImage(this.transparentCanvas, 0, 0);\n this.ctx.restore();\n this.transparentCanvas = null;\n }\n }\n\n endDrawing() {\n this.#restoreInitialState();\n\n this.cachedCanvases.clear();\n this.cachedPatterns.clear();\n\n for (const cache of this._cachedBitmapsMap.values()) {\n for (const canvas of cache.values()) {\n if (\n typeof HTMLCanvasElement !== \"undefined\" &&\n canvas instanceof HTMLCanvasElement\n ) {\n canvas.width = canvas.height = 0;\n }\n }\n cache.clear();\n }\n this._cachedBitmapsMap.clear();\n this.#drawFilter();\n }\n\n #drawFilter() {\n if (this.pageColors) {\n const hcmFilterId = this.filterFactory.addHCMFilter(\n this.pageColors.foreground,\n this.pageColors.background\n );\n if (hcmFilterId !== \"none\") {\n const savedFilter = this.ctx.filter;\n this.ctx.filter = hcmFilterId;\n this.ctx.drawImage(this.ctx.canvas, 0, 0);\n this.ctx.filter = savedFilter;\n }\n }\n }\n\n _scaleImage(img, inverseTransform) {\n // Vertical or horizontal scaling shall not be more than 2 to not lose the\n // pixels during drawImage operation, painting on the temporary canvas(es)\n // that are twice smaller in size.\n const width = img.width;\n const height = img.height;\n let widthScale = Math.max(\n Math.hypot(inverseTransform[0], inverseTransform[1]),\n 1\n );\n let heightScale = Math.max(\n Math.hypot(inverseTransform[2], inverseTransform[3]),\n 1\n );\n\n let paintWidth = width,\n paintHeight = height;\n let tmpCanvasId = \"prescale1\";\n let tmpCanvas, tmpCtx;\n while (\n (widthScale > 2 && paintWidth > 1) ||\n (heightScale > 2 && paintHeight > 1)\n ) {\n let newWidth = paintWidth,\n newHeight = paintHeight;\n if (widthScale > 2 && paintWidth > 1) {\n // See bug 1820511 (Windows specific bug).\n // TODO: once the above bug is fixed we could revert to:\n // newWidth = Math.ceil(paintWidth / 2);\n newWidth =\n paintWidth >= 16384\n ? Math.floor(paintWidth / 2) - 1 || 1\n : Math.ceil(paintWidth / 2);\n widthScale /= paintWidth / newWidth;\n }\n if (heightScale > 2 && paintHeight > 1) {\n // TODO: see the comment above.\n newHeight =\n paintHeight >= 16384\n ? Math.floor(paintHeight / 2) - 1 || 1\n : Math.ceil(paintHeight) / 2;\n heightScale /= paintHeight / newHeight;\n }\n tmpCanvas = this.cachedCanvases.getCanvas(\n tmpCanvasId,\n newWidth,\n newHeight\n );\n tmpCtx = tmpCanvas.context;\n tmpCtx.clearRect(0, 0, newWidth, newHeight);\n tmpCtx.drawImage(\n img,\n 0,\n 0,\n paintWidth,\n paintHeight,\n 0,\n 0,\n newWidth,\n newHeight\n );\n img = tmpCanvas.canvas;\n paintWidth = newWidth;\n paintHeight = newHeight;\n tmpCanvasId = tmpCanvasId === \"prescale1\" ? \"prescale2\" : \"prescale1\";\n }\n return {\n img,\n paintWidth,\n paintHeight,\n };\n }\n\n _createMaskCanvas(img) {\n const ctx = this.ctx;\n const { width, height } = img;\n const fillColor = this.current.fillColor;\n const isPatternFill = this.current.patternFill;\n const currentTransform = getCurrentTransform(ctx);\n\n let cache, cacheKey, scaled, maskCanvas;\n if ((img.bitmap || img.data) && img.count > 1) {\n const mainKey = img.bitmap || img.data.buffer;\n // We're reusing the same image several times, so we can cache it.\n // In case we've a pattern fill we just keep the scaled version of\n // the image.\n // Only the scaling part matters, the translation part is just used\n // to compute offsets (but not when filling patterns see #15573).\n // TODO: handle the case of a pattern fill if it's possible.\n cacheKey = JSON.stringify(\n isPatternFill\n ? currentTransform\n : [currentTransform.slice(0, 4), fillColor]\n );\n\n cache = this._cachedBitmapsMap.get(mainKey);\n if (!cache) {\n cache = new Map();\n this._cachedBitmapsMap.set(mainKey, cache);\n }\n const cachedImage = cache.get(cacheKey);\n if (cachedImage && !isPatternFill) {\n const offsetX = Math.round(\n Math.min(currentTransform[0], currentTransform[2]) +\n currentTransform[4]\n );\n const offsetY = Math.round(\n Math.min(currentTransform[1], currentTransform[3]) +\n currentTransform[5]\n );\n return {\n canvas: cachedImage,\n offsetX,\n offsetY,\n };\n }\n scaled = cachedImage;\n }\n\n if (!scaled) {\n maskCanvas = this.cachedCanvases.getCanvas(\"maskCanvas\", width, height);\n putBinaryImageMask(maskCanvas.context, img);\n }\n\n // Create the mask canvas at the size it will be drawn at and also set\n // its transform to match the current transform so if there are any\n // patterns applied they will be applied relative to the correct\n // transform.\n\n let maskToCanvas = Util.transform(currentTransform, [\n 1 / width,\n 0,\n 0,\n -1 / height,\n 0,\n 0,\n ]);\n maskToCanvas = Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]);\n const [minX, minY, maxX, maxY] = Util.getAxialAlignedBoundingBox(\n [0, 0, width, height],\n maskToCanvas\n );\n const drawnWidth = Math.round(maxX - minX) || 1;\n const drawnHeight = Math.round(maxY - minY) || 1;\n const fillCanvas = this.cachedCanvases.getCanvas(\n \"fillCanvas\",\n drawnWidth,\n drawnHeight\n );\n const fillCtx = fillCanvas.context;\n\n // The offset will be the top-left cordinate mask.\n // If objToCanvas is [a,b,c,d,e,f] then:\n // - offsetX = min(a, c) + e\n // - offsetY = min(b, d) + f\n const offsetX = minX;\n const offsetY = minY;\n fillCtx.translate(-offsetX, -offsetY);\n fillCtx.transform(...maskToCanvas);\n\n if (!scaled) {\n // Pre-scale if needed to improve image smoothing.\n scaled = this._scaleImage(\n maskCanvas.canvas,\n getCurrentTransformInverse(fillCtx)\n );\n scaled = scaled.img;\n if (cache && isPatternFill) {\n cache.set(cacheKey, scaled);\n }\n }\n\n fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(\n getCurrentTransform(fillCtx),\n img.interpolate\n );\n\n drawImageAtIntegerCoords(\n fillCtx,\n scaled,\n 0,\n 0,\n scaled.width,\n scaled.height,\n 0,\n 0,\n width,\n height\n );\n fillCtx.globalCompositeOperation = \"source-in\";\n\n const inverse = Util.transform(getCurrentTransformInverse(fillCtx), [\n 1,\n 0,\n 0,\n 1,\n -offsetX,\n -offsetY,\n ]);\n fillCtx.fillStyle = isPatternFill\n ? fillColor.getPattern(ctx, this, inverse, PathType.FILL)\n : fillColor;\n\n fillCtx.fillRect(0, 0, width, height);\n\n if (cache && !isPatternFill) {\n // The fill canvas is put in the cache associated to the mask image\n // so we must remove from the cached canvas: it mustn't be used again.\n this.cachedCanvases.delete(\"fillCanvas\");\n cache.set(cacheKey, fillCanvas.canvas);\n }\n\n // Round the offsets to avoid drawing fractional pixels.\n return {\n canvas: fillCanvas.canvas,\n offsetX: Math.round(offsetX),\n offsetY: Math.round(offsetY),\n };\n }\n\n // Graphics state\n setLineWidth(width) {\n if (width !== this.current.lineWidth) {\n this._cachedScaleForStroking[0] = -1;\n }\n this.current.lineWidth = width;\n this.ctx.lineWidth = width;\n }\n\n setLineCap(style) {\n this.ctx.lineCap = LINE_CAP_STYLES[style];\n }\n\n setLineJoin(style) {\n this.ctx.lineJoin = LINE_JOIN_STYLES[style];\n }\n\n setMiterLimit(limit) {\n this.ctx.miterLimit = limit;\n }\n\n setDash(dashArray, dashPhase) {\n const ctx = this.ctx;\n if (ctx.setLineDash !== undefined) {\n ctx.setLineDash(dashArray);\n ctx.lineDashOffset = dashPhase;\n }\n }\n\n setRenderingIntent(intent) {\n // This operation is ignored since we haven't found a use case for it yet.\n }\n\n setFlatness(flatness) {\n // This operation is ignored since we haven't found a use case for it yet.\n }\n\n setGState(states) {\n for (const [key, value] of states) {\n switch (key) {\n case \"LW\":\n this.setLineWidth(value);\n break;\n case \"LC\":\n this.setLineCap(value);\n break;\n case \"LJ\":\n this.setLineJoin(value);\n break;\n case \"ML\":\n this.setMiterLimit(value);\n break;\n case \"D\":\n this.setDash(value[0], value[1]);\n break;\n case \"RI\":\n this.setRenderingIntent(value);\n break;\n case \"FL\":\n this.setFlatness(value);\n break;\n case \"Font\":\n this.setFont(value[0], value[1]);\n break;\n case \"CA\":\n this.current.strokeAlpha = value;\n break;\n case \"ca\":\n this.current.fillAlpha = value;\n this.ctx.globalAlpha = value;\n break;\n case \"BM\":\n this.ctx.globalCompositeOperation = value;\n break;\n case \"SMask\":\n this.current.activeSMask = value ? this.tempSMask : null;\n this.tempSMask = null;\n this.checkSMaskState();\n break;\n case \"TR\":\n this.ctx.filter = this.current.transferMaps =\n this.filterFactory.addFilter(value);\n break;\n }\n }\n }\n\n get inSMaskMode() {\n return !!this.suspendedCtx;\n }\n\n checkSMaskState() {\n const inSMaskMode = this.inSMaskMode;\n if (this.current.activeSMask && !inSMaskMode) {\n this.beginSMaskMode();\n } else if (!this.current.activeSMask && inSMaskMode) {\n this.endSMaskMode();\n }\n // Else, the state is okay and nothing needs to be done.\n }\n\n /**\n * Soft mask mode takes the current main drawing canvas and replaces it with\n * a temporary canvas. Any drawing operations that happen on the temporary\n * canvas need to be composed with the main canvas that was suspended (see\n * `compose()`). The temporary canvas also duplicates many of its operations\n * on the suspended canvas to keep them in sync, so that when the soft mask\n * mode ends any clipping paths or transformations will still be active and in\n * the right order on the canvas' graphics state stack.\n */\n beginSMaskMode() {\n if (this.inSMaskMode) {\n throw new Error(\"beginSMaskMode called while already in smask mode\");\n }\n const drawnWidth = this.ctx.canvas.width;\n const drawnHeight = this.ctx.canvas.height;\n const cacheId = \"smaskGroupAt\" + this.groupLevel;\n const scratchCanvas = this.cachedCanvases.getCanvas(\n cacheId,\n drawnWidth,\n drawnHeight\n );\n this.suspendedCtx = this.ctx;\n this.ctx = scratchCanvas.context;\n const ctx = this.ctx;\n ctx.setTransform(...getCurrentTransform(this.suspendedCtx));\n copyCtxState(this.suspendedCtx, ctx);\n mirrorContextOperations(ctx, this.suspendedCtx);\n\n this.setGState([\n [\"BM\", \"source-over\"],\n [\"ca\", 1],\n [\"CA\", 1],\n ]);\n }\n\n endSMaskMode() {\n if (!this.inSMaskMode) {\n throw new Error(\"endSMaskMode called while not in smask mode\");\n }\n // The soft mask is done, now restore the suspended canvas as the main\n // drawing canvas.\n this.ctx._removeMirroring();\n copyCtxState(this.ctx, this.suspendedCtx);\n this.ctx = this.suspendedCtx;\n\n this.suspendedCtx = null;\n }\n\n compose(dirtyBox) {\n if (!this.current.activeSMask) {\n return;\n }\n\n if (!dirtyBox) {\n dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];\n } else {\n dirtyBox[0] = Math.floor(dirtyBox[0]);\n dirtyBox[1] = Math.floor(dirtyBox[1]);\n dirtyBox[2] = Math.ceil(dirtyBox[2]);\n dirtyBox[3] = Math.ceil(dirtyBox[3]);\n }\n const smask = this.current.activeSMask;\n const suspendedCtx = this.suspendedCtx;\n\n this.composeSMask(suspendedCtx, smask, this.ctx, dirtyBox);\n // Whatever was drawn has been moved to the suspended canvas, now clear it\n // out of the current canvas.\n this.ctx.save();\n this.ctx.setTransform(1, 0, 0, 1, 0, 0);\n this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n this.ctx.restore();\n }\n\n composeSMask(ctx, smask, layerCtx, layerBox) {\n const layerOffsetX = layerBox[0];\n const layerOffsetY = layerBox[1];\n const layerWidth = layerBox[2] - layerOffsetX;\n const layerHeight = layerBox[3] - layerOffsetY;\n if (layerWidth === 0 || layerHeight === 0) {\n return;\n }\n this.genericComposeSMask(\n smask.context,\n layerCtx,\n layerWidth,\n layerHeight,\n smask.subtype,\n smask.backdrop,\n smask.transferMap,\n layerOffsetX,\n layerOffsetY,\n smask.offsetX,\n smask.offsetY\n );\n ctx.save();\n ctx.globalAlpha = 1;\n ctx.globalCompositeOperation = \"source-over\";\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.drawImage(layerCtx.canvas, 0, 0);\n ctx.restore();\n }\n\n genericComposeSMask(\n maskCtx,\n layerCtx,\n width,\n height,\n subtype,\n backdrop,\n transferMap,\n layerOffsetX,\n layerOffsetY,\n maskOffsetX,\n maskOffsetY\n ) {\n let maskCanvas = maskCtx.canvas;\n let maskX = layerOffsetX - maskOffsetX;\n let maskY = layerOffsetY - maskOffsetY;\n\n if (backdrop) {\n if (\n maskX < 0 ||\n maskY < 0 ||\n maskX + width > maskCanvas.width ||\n maskY + height > maskCanvas.height\n ) {\n const canvas = this.cachedCanvases.getCanvas(\n \"maskExtension\",\n width,\n height\n );\n const ctx = canvas.context;\n ctx.drawImage(maskCanvas, -maskX, -maskY);\n if (backdrop.some(c => c !== 0)) {\n ctx.globalCompositeOperation = \"destination-atop\";\n ctx.fillStyle = Util.makeHexColor(...backdrop);\n ctx.fillRect(0, 0, width, height);\n ctx.globalCompositeOperation = \"source-over\";\n }\n\n maskCanvas = canvas.canvas;\n maskX = maskY = 0;\n } else if (backdrop.some(c => c !== 0)) {\n maskCtx.save();\n maskCtx.globalAlpha = 1;\n maskCtx.setTransform(1, 0, 0, 1, 0, 0);\n const clip = new Path2D();\n clip.rect(maskX, maskY, width, height);\n maskCtx.clip(clip);\n maskCtx.globalCompositeOperation = \"destination-atop\";\n maskCtx.fillStyle = Util.makeHexColor(...backdrop);\n maskCtx.fillRect(maskX, maskY, width, height);\n maskCtx.restore();\n }\n }\n\n layerCtx.save();\n layerCtx.globalAlpha = 1;\n layerCtx.setTransform(1, 0, 0, 1, 0, 0);\n\n if (subtype === \"Alpha\" && transferMap) {\n layerCtx.filter = this.filterFactory.addAlphaFilter(transferMap);\n } else if (subtype === \"Luminosity\") {\n layerCtx.filter = this.filterFactory.addLuminosityFilter(transferMap);\n }\n\n const clip = new Path2D();\n clip.rect(layerOffsetX, layerOffsetY, width, height);\n layerCtx.clip(clip);\n layerCtx.globalCompositeOperation = \"destination-in\";\n layerCtx.drawImage(\n maskCanvas,\n maskX,\n maskY,\n width,\n height,\n layerOffsetX,\n layerOffsetY,\n width,\n height\n );\n layerCtx.restore();\n }\n\n save() {\n if (this.inSMaskMode) {\n // SMask mode may be turned on/off causing us to lose graphics state.\n // Copy the temporary canvas state to the main(suspended) canvas to keep\n // it in sync.\n copyCtxState(this.ctx, this.suspendedCtx);\n // Don't bother calling save on the temporary canvas since state is not\n // saved there.\n this.suspendedCtx.save();\n } else {\n this.ctx.save();\n }\n const old = this.current;\n this.stateStack.push(old);\n this.current = old.clone();\n }\n\n restore() {\n if (this.stateStack.length === 0 && this.inSMaskMode) {\n this.endSMaskMode();\n }\n if (this.stateStack.length !== 0) {\n this.current = this.stateStack.pop();\n if (this.inSMaskMode) {\n // Graphics state is stored on the main(suspended) canvas. Restore its\n // state then copy it over to the temporary canvas.\n this.suspendedCtx.restore();\n copyCtxState(this.suspendedCtx, this.ctx);\n } else {\n this.ctx.restore();\n }\n this.checkSMaskState();\n\n // Ensure that the clipping path is reset (fixes issue6413.pdf).\n this.pendingClip = null;\n\n this._cachedScaleForStroking[0] = -1;\n this._cachedGetSinglePixelWidth = null;\n }\n }\n\n transform(a, b, c, d, e, f) {\n this.ctx.transform(a, b, c, d, e, f);\n\n this._cachedScaleForStroking[0] = -1;\n this._cachedGetSinglePixelWidth = null;\n }\n\n // Path\n constructPath(ops, args, minMax) {\n const ctx = this.ctx;\n const current = this.current;\n let x = current.x,\n y = current.y;\n let startX, startY;\n const currentTransform = getCurrentTransform(ctx);\n\n // Most of the time the current transform is a scaling matrix\n // so we don't need to transform points before computing min/max:\n // we can compute min/max first and then smartly \"apply\" the\n // transform (see Util.scaleMinMax).\n // For rectangle, moveTo and lineTo, min/max are computed in the\n // worker (see evaluator.js).\n const isScalingMatrix =\n (currentTransform[0] === 0 && currentTransform[3] === 0) ||\n (currentTransform[1] === 0 && currentTransform[2] === 0);\n const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null;\n\n for (let i = 0, j = 0, ii = ops.length; i < ii; i++) {\n switch (ops[i] | 0) {\n case OPS.rectangle:\n x = args[j++];\n y = args[j++];\n const width = args[j++];\n const height = args[j++];\n\n const xw = x + width;\n const yh = y + height;\n ctx.moveTo(x, y);\n if (width === 0 || height === 0) {\n ctx.lineTo(xw, yh);\n } else {\n ctx.lineTo(xw, y);\n ctx.lineTo(xw, yh);\n ctx.lineTo(x, yh);\n }\n if (!isScalingMatrix) {\n current.updateRectMinMax(currentTransform, [x, y, xw, yh]);\n }\n ctx.closePath();\n break;\n case OPS.moveTo:\n x = args[j++];\n y = args[j++];\n ctx.moveTo(x, y);\n if (!isScalingMatrix) {\n current.updatePathMinMax(currentTransform, x, y);\n }\n break;\n case OPS.lineTo:\n x = args[j++];\n y = args[j++];\n ctx.lineTo(x, y);\n if (!isScalingMatrix) {\n current.updatePathMinMax(currentTransform, x, y);\n }\n break;\n case OPS.curveTo:\n startX = x;\n startY = y;\n x = args[j + 4];\n y = args[j + 5];\n ctx.bezierCurveTo(\n args[j],\n args[j + 1],\n args[j + 2],\n args[j + 3],\n x,\n y\n );\n current.updateCurvePathMinMax(\n currentTransform,\n startX,\n startY,\n args[j],\n args[j + 1],\n args[j + 2],\n args[j + 3],\n x,\n y,\n minMaxForBezier\n );\n j += 6;\n break;\n case OPS.curveTo2:\n startX = x;\n startY = y;\n ctx.bezierCurveTo(\n x,\n y,\n args[j],\n args[j + 1],\n args[j + 2],\n args[j + 3]\n );\n current.updateCurvePathMinMax(\n currentTransform,\n startX,\n startY,\n x,\n y,\n args[j],\n args[j + 1],\n args[j + 2],\n args[j + 3],\n minMaxForBezier\n );\n x = args[j + 2];\n y = args[j + 3];\n j += 4;\n break;\n case OPS.curveTo3:\n startX = x;\n startY = y;\n x = args[j + 2];\n y = args[j + 3];\n ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y);\n current.updateCurvePathMinMax(\n currentTransform,\n startX,\n startY,\n args[j],\n args[j + 1],\n x,\n y,\n x,\n y,\n minMaxForBezier\n );\n j += 4;\n break;\n case OPS.closePath:\n ctx.closePath();\n break;\n }\n }\n\n if (isScalingMatrix) {\n current.updateScalingPathMinMax(currentTransform, minMaxForBezier);\n }\n\n current.setCurrentPoint(x, y);\n }\n\n closePath() {\n this.ctx.closePath();\n }\n\n stroke(consumePath = true) {\n const ctx = this.ctx;\n const strokeColor = this.current.strokeColor;\n // For stroke we want to temporarily change the global alpha to the\n // stroking alpha.\n ctx.globalAlpha = this.current.strokeAlpha;\n if (this.contentVisible) {\n if (typeof strokeColor === \"object\" && strokeColor?.getPattern) {\n ctx.save();\n ctx.strokeStyle = strokeColor.getPattern(\n ctx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.STROKE\n );\n this.rescaleAndStroke(/* saveRestore */ false);\n ctx.restore();\n } else {\n this.rescaleAndStroke(/* saveRestore */ true);\n }\n }\n if (consumePath) {\n this.consumePath(this.current.getClippedPathBoundingBox());\n }\n // Restore the global alpha to the fill alpha\n ctx.globalAlpha = this.current.fillAlpha;\n }\n\n closeStroke() {\n this.closePath();\n this.stroke();\n }\n\n fill(consumePath = true) {\n const ctx = this.ctx;\n const fillColor = this.current.fillColor;\n const isPatternFill = this.current.patternFill;\n let needRestore = false;\n\n if (isPatternFill) {\n ctx.save();\n ctx.fillStyle = fillColor.getPattern(\n ctx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.FILL\n );\n needRestore = true;\n }\n\n const intersect = this.current.getClippedPathBoundingBox();\n if (this.contentVisible && intersect !== null) {\n if (this.pendingEOFill) {\n ctx.fill(\"evenodd\");\n this.pendingEOFill = false;\n } else {\n ctx.fill();\n }\n }\n\n if (needRestore) {\n ctx.restore();\n }\n if (consumePath) {\n this.consumePath(intersect);\n }\n }\n\n eoFill() {\n this.pendingEOFill = true;\n this.fill();\n }\n\n fillStroke() {\n this.fill(false);\n this.stroke(false);\n\n this.consumePath();\n }\n\n eoFillStroke() {\n this.pendingEOFill = true;\n this.fillStroke();\n }\n\n closeFillStroke() {\n this.closePath();\n this.fillStroke();\n }\n\n closeEOFillStroke() {\n this.pendingEOFill = true;\n this.closePath();\n this.fillStroke();\n }\n\n endPath() {\n this.consumePath();\n }\n\n // Clipping\n clip() {\n this.pendingClip = NORMAL_CLIP;\n }\n\n eoClip() {\n this.pendingClip = EO_CLIP;\n }\n\n // Text\n beginText() {\n this.current.textMatrix = IDENTITY_MATRIX;\n this.current.textMatrixScale = 1;\n this.current.x = this.current.lineX = 0;\n this.current.y = this.current.lineY = 0;\n }\n\n endText() {\n const paths = this.pendingTextPaths;\n const ctx = this.ctx;\n if (paths === undefined) {\n ctx.beginPath();\n return;\n }\n\n ctx.save();\n ctx.beginPath();\n for (const path of paths) {\n ctx.setTransform(...path.transform);\n ctx.translate(path.x, path.y);\n path.addToPath(ctx, path.fontSize);\n }\n ctx.restore();\n ctx.clip();\n ctx.beginPath();\n delete this.pendingTextPaths;\n }\n\n setCharSpacing(spacing) {\n this.current.charSpacing = spacing;\n }\n\n setWordSpacing(spacing) {\n this.current.wordSpacing = spacing;\n }\n\n setHScale(scale) {\n this.current.textHScale = scale / 100;\n }\n\n setLeading(leading) {\n this.current.leading = -leading;\n }\n\n setFont(fontRefName, size) {\n const fontObj = this.commonObjs.get(fontRefName);\n const current = this.current;\n\n if (!fontObj) {\n throw new Error(`Can't find font for ${fontRefName}`);\n }\n current.fontMatrix = fontObj.fontMatrix || FONT_IDENTITY_MATRIX;\n\n // A valid matrix needs all main diagonal elements to be non-zero\n // This also ensures we bypass FF bugzilla bug #719844.\n if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {\n warn(\"Invalid font matrix for font \" + fontRefName);\n }\n\n // The spec for Tf (setFont) says that 'size' specifies the font 'scale',\n // and in some docs this can be negative (inverted x-y axes).\n if (size < 0) {\n size = -size;\n current.fontDirection = -1;\n } else {\n current.fontDirection = 1;\n }\n\n this.current.font = fontObj;\n this.current.fontSize = size;\n\n if (fontObj.isType3Font) {\n return; // we don't need ctx.font for Type3 fonts\n }\n\n const name = fontObj.loadedName || \"sans-serif\";\n const typeface =\n fontObj.systemFontInfo?.css || `\"${name}\", ${fontObj.fallbackName}`;\n\n let bold = \"normal\";\n if (fontObj.black) {\n bold = \"900\";\n } else if (fontObj.bold) {\n bold = \"bold\";\n }\n const italic = fontObj.italic ? \"italic\" : \"normal\";\n\n // Some font backends cannot handle fonts below certain size.\n // Keeping the font at minimal size and using the fontSizeScale to change\n // the current transformation matrix before the fillText/strokeText.\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=726227\n let browserFontSize = size;\n if (size < MIN_FONT_SIZE) {\n browserFontSize = MIN_FONT_SIZE;\n } else if (size > MAX_FONT_SIZE) {\n browserFontSize = MAX_FONT_SIZE;\n }\n this.current.fontSizeScale = size / browserFontSize;\n\n this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`;\n }\n\n setTextRenderingMode(mode) {\n this.current.textRenderingMode = mode;\n }\n\n setTextRise(rise) {\n this.current.textRise = rise;\n }\n\n moveText(x, y) {\n this.current.x = this.current.lineX += x;\n this.current.y = this.current.lineY += y;\n }\n\n setLeadingMoveText(x, y) {\n this.setLeading(-y);\n this.moveText(x, y);\n }\n\n setTextMatrix(a, b, c, d, e, f) {\n this.current.textMatrix = [a, b, c, d, e, f];\n this.current.textMatrixScale = Math.hypot(a, b);\n\n this.current.x = this.current.lineX = 0;\n this.current.y = this.current.lineY = 0;\n }\n\n nextLine() {\n this.moveText(0, this.current.leading);\n }\n\n paintChar(character, x, y, patternTransform) {\n const ctx = this.ctx;\n const current = this.current;\n const font = current.font;\n const textRenderingMode = current.textRenderingMode;\n const fontSize = current.fontSize / current.fontSizeScale;\n const fillStrokeMode =\n textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n const isAddToPathSet = !!(\n textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG\n );\n const patternFill = current.patternFill && !font.missingFile;\n\n let addToPath;\n if (font.disableFontFace || isAddToPathSet || patternFill) {\n addToPath = font.getPathGenerator(this.commonObjs, character);\n }\n\n if (font.disableFontFace || patternFill) {\n ctx.save();\n ctx.translate(x, y);\n ctx.beginPath();\n addToPath(ctx, fontSize);\n if (patternTransform) {\n ctx.setTransform(...patternTransform);\n }\n if (\n fillStrokeMode === TextRenderingMode.FILL ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE\n ) {\n ctx.fill();\n }\n if (\n fillStrokeMode === TextRenderingMode.STROKE ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE\n ) {\n ctx.stroke();\n }\n ctx.restore();\n } else {\n if (\n fillStrokeMode === TextRenderingMode.FILL ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE\n ) {\n ctx.fillText(character, x, y);\n }\n if (\n fillStrokeMode === TextRenderingMode.STROKE ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE\n ) {\n ctx.strokeText(character, x, y);\n }\n }\n\n if (isAddToPathSet) {\n const paths = (this.pendingTextPaths ||= []);\n paths.push({\n transform: getCurrentTransform(ctx),\n x,\n y,\n fontSize,\n addToPath,\n });\n }\n }\n\n get isFontSubpixelAAEnabled() {\n // Checks if anti-aliasing is enabled when scaled text is painted.\n // On Windows GDI scaled fonts looks bad.\n const { context: ctx } = this.cachedCanvases.getCanvas(\n \"isFontSubpixelAAEnabled\",\n 10,\n 10\n );\n ctx.scale(1.5, 1);\n ctx.fillText(\"I\", 0, 10);\n const data = ctx.getImageData(0, 0, 10, 10).data;\n let enabled = false;\n for (let i = 3; i < data.length; i += 4) {\n if (data[i] > 0 && data[i] < 255) {\n enabled = true;\n break;\n }\n }\n return shadow(this, \"isFontSubpixelAAEnabled\", enabled);\n }\n\n showText(glyphs) {\n const current = this.current;\n const font = current.font;\n if (font.isType3Font) {\n return this.showType3Text(glyphs);\n }\n\n const fontSize = current.fontSize;\n if (fontSize === 0) {\n return undefined;\n }\n\n const ctx = this.ctx;\n const fontSizeScale = current.fontSizeScale;\n const charSpacing = current.charSpacing;\n const wordSpacing = current.wordSpacing;\n const fontDirection = current.fontDirection;\n const textHScale = current.textHScale * fontDirection;\n const glyphsLength = glyphs.length;\n const vertical = font.vertical;\n const spacingDir = vertical ? 1 : -1;\n const defaultVMetrics = font.defaultVMetrics;\n const widthAdvanceScale = fontSize * current.fontMatrix[0];\n\n const simpleFillText =\n current.textRenderingMode === TextRenderingMode.FILL &&\n !font.disableFontFace &&\n !current.patternFill;\n\n ctx.save();\n ctx.transform(...current.textMatrix);\n ctx.translate(current.x, current.y + current.textRise);\n\n if (fontDirection > 0) {\n ctx.scale(textHScale, -1);\n } else {\n ctx.scale(textHScale, 1);\n }\n\n let patternTransform;\n if (current.patternFill) {\n ctx.save();\n const pattern = current.fillColor.getPattern(\n ctx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.FILL\n );\n patternTransform = getCurrentTransform(ctx);\n ctx.restore();\n ctx.fillStyle = pattern;\n }\n\n let lineWidth = current.lineWidth;\n const scale = current.textMatrixScale;\n if (scale === 0 || lineWidth === 0) {\n const fillStrokeMode =\n current.textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n if (\n fillStrokeMode === TextRenderingMode.STROKE ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE\n ) {\n lineWidth = this.getSinglePixelWidth();\n }\n } else {\n lineWidth /= scale;\n }\n\n if (fontSizeScale !== 1.0) {\n ctx.scale(fontSizeScale, fontSizeScale);\n lineWidth /= fontSizeScale;\n }\n\n ctx.lineWidth = lineWidth;\n\n if (font.isInvalidPDFjsFont) {\n const chars = [];\n let width = 0;\n for (const glyph of glyphs) {\n chars.push(glyph.unicode);\n width += glyph.width;\n }\n ctx.fillText(chars.join(\"\"), 0, 0);\n current.x += width * widthAdvanceScale * textHScale;\n ctx.restore();\n this.compose();\n\n return undefined;\n }\n\n let x = 0,\n i;\n for (i = 0; i < glyphsLength; ++i) {\n const glyph = glyphs[i];\n if (typeof glyph === \"number\") {\n x += (spacingDir * glyph * fontSize) / 1000;\n continue;\n }\n\n let restoreNeeded = false;\n const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n const character = glyph.fontChar;\n const accent = glyph.accent;\n let scaledX, scaledY;\n let width = glyph.width;\n if (vertical) {\n const vmetric = glyph.vmetric || defaultVMetrics;\n const vx =\n -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale;\n const vy = vmetric[2] * widthAdvanceScale;\n\n width = vmetric ? -vmetric[0] : width;\n scaledX = vx / fontSizeScale;\n scaledY = (x + vy) / fontSizeScale;\n } else {\n scaledX = x / fontSizeScale;\n scaledY = 0;\n }\n\n if (font.remeasure && width > 0) {\n // Some standard fonts may not have the exact width: rescale per\n // character if measured width is greater than expected glyph width\n // and subpixel-aa is enabled, otherwise just center the glyph.\n const measuredWidth =\n ((ctx.measureText(character).width * 1000) / fontSize) *\n fontSizeScale;\n if (width < measuredWidth && this.isFontSubpixelAAEnabled) {\n const characterScaleX = width / measuredWidth;\n restoreNeeded = true;\n ctx.save();\n ctx.scale(characterScaleX, 1);\n scaledX /= characterScaleX;\n } else if (width !== measuredWidth) {\n scaledX +=\n (((width - measuredWidth) / 2000) * fontSize) / fontSizeScale;\n }\n }\n\n // Only attempt to draw the glyph if it is actually in the embedded font\n // file or if there isn't a font file so the fallback font is shown.\n if (this.contentVisible && (glyph.isInFont || font.missingFile)) {\n if (simpleFillText && !accent) {\n // common case\n ctx.fillText(character, scaledX, scaledY);\n } else {\n this.paintChar(character, scaledX, scaledY, patternTransform);\n if (accent) {\n const scaledAccentX =\n scaledX + (fontSize * accent.offset.x) / fontSizeScale;\n const scaledAccentY =\n scaledY - (fontSize * accent.offset.y) / fontSizeScale;\n this.paintChar(\n accent.fontChar,\n scaledAccentX,\n scaledAccentY,\n patternTransform\n );\n }\n }\n }\n\n const charWidth = vertical\n ? width * widthAdvanceScale - spacing * fontDirection\n : width * widthAdvanceScale + spacing * fontDirection;\n x += charWidth;\n\n if (restoreNeeded) {\n ctx.restore();\n }\n }\n if (vertical) {\n current.y -= x;\n } else {\n current.x += x * textHScale;\n }\n ctx.restore();\n this.compose();\n\n return undefined;\n }\n\n showType3Text(glyphs) {\n // Type3 fonts - each glyph is a \"mini-PDF\"\n const ctx = this.ctx;\n const current = this.current;\n const font = current.font;\n const fontSize = current.fontSize;\n const fontDirection = current.fontDirection;\n const spacingDir = font.vertical ? 1 : -1;\n const charSpacing = current.charSpacing;\n const wordSpacing = current.wordSpacing;\n const textHScale = current.textHScale * fontDirection;\n const fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX;\n const glyphsLength = glyphs.length;\n const isTextInvisible =\n current.textRenderingMode === TextRenderingMode.INVISIBLE;\n let i, glyph, width, spacingLength;\n\n if (isTextInvisible || fontSize === 0) {\n return;\n }\n this._cachedScaleForStroking[0] = -1;\n this._cachedGetSinglePixelWidth = null;\n\n ctx.save();\n ctx.transform(...current.textMatrix);\n ctx.translate(current.x, current.y);\n\n ctx.scale(textHScale, fontDirection);\n\n for (i = 0; i < glyphsLength; ++i) {\n glyph = glyphs[i];\n if (typeof glyph === \"number\") {\n spacingLength = (spacingDir * glyph * fontSize) / 1000;\n this.ctx.translate(spacingLength, 0);\n current.x += spacingLength * textHScale;\n continue;\n }\n\n const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n const operatorList = font.charProcOperatorList[glyph.operatorListId];\n if (!operatorList) {\n warn(`Type3 character \"${glyph.operatorListId}\" is not available.`);\n continue;\n }\n if (this.contentVisible) {\n this.processingType3 = glyph;\n this.save();\n ctx.scale(fontSize, fontSize);\n ctx.transform(...fontMatrix);\n this.executeOperatorList(operatorList);\n this.restore();\n }\n\n const transformed = Util.applyTransform([glyph.width, 0], fontMatrix);\n width = transformed[0] * fontSize + spacing;\n\n ctx.translate(width, 0);\n current.x += width * textHScale;\n }\n ctx.restore();\n this.processingType3 = null;\n }\n\n // Type3 fonts\n setCharWidth(xWidth, yWidth) {\n // We can safely ignore this since the width should be the same\n // as the width in the Widths array.\n }\n\n setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {\n this.ctx.rect(llx, lly, urx - llx, ury - lly);\n this.ctx.clip();\n this.endPath();\n }\n\n // Color\n getColorN_Pattern(IR) {\n let pattern;\n if (IR[0] === \"TilingPattern\") {\n const color = IR[1];\n const baseTransform = this.baseTransform || getCurrentTransform(this.ctx);\n const canvasGraphicsFactory = {\n createCanvasGraphics: ctx =>\n new CanvasGraphics(\n ctx,\n this.commonObjs,\n this.objs,\n this.canvasFactory,\n this.filterFactory,\n {\n optionalContentConfig: this.optionalContentConfig,\n markedContentStack: this.markedContentStack,\n }\n ),\n };\n pattern = new TilingPattern(\n IR,\n color,\n this.ctx,\n canvasGraphicsFactory,\n baseTransform\n );\n } else {\n pattern = this._getPattern(IR[1], IR[2]);\n }\n return pattern;\n }\n\n setStrokeColorN() {\n this.current.strokeColor = this.getColorN_Pattern(arguments);\n }\n\n setFillColorN() {\n this.current.fillColor = this.getColorN_Pattern(arguments);\n this.current.patternFill = true;\n }\n\n setStrokeRGBColor(r, g, b) {\n const color = Util.makeHexColor(r, g, b);\n this.ctx.strokeStyle = color;\n this.current.strokeColor = color;\n }\n\n setFillRGBColor(r, g, b) {\n const color = Util.makeHexColor(r, g, b);\n this.ctx.fillStyle = color;\n this.current.fillColor = color;\n this.current.patternFill = false;\n }\n\n _getPattern(objId, matrix = null) {\n let pattern;\n if (this.cachedPatterns.has(objId)) {\n pattern = this.cachedPatterns.get(objId);\n } else {\n pattern = getShadingPattern(this.getObject(objId));\n this.cachedPatterns.set(objId, pattern);\n }\n if (matrix) {\n pattern.matrix = matrix;\n }\n return pattern;\n }\n\n shadingFill(objId) {\n if (!this.contentVisible) {\n return;\n }\n const ctx = this.ctx;\n\n this.save();\n const pattern = this._getPattern(objId);\n ctx.fillStyle = pattern.getPattern(\n ctx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.SHADING\n );\n\n const inv = getCurrentTransformInverse(ctx);\n if (inv) {\n const { width, height } = ctx.canvas;\n const [x0, y0, x1, y1] = Util.getAxialAlignedBoundingBox(\n [0, 0, width, height],\n inv\n );\n\n this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n } else {\n // HACK to draw the gradient onto an infinite rectangle.\n // PDF gradients are drawn across the entire image while\n // Canvas only allows gradients to be drawn in a rectangle\n // The following bug should allow us to remove this.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=664884\n\n this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);\n }\n\n this.compose(this.current.getClippedPathBoundingBox());\n this.restore();\n }\n\n // Images\n beginInlineImage() {\n unreachable(\"Should not call beginInlineImage\");\n }\n\n beginImageData() {\n unreachable(\"Should not call beginImageData\");\n }\n\n paintFormXObjectBegin(matrix, bbox) {\n if (!this.contentVisible) {\n return;\n }\n this.save();\n this.baseTransformStack.push(this.baseTransform);\n\n if (matrix) {\n this.transform(...matrix);\n }\n this.baseTransform = getCurrentTransform(this.ctx);\n\n if (bbox) {\n const width = bbox[2] - bbox[0];\n const height = bbox[3] - bbox[1];\n this.ctx.rect(bbox[0], bbox[1], width, height);\n this.current.updateRectMinMax(getCurrentTransform(this.ctx), bbox);\n this.clip();\n this.endPath();\n }\n }\n\n paintFormXObjectEnd() {\n if (!this.contentVisible) {\n return;\n }\n this.restore();\n this.baseTransform = this.baseTransformStack.pop();\n }\n\n beginGroup(group) {\n if (!this.contentVisible) {\n return;\n }\n\n this.save();\n // If there's an active soft mask we don't want it enabled for the group, so\n // clear it out. The mask and suspended canvas will be restored in endGroup.\n if (this.inSMaskMode) {\n this.endSMaskMode();\n this.current.activeSMask = null;\n }\n\n const currentCtx = this.ctx;\n // TODO non-isolated groups - according to Rik at adobe non-isolated\n // group results aren't usually that different and they even have tools\n // that ignore this setting. Notes from Rik on implementing:\n // - When you encounter an transparency group, create a new canvas with\n // the dimensions of the bbox\n // - copy the content from the previous canvas to the new canvas\n // - draw as usual\n // - remove the backdrop alpha:\n // alphaNew = 1 - (1 - alpha)/(1 - alphaBackdrop) with 'alpha' the alpha\n // value of your transparency group and 'alphaBackdrop' the alpha of the\n // backdrop\n // - remove background color:\n // colorNew = color - alphaNew *colorBackdrop /(1 - alphaNew)\n if (!group.isolated) {\n info(\"TODO: Support non-isolated groups.\");\n }\n\n // TODO knockout - supposedly possible with the clever use of compositing\n // modes.\n if (group.knockout) {\n warn(\"Knockout groups not supported.\");\n }\n\n const currentTransform = getCurrentTransform(currentCtx);\n if (group.matrix) {\n currentCtx.transform(...group.matrix);\n }\n if (!group.bbox) {\n throw new Error(\"Bounding box is required.\");\n }\n\n // Based on the current transform figure out how big the bounding box\n // will actually be.\n let bounds = Util.getAxialAlignedBoundingBox(\n group.bbox,\n getCurrentTransform(currentCtx)\n );\n // Clip the bounding box to the current canvas.\n const canvasBounds = [\n 0,\n 0,\n currentCtx.canvas.width,\n currentCtx.canvas.height,\n ];\n bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];\n // Use ceil in case we're between sizes so we don't create canvas that is\n // too small and make the canvas at least 1x1 pixels.\n const offsetX = Math.floor(bounds[0]);\n const offsetY = Math.floor(bounds[1]);\n const drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);\n const drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);\n\n this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]);\n\n let cacheId = \"groupAt\" + this.groupLevel;\n if (group.smask) {\n // Using two cache entries is case if masks are used one after another.\n cacheId += \"_smask_\" + (this.smaskCounter++ % 2);\n }\n const scratchCanvas = this.cachedCanvases.getCanvas(\n cacheId,\n drawnWidth,\n drawnHeight\n );\n const groupCtx = scratchCanvas.context;\n\n // Since we created a new canvas that is just the size of the bounding box\n // we have to translate the group ctx.\n groupCtx.translate(-offsetX, -offsetY);\n groupCtx.transform(...currentTransform);\n\n if (group.smask) {\n // Saving state and cached mask to be used in setGState.\n this.smaskStack.push({\n canvas: scratchCanvas.canvas,\n context: groupCtx,\n offsetX,\n offsetY,\n subtype: group.smask.subtype,\n backdrop: group.smask.backdrop,\n transferMap: group.smask.transferMap || null,\n startTransformInverse: null, // used during suspend operation\n });\n } else {\n // Setup the current ctx so when the group is popped we draw it at the\n // right location.\n currentCtx.setTransform(1, 0, 0, 1, 0, 0);\n currentCtx.translate(offsetX, offsetY);\n currentCtx.save();\n }\n // The transparency group inherits all off the current graphics state\n // except the blend mode, soft mask, and alpha constants.\n copyCtxState(currentCtx, groupCtx);\n this.ctx = groupCtx;\n this.setGState([\n [\"BM\", \"source-over\"],\n [\"ca\", 1],\n [\"CA\", 1],\n ]);\n this.groupStack.push(currentCtx);\n this.groupLevel++;\n }\n\n endGroup(group) {\n if (!this.contentVisible) {\n return;\n }\n this.groupLevel--;\n const groupCtx = this.ctx;\n const ctx = this.groupStack.pop();\n this.ctx = ctx;\n // Turn off image smoothing to avoid sub pixel interpolation which can\n // look kind of blurry for some pdfs.\n this.ctx.imageSmoothingEnabled = false;\n\n if (group.smask) {\n this.tempSMask = this.smaskStack.pop();\n this.restore();\n } else {\n this.ctx.restore();\n const currentMtx = getCurrentTransform(this.ctx);\n this.restore();\n this.ctx.save();\n this.ctx.setTransform(...currentMtx);\n const dirtyBox = Util.getAxialAlignedBoundingBox(\n [0, 0, groupCtx.canvas.width, groupCtx.canvas.height],\n currentMtx\n );\n this.ctx.drawImage(groupCtx.canvas, 0, 0);\n this.ctx.restore();\n this.compose(dirtyBox);\n }\n }\n\n beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) {\n // The annotations are drawn just after the page content.\n // The page content drawing can potentially have set a transform,\n // a clipping path, whatever...\n // So in order to have something clean, we restore the initial state.\n this.#restoreInitialState();\n resetCtxToDefault(this.ctx);\n\n this.ctx.save();\n this.save();\n\n if (this.baseTransform) {\n this.ctx.setTransform(...this.baseTransform);\n }\n\n if (rect) {\n const width = rect[2] - rect[0];\n const height = rect[3] - rect[1];\n\n if (hasOwnCanvas && this.annotationCanvasMap) {\n transform = transform.slice();\n transform[4] -= rect[0];\n transform[5] -= rect[1];\n\n rect = rect.slice();\n rect[0] = rect[1] = 0;\n rect[2] = width;\n rect[3] = height;\n\n const [scaleX, scaleY] = Util.singularValueDecompose2dScale(\n getCurrentTransform(this.ctx)\n );\n const { viewportScale } = this;\n const canvasWidth = Math.ceil(\n width * this.outputScaleX * viewportScale\n );\n const canvasHeight = Math.ceil(\n height * this.outputScaleY * viewportScale\n );\n\n this.annotationCanvas = this.canvasFactory.create(\n canvasWidth,\n canvasHeight\n );\n const { canvas, context } = this.annotationCanvas;\n this.annotationCanvasMap.set(id, canvas);\n this.annotationCanvas.savedCtx = this.ctx;\n this.ctx = context;\n this.ctx.save();\n this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY);\n\n resetCtxToDefault(this.ctx);\n } else {\n resetCtxToDefault(this.ctx);\n\n this.ctx.rect(rect[0], rect[1], width, height);\n this.ctx.clip();\n this.endPath();\n }\n }\n\n this.current = new CanvasExtraState(\n this.ctx.canvas.width,\n this.ctx.canvas.height\n );\n\n this.transform(...transform);\n this.transform(...matrix);\n }\n\n endAnnotation() {\n if (this.annotationCanvas) {\n this.ctx.restore();\n this.#drawFilter();\n\n this.ctx = this.annotationCanvas.savedCtx;\n delete this.annotationCanvas.savedCtx;\n delete this.annotationCanvas;\n }\n }\n\n paintImageMaskXObject(img) {\n if (!this.contentVisible) {\n return;\n }\n const count = img.count;\n img = this.getObject(img.data, img);\n img.count = count;\n\n const ctx = this.ctx;\n const glyph = this.processingType3;\n\n if (glyph) {\n if (glyph.compiled === undefined) {\n glyph.compiled = compileType3Glyph(img);\n }\n\n if (glyph.compiled) {\n glyph.compiled(ctx);\n return;\n }\n }\n const mask = this._createMaskCanvas(img);\n const maskCanvas = mask.canvas;\n\n ctx.save();\n // The mask is drawn with the transform applied. Reset the current\n // transform to draw to the identity.\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY);\n ctx.restore();\n this.compose();\n }\n\n paintImageMaskXObjectRepeat(\n img,\n scaleX,\n skewX = 0,\n skewY = 0,\n scaleY,\n positions\n ) {\n if (!this.contentVisible) {\n return;\n }\n\n img = this.getObject(img.data, img);\n\n const ctx = this.ctx;\n ctx.save();\n const currentTransform = getCurrentTransform(ctx);\n ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0);\n const mask = this._createMaskCanvas(img);\n\n ctx.setTransform(\n 1,\n 0,\n 0,\n 1,\n mask.offsetX - currentTransform[4],\n mask.offsetY - currentTransform[5]\n );\n for (let i = 0, ii = positions.length; i < ii; i += 2) {\n const trans = Util.transform(currentTransform, [\n scaleX,\n skewX,\n skewY,\n scaleY,\n positions[i],\n positions[i + 1],\n ]);\n\n const [x, y] = Util.applyTransform([0, 0], trans);\n ctx.drawImage(mask.canvas, x, y);\n }\n ctx.restore();\n this.compose();\n }\n\n paintImageMaskXObjectGroup(images) {\n if (!this.contentVisible) {\n return;\n }\n const ctx = this.ctx;\n\n const fillColor = this.current.fillColor;\n const isPatternFill = this.current.patternFill;\n\n for (const image of images) {\n const { data, width, height, transform } = image;\n\n const maskCanvas = this.cachedCanvases.getCanvas(\n \"maskCanvas\",\n width,\n height\n );\n const maskCtx = maskCanvas.context;\n maskCtx.save();\n\n const img = this.getObject(data, image);\n putBinaryImageMask(maskCtx, img);\n\n maskCtx.globalCompositeOperation = \"source-in\";\n\n maskCtx.fillStyle = isPatternFill\n ? fillColor.getPattern(\n maskCtx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.FILL\n )\n : fillColor;\n maskCtx.fillRect(0, 0, width, height);\n\n maskCtx.restore();\n\n ctx.save();\n ctx.transform(...transform);\n ctx.scale(1, -1);\n drawImageAtIntegerCoords(\n ctx,\n maskCanvas.canvas,\n 0,\n 0,\n width,\n height,\n 0,\n -1,\n 1,\n 1\n );\n ctx.restore();\n }\n this.compose();\n }\n\n paintImageXObject(objId) {\n if (!this.contentVisible) {\n return;\n }\n const imgData = this.getObject(objId);\n if (!imgData) {\n warn(\"Dependent image isn't ready yet\");\n return;\n }\n\n this.paintInlineImageXObject(imgData);\n }\n\n paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {\n if (!this.contentVisible) {\n return;\n }\n const imgData = this.getObject(objId);\n if (!imgData) {\n warn(\"Dependent image isn't ready yet\");\n return;\n }\n\n const width = imgData.width;\n const height = imgData.height;\n const map = [];\n for (let i = 0, ii = positions.length; i < ii; i += 2) {\n map.push({\n transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],\n x: 0,\n y: 0,\n w: width,\n h: height,\n });\n }\n this.paintInlineImageXObjectGroup(imgData, map);\n }\n\n applyTransferMapsToCanvas(ctx) {\n if (this.current.transferMaps !== \"none\") {\n ctx.filter = this.current.transferMaps;\n ctx.drawImage(ctx.canvas, 0, 0);\n ctx.filter = \"none\";\n }\n return ctx.canvas;\n }\n\n applyTransferMapsToBitmap(imgData) {\n if (this.current.transferMaps === \"none\") {\n return imgData.bitmap;\n }\n const { bitmap, width, height } = imgData;\n const tmpCanvas = this.cachedCanvases.getCanvas(\n \"inlineImage\",\n width,\n height\n );\n const tmpCtx = tmpCanvas.context;\n tmpCtx.filter = this.current.transferMaps;\n tmpCtx.drawImage(bitmap, 0, 0);\n tmpCtx.filter = \"none\";\n\n return tmpCanvas.canvas;\n }\n\n paintInlineImageXObject(imgData) {\n if (!this.contentVisible) {\n return;\n }\n const width = imgData.width;\n const height = imgData.height;\n const ctx = this.ctx;\n\n this.save();\n\n if (\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n !isNodeJS\n ) {\n // The filter, if any, will be applied in applyTransferMapsToBitmap.\n // It must be applied to the image before rescaling else some artifacts\n // could appear.\n // The final restore will reset it to its value.\n const { filter } = ctx;\n if (filter !== \"none\" && filter !== \"\") {\n ctx.filter = \"none\";\n }\n }\n\n // scale the image to the unit square\n ctx.scale(1 / width, -1 / height);\n\n let imgToPaint;\n if (imgData.bitmap) {\n imgToPaint = this.applyTransferMapsToBitmap(imgData);\n } else if (\n (typeof HTMLElement === \"function\" && imgData instanceof HTMLElement) ||\n !imgData.data\n ) {\n // typeof check is needed due to node.js support, see issue #8489\n imgToPaint = imgData;\n } else {\n const tmpCanvas = this.cachedCanvases.getCanvas(\n \"inlineImage\",\n width,\n height\n );\n const tmpCtx = tmpCanvas.context;\n putBinaryImageData(tmpCtx, imgData);\n imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);\n }\n\n const scaled = this._scaleImage(\n imgToPaint,\n getCurrentTransformInverse(ctx)\n );\n ctx.imageSmoothingEnabled = getImageSmoothingEnabled(\n getCurrentTransform(ctx),\n imgData.interpolate\n );\n\n drawImageAtIntegerCoords(\n ctx,\n scaled.img,\n 0,\n 0,\n scaled.paintWidth,\n scaled.paintHeight,\n 0,\n -height,\n width,\n height\n );\n this.compose();\n this.restore();\n }\n\n paintInlineImageXObjectGroup(imgData, map) {\n if (!this.contentVisible) {\n return;\n }\n const ctx = this.ctx;\n let imgToPaint;\n if (imgData.bitmap) {\n imgToPaint = imgData.bitmap;\n } else {\n const w = imgData.width;\n const h = imgData.height;\n\n const tmpCanvas = this.cachedCanvases.getCanvas(\"inlineImage\", w, h);\n const tmpCtx = tmpCanvas.context;\n putBinaryImageData(tmpCtx, imgData);\n imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);\n }\n\n for (const entry of map) {\n ctx.save();\n ctx.transform(...entry.transform);\n ctx.scale(1, -1);\n drawImageAtIntegerCoords(\n ctx,\n imgToPaint,\n entry.x,\n entry.y,\n entry.w,\n entry.h,\n 0,\n -1,\n 1,\n 1\n );\n ctx.restore();\n }\n this.compose();\n }\n\n paintSolidColorImageMask() {\n if (!this.contentVisible) {\n return;\n }\n this.ctx.fillRect(0, 0, 1, 1);\n this.compose();\n }\n\n // Marked content\n\n markPoint(tag) {\n // TODO Marked content.\n }\n\n markPointProps(tag, properties) {\n // TODO Marked content.\n }\n\n beginMarkedContent(tag) {\n this.markedContentStack.push({\n visible: true,\n });\n }\n\n beginMarkedContentProps(tag, properties) {\n if (tag === \"OC\") {\n this.markedContentStack.push({\n visible: this.optionalContentConfig.isVisible(properties),\n });\n } else {\n this.markedContentStack.push({\n visible: true,\n });\n }\n this.contentVisible = this.isContentVisible();\n }\n\n endMarkedContent() {\n this.markedContentStack.pop();\n this.contentVisible = this.isContentVisible();\n }\n\n // Compatibility\n\n beginCompat() {\n // TODO ignore undefined operators (should we do that anyway?)\n }\n\n endCompat() {\n // TODO stop ignoring undefined operators\n }\n\n // Helper functions\n\n consumePath(clipBox) {\n const isEmpty = this.current.isEmptyClip();\n if (this.pendingClip) {\n this.current.updateClipFromPath();\n }\n if (!this.pendingClip) {\n this.compose(clipBox);\n }\n const ctx = this.ctx;\n if (this.pendingClip) {\n if (!isEmpty) {\n if (this.pendingClip === EO_CLIP) {\n ctx.clip(\"evenodd\");\n } else {\n ctx.clip();\n }\n }\n this.pendingClip = null;\n }\n this.current.startNewPathAndClipBox(this.current.clipBox);\n ctx.beginPath();\n }\n\n getSinglePixelWidth() {\n if (!this._cachedGetSinglePixelWidth) {\n const m = getCurrentTransform(this.ctx);\n if (m[1] === 0 && m[2] === 0) {\n // Fast path\n this._cachedGetSinglePixelWidth =\n 1 / Math.min(Math.abs(m[0]), Math.abs(m[3]));\n } else {\n const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]);\n const normX = Math.hypot(m[0], m[2]);\n const normY = Math.hypot(m[1], m[3]);\n this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet;\n }\n }\n return this._cachedGetSinglePixelWidth;\n }\n\n getScaleForStroking() {\n // A pixel has thicknessX = thicknessY = 1;\n // A transformed pixel is a parallelogram and the thicknesses\n // corresponds to the heights.\n // The goal of this function is to rescale before setting the\n // lineWidth in order to have both thicknesses greater or equal\n // to 1 after transform.\n if (this._cachedScaleForStroking[0] === -1) {\n const { lineWidth } = this.current;\n const { a, b, c, d } = this.ctx.getTransform();\n let scaleX, scaleY;\n\n if (b === 0 && c === 0) {\n // Fast path\n const normX = Math.abs(a);\n const normY = Math.abs(d);\n if (normX === normY) {\n if (lineWidth === 0) {\n scaleX = scaleY = 1 / normX;\n } else {\n const scaledLineWidth = normX * lineWidth;\n scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1;\n }\n } else if (lineWidth === 0) {\n scaleX = 1 / normX;\n scaleY = 1 / normY;\n } else {\n const scaledXLineWidth = normX * lineWidth;\n const scaledYLineWidth = normY * lineWidth;\n scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1;\n scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1;\n }\n } else {\n // A pixel (base (x, y)) is transformed by M into a parallelogram:\n // - its area is |det(M)|;\n // - heightY (orthogonal to Mx) has a length: |det(M)| / norm(Mx);\n // - heightX (orthogonal to My) has a length: |det(M)| / norm(My).\n // heightX and heightY are the thicknesses of the transformed pixel\n // and they must be both greater or equal to 1.\n const absDet = Math.abs(a * d - b * c);\n const normX = Math.hypot(a, b);\n const normY = Math.hypot(c, d);\n if (lineWidth === 0) {\n scaleX = normY / absDet;\n scaleY = normX / absDet;\n } else {\n const baseArea = lineWidth * absDet;\n scaleX = normY > baseArea ? normY / baseArea : 1;\n scaleY = normX > baseArea ? normX / baseArea : 1;\n }\n }\n this._cachedScaleForStroking[0] = scaleX;\n this._cachedScaleForStroking[1] = scaleY;\n }\n return this._cachedScaleForStroking;\n }\n\n // Rescale before stroking in order to have a final lineWidth\n // with both thicknesses greater or equal to 1.\n rescaleAndStroke(saveRestore) {\n const { ctx } = this;\n const { lineWidth } = this.current;\n const [scaleX, scaleY] = this.getScaleForStroking();\n\n ctx.lineWidth = lineWidth || 1;\n\n if (scaleX === 1 && scaleY === 1) {\n ctx.stroke();\n return;\n }\n\n const dashes = ctx.getLineDash();\n if (saveRestore) {\n ctx.save();\n }\n\n ctx.scale(scaleX, scaleY);\n\n // How the dashed line is rendered depends on the current transform...\n // so we added a rescale to handle too thin lines and consequently\n // the way the line is dashed will be modified.\n // If scaleX === scaleY, the dashed lines will be rendered correctly\n // else we'll have some bugs (but only with too thin lines).\n // Here we take the max... why not taking the min... or something else.\n // Anyway, as said it's buggy when scaleX !== scaleY.\n if (dashes.length > 0) {\n const scale = Math.max(scaleX, scaleY);\n ctx.setLineDash(dashes.map(x => x / scale));\n ctx.lineDashOffset /= scale;\n }\n\n ctx.stroke();\n\n if (saveRestore) {\n ctx.restore();\n }\n }\n\n isContentVisible() {\n for (let i = this.markedContentStack.length - 1; i >= 0; i--) {\n if (!this.markedContentStack[i].visible) {\n return false;\n }\n }\n return true;\n }\n}\n\nfor (const op in OPS) {\n if (CanvasGraphics.prototype[op] !== undefined) {\n CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op];\n }\n}\n\nexport { CanvasGraphics };\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass GlobalWorkerOptions {\n static #port = null;\n\n static #src = \"\";\n\n /**\n * @type {Worker | null}\n */\n static get workerPort() {\n return this.#port;\n }\n\n /**\n * @param {Worker | null} workerPort - Defines global port for worker process.\n * Overrides the `workerSrc` option.\n */\n static set workerPort(val) {\n if (\n !(typeof Worker !== \"undefined\" && val instanceof Worker) &&\n val !== null\n ) {\n throw new Error(\"Invalid `workerPort` type.\");\n }\n this.#port = val;\n }\n\n /**\n * @type {string}\n */\n static get workerSrc() {\n return this.#src;\n }\n\n /**\n * @param {string} workerSrc - A string containing the path and filename of\n * the worker file.\n *\n * NOTE: The `workerSrc` option should always be set, in order to prevent\n * any issues when using the PDF.js library.\n */\n static set workerSrc(val) {\n if (typeof val !== \"string\") {\n throw new Error(\"Invalid `workerSrc` type.\");\n }\n this.#src = val;\n }\n}\n\nexport { GlobalWorkerOptions };\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n AbortException,\n assert,\n MissingPDFException,\n PasswordException,\n UnexpectedResponseException,\n UnknownErrorException,\n unreachable,\n} from \"./util.js\";\n\nconst CallbackKind = {\n UNKNOWN: 0,\n DATA: 1,\n ERROR: 2,\n};\n\nconst StreamKind = {\n UNKNOWN: 0,\n CANCEL: 1,\n CANCEL_COMPLETE: 2,\n CLOSE: 3,\n ENQUEUE: 4,\n ERROR: 5,\n PULL: 6,\n PULL_COMPLETE: 7,\n START_COMPLETE: 8,\n};\n\nfunction wrapReason(reason) {\n if (\n !(\n reason instanceof Error ||\n (typeof reason === \"object\" && reason !== null)\n )\n ) {\n unreachable(\n 'wrapReason: Expected \"reason\" to be a (possibly cloned) Error.'\n );\n }\n switch (reason.name) {\n case \"AbortException\":\n return new AbortException(reason.message);\n case \"MissingPDFException\":\n return new MissingPDFException(reason.message);\n case \"PasswordException\":\n return new PasswordException(reason.message, reason.code);\n case \"UnexpectedResponseException\":\n return new UnexpectedResponseException(reason.message, reason.status);\n case \"UnknownErrorException\":\n return new UnknownErrorException(reason.message, reason.details);\n default:\n return new UnknownErrorException(reason.message, reason.toString());\n }\n}\n\nclass MessageHandler {\n constructor(sourceName, targetName, comObj) {\n this.sourceName = sourceName;\n this.targetName = targetName;\n this.comObj = comObj;\n this.callbackId = 1;\n this.streamId = 1;\n this.streamSinks = Object.create(null);\n this.streamControllers = Object.create(null);\n this.callbackCapabilities = Object.create(null);\n this.actionHandler = Object.create(null);\n\n this._onComObjOnMessage = event => {\n const data = event.data;\n if (data.targetName !== this.sourceName) {\n return;\n }\n if (data.stream) {\n this.#processStreamMessage(data);\n return;\n }\n if (data.callback) {\n const callbackId = data.callbackId;\n const capability = this.callbackCapabilities[callbackId];\n if (!capability) {\n throw new Error(`Cannot resolve callback ${callbackId}`);\n }\n delete this.callbackCapabilities[callbackId];\n\n if (data.callback === CallbackKind.DATA) {\n capability.resolve(data.data);\n } else if (data.callback === CallbackKind.ERROR) {\n capability.reject(wrapReason(data.reason));\n } else {\n throw new Error(\"Unexpected callback case\");\n }\n return;\n }\n const action = this.actionHandler[data.action];\n if (!action) {\n throw new Error(`Unknown action from worker: ${data.action}`);\n }\n if (data.callbackId) {\n const cbSourceName = this.sourceName;\n const cbTargetName = data.sourceName;\n\n new Promise(function (resolve) {\n resolve(action(data.data));\n }).then(\n function (result) {\n comObj.postMessage({\n sourceName: cbSourceName,\n targetName: cbTargetName,\n callback: CallbackKind.DATA,\n callbackId: data.callbackId,\n data: result,\n });\n },\n function (reason) {\n comObj.postMessage({\n sourceName: cbSourceName,\n targetName: cbTargetName,\n callback: CallbackKind.ERROR,\n callbackId: data.callbackId,\n reason: wrapReason(reason),\n });\n }\n );\n return;\n }\n if (data.streamId) {\n this.#createStreamSink(data);\n return;\n }\n action(data.data);\n };\n comObj.addEventListener(\"message\", this._onComObjOnMessage);\n }\n\n on(actionName, handler) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n typeof handler === \"function\",\n 'MessageHandler.on: Expected \"handler\" to be a function.'\n );\n }\n const ah = this.actionHandler;\n if (ah[actionName]) {\n throw new Error(`There is already an actionName called \"${actionName}\"`);\n }\n ah[actionName] = handler;\n }\n\n /**\n * Sends a message to the comObj to invoke the action with the supplied data.\n * @param {string} actionName - Action to call.\n * @param {JSON} data - JSON data to send.\n * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n */\n send(actionName, data, transfers) {\n this.comObj.postMessage(\n {\n sourceName: this.sourceName,\n targetName: this.targetName,\n action: actionName,\n data,\n },\n transfers\n );\n }\n\n /**\n * Sends a message to the comObj to invoke the action with the supplied data.\n * Expects that the other side will callback with the response.\n * @param {string} actionName - Action to call.\n * @param {JSON} data - JSON data to send.\n * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n * @returns {Promise} Promise to be resolved with response data.\n */\n sendWithPromise(actionName, data, transfers) {\n const callbackId = this.callbackId++;\n const capability = Promise.withResolvers();\n this.callbackCapabilities[callbackId] = capability;\n try {\n this.comObj.postMessage(\n {\n sourceName: this.sourceName,\n targetName: this.targetName,\n action: actionName,\n callbackId,\n data,\n },\n transfers\n );\n } catch (ex) {\n capability.reject(ex);\n }\n return capability.promise;\n }\n\n /**\n * Sends a message to the comObj to invoke the action with the supplied data.\n * Expect that the other side will callback to signal 'start_complete'.\n * @param {string} actionName - Action to call.\n * @param {JSON} data - JSON data to send.\n * @param {Object} queueingStrategy - Strategy to signal backpressure based on\n * internal queue.\n * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n * @returns {ReadableStream} ReadableStream to read data in chunks.\n */\n sendWithStream(actionName, data, queueingStrategy, transfers) {\n const streamId = this.streamId++,\n sourceName = this.sourceName,\n targetName = this.targetName,\n comObj = this.comObj;\n\n return new ReadableStream(\n {\n start: controller => {\n const startCapability = Promise.withResolvers();\n this.streamControllers[streamId] = {\n controller,\n startCall: startCapability,\n pullCall: null,\n cancelCall: null,\n isClosed: false,\n };\n comObj.postMessage(\n {\n sourceName,\n targetName,\n action: actionName,\n streamId,\n data,\n desiredSize: controller.desiredSize,\n },\n transfers\n );\n // Return Promise for Async process, to signal success/failure.\n return startCapability.promise;\n },\n\n pull: controller => {\n const pullCapability = Promise.withResolvers();\n this.streamControllers[streamId].pullCall = pullCapability;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL,\n streamId,\n desiredSize: controller.desiredSize,\n });\n // Returning Promise will not call \"pull\"\n // again until current pull is resolved.\n return pullCapability.promise;\n },\n\n cancel: reason => {\n assert(reason instanceof Error, \"cancel must have a valid reason\");\n const cancelCapability = Promise.withResolvers();\n this.streamControllers[streamId].cancelCall = cancelCapability;\n this.streamControllers[streamId].isClosed = true;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CANCEL,\n streamId,\n reason: wrapReason(reason),\n });\n // Return Promise to signal success or failure.\n return cancelCapability.promise;\n },\n },\n queueingStrategy\n );\n }\n\n #createStreamSink(data) {\n const streamId = data.streamId,\n sourceName = this.sourceName,\n targetName = data.sourceName,\n comObj = this.comObj;\n const self = this,\n action = this.actionHandler[data.action];\n\n const streamSink = {\n enqueue(chunk, size = 1, transfers) {\n if (this.isCancelled) {\n return;\n }\n const lastDesiredSize = this.desiredSize;\n this.desiredSize -= size;\n // Enqueue decreases the desiredSize property of sink,\n // so when it changes from positive to negative,\n // set ready as unresolved promise.\n if (lastDesiredSize > 0 && this.desiredSize <= 0) {\n this.sinkCapability = Promise.withResolvers();\n this.ready = this.sinkCapability.promise;\n }\n comObj.postMessage(\n {\n sourceName,\n targetName,\n stream: StreamKind.ENQUEUE,\n streamId,\n chunk,\n },\n transfers\n );\n },\n\n close() {\n if (this.isCancelled) {\n return;\n }\n this.isCancelled = true;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CLOSE,\n streamId,\n });\n delete self.streamSinks[streamId];\n },\n\n error(reason) {\n assert(reason instanceof Error, \"error must have a valid reason\");\n if (this.isCancelled) {\n return;\n }\n this.isCancelled = true;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.ERROR,\n streamId,\n reason: wrapReason(reason),\n });\n },\n\n sinkCapability: Promise.withResolvers(),\n onPull: null,\n onCancel: null,\n isCancelled: false,\n desiredSize: data.desiredSize,\n ready: null,\n };\n\n streamSink.sinkCapability.resolve();\n streamSink.ready = streamSink.sinkCapability.promise;\n this.streamSinks[streamId] = streamSink;\n\n new Promise(function (resolve) {\n resolve(action(data.data, streamSink));\n }).then(\n function () {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.START_COMPLETE,\n streamId,\n success: true,\n });\n },\n function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.START_COMPLETE,\n streamId,\n reason: wrapReason(reason),\n });\n }\n );\n }\n\n #processStreamMessage(data) {\n const streamId = data.streamId,\n sourceName = this.sourceName,\n targetName = data.sourceName,\n comObj = this.comObj;\n const streamController = this.streamControllers[streamId],\n streamSink = this.streamSinks[streamId];\n\n switch (data.stream) {\n case StreamKind.START_COMPLETE:\n if (data.success) {\n streamController.startCall.resolve();\n } else {\n streamController.startCall.reject(wrapReason(data.reason));\n }\n break;\n case StreamKind.PULL_COMPLETE:\n if (data.success) {\n streamController.pullCall.resolve();\n } else {\n streamController.pullCall.reject(wrapReason(data.reason));\n }\n break;\n case StreamKind.PULL:\n // Ignore any pull after close is called.\n if (!streamSink) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL_COMPLETE,\n streamId,\n success: true,\n });\n break;\n }\n // Pull increases the desiredSize property of sink, so when it changes\n // from negative to positive, set ready property as resolved promise.\n if (streamSink.desiredSize <= 0 && data.desiredSize > 0) {\n streamSink.sinkCapability.resolve();\n }\n // Reset desiredSize property of sink on every pull.\n streamSink.desiredSize = data.desiredSize;\n\n new Promise(function (resolve) {\n resolve(streamSink.onPull?.());\n }).then(\n function () {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL_COMPLETE,\n streamId,\n success: true,\n });\n },\n function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL_COMPLETE,\n streamId,\n reason: wrapReason(reason),\n });\n }\n );\n break;\n case StreamKind.ENQUEUE:\n assert(streamController, \"enqueue should have stream controller\");\n if (streamController.isClosed) {\n break;\n }\n streamController.controller.enqueue(data.chunk);\n break;\n case StreamKind.CLOSE:\n assert(streamController, \"close should have stream controller\");\n if (streamController.isClosed) {\n break;\n }\n streamController.isClosed = true;\n streamController.controller.close();\n this.#deleteStreamController(streamController, streamId);\n break;\n case StreamKind.ERROR:\n assert(streamController, \"error should have stream controller\");\n streamController.controller.error(wrapReason(data.reason));\n this.#deleteStreamController(streamController, streamId);\n break;\n case StreamKind.CANCEL_COMPLETE:\n if (data.success) {\n streamController.cancelCall.resolve();\n } else {\n streamController.cancelCall.reject(wrapReason(data.reason));\n }\n this.#deleteStreamController(streamController, streamId);\n break;\n case StreamKind.CANCEL:\n if (!streamSink) {\n break;\n }\n\n new Promise(function (resolve) {\n resolve(streamSink.onCancel?.(wrapReason(data.reason)));\n }).then(\n function () {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CANCEL_COMPLETE,\n streamId,\n success: true,\n });\n },\n function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CANCEL_COMPLETE,\n streamId,\n reason: wrapReason(reason),\n });\n }\n );\n streamSink.sinkCapability.reject(wrapReason(data.reason));\n streamSink.isCancelled = true;\n delete this.streamSinks[streamId];\n break;\n default:\n throw new Error(\"Unexpected stream case\");\n }\n }\n\n async #deleteStreamController(streamController, streamId) {\n // Delete the `streamController` only when the start, pull, and cancel\n // capabilities have settled, to prevent `TypeError`s.\n await Promise.allSettled([\n streamController.startCall?.promise,\n streamController.pullCall?.promise,\n streamController.cancelCall?.promise,\n ]);\n delete this.streamControllers[streamId];\n }\n\n destroy() {\n this.comObj.removeEventListener(\"message\", this._onComObjOnMessage);\n }\n}\n\nexport { MessageHandler };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { objectFromMap } from \"../shared/util.js\";\n\nclass Metadata {\n #metadataMap;\n\n #data;\n\n constructor({ parsedData, rawData }) {\n this.#metadataMap = parsedData;\n this.#data = rawData;\n }\n\n getRaw() {\n return this.#data;\n }\n\n get(name) {\n return this.#metadataMap.get(name) ?? null;\n }\n\n getAll() {\n return objectFromMap(this.#metadataMap);\n }\n\n has(name) {\n return this.#metadataMap.has(name);\n }\n}\n\nexport { Metadata };\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n info,\n objectFromMap,\n RenderingIntentFlag,\n unreachable,\n warn,\n} from \"../shared/util.js\";\nimport { MurmurHash3_64 } from \"../shared/murmurhash3.js\";\n\nconst INTERNAL = Symbol(\"INTERNAL\");\n\nclass OptionalContentGroup {\n #isDisplay = false;\n\n #isPrint = false;\n\n #userSet = false;\n\n #visible = true;\n\n constructor(renderingIntent, { name, intent, usage }) {\n this.#isDisplay = !!(renderingIntent & RenderingIntentFlag.DISPLAY);\n this.#isPrint = !!(renderingIntent & RenderingIntentFlag.PRINT);\n\n this.name = name;\n this.intent = intent;\n this.usage = usage;\n }\n\n /**\n * @type {boolean}\n */\n get visible() {\n if (this.#userSet) {\n return this.#visible;\n }\n if (!this.#visible) {\n return false;\n }\n const { print, view } = this.usage;\n\n if (this.#isDisplay) {\n return view?.viewState !== \"OFF\";\n } else if (this.#isPrint) {\n return print?.printState !== \"OFF\";\n }\n return true;\n }\n\n /**\n * @ignore\n */\n _setVisible(internal, visible, userSet = false) {\n if (internal !== INTERNAL) {\n unreachable(\"Internal method `_setVisible` called.\");\n }\n this.#userSet = userSet;\n this.#visible = visible;\n }\n}\n\nclass OptionalContentConfig {\n #cachedGetHash = null;\n\n #groups = new Map();\n\n #initialHash = null;\n\n #order = null;\n\n constructor(data, renderingIntent = RenderingIntentFlag.DISPLAY) {\n this.renderingIntent = renderingIntent;\n\n this.name = null;\n this.creator = null;\n\n if (data === null) {\n return;\n }\n this.name = data.name;\n this.creator = data.creator;\n this.#order = data.order;\n for (const group of data.groups) {\n this.#groups.set(\n group.id,\n new OptionalContentGroup(renderingIntent, group)\n );\n }\n\n if (data.baseState === \"OFF\") {\n for (const group of this.#groups.values()) {\n group._setVisible(INTERNAL, false);\n }\n }\n\n for (const on of data.on) {\n this.#groups.get(on)._setVisible(INTERNAL, true);\n }\n\n for (const off of data.off) {\n this.#groups.get(off)._setVisible(INTERNAL, false);\n }\n\n // The following code must always run *last* in the constructor.\n this.#initialHash = this.getHash();\n }\n\n #evaluateVisibilityExpression(array) {\n const length = array.length;\n if (length < 2) {\n return true;\n }\n const operator = array[0];\n for (let i = 1; i < length; i++) {\n const element = array[i];\n let state;\n if (Array.isArray(element)) {\n state = this.#evaluateVisibilityExpression(element);\n } else if (this.#groups.has(element)) {\n state = this.#groups.get(element).visible;\n } else {\n warn(`Optional content group not found: ${element}`);\n return true;\n }\n switch (operator) {\n case \"And\":\n if (!state) {\n return false;\n }\n break;\n case \"Or\":\n if (state) {\n return true;\n }\n break;\n case \"Not\":\n return !state;\n default:\n return true;\n }\n }\n return operator === \"And\";\n }\n\n isVisible(group) {\n if (this.#groups.size === 0) {\n return true;\n }\n if (!group) {\n info(\"Optional content group not defined.\");\n return true;\n }\n if (group.type === \"OCG\") {\n if (!this.#groups.has(group.id)) {\n warn(`Optional content group not found: ${group.id}`);\n return true;\n }\n return this.#groups.get(group.id).visible;\n } else if (group.type === \"OCMD\") {\n // Per the spec, the expression should be preferred if available.\n if (group.expression) {\n return this.#evaluateVisibilityExpression(group.expression);\n }\n if (!group.policy || group.policy === \"AnyOn\") {\n // Default\n for (const id of group.ids) {\n if (!this.#groups.has(id)) {\n warn(`Optional content group not found: ${id}`);\n return true;\n }\n if (this.#groups.get(id).visible) {\n return true;\n }\n }\n return false;\n } else if (group.policy === \"AllOn\") {\n for (const id of group.ids) {\n if (!this.#groups.has(id)) {\n warn(`Optional content group not found: ${id}`);\n return true;\n }\n if (!this.#groups.get(id).visible) {\n return false;\n }\n }\n return true;\n } else if (group.policy === \"AnyOff\") {\n for (const id of group.ids) {\n if (!this.#groups.has(id)) {\n warn(`Optional content group not found: ${id}`);\n return true;\n }\n if (!this.#groups.get(id).visible) {\n return true;\n }\n }\n return false;\n } else if (group.policy === \"AllOff\") {\n for (const id of group.ids) {\n if (!this.#groups.has(id)) {\n warn(`Optional content group not found: ${id}`);\n return true;\n }\n if (this.#groups.get(id).visible) {\n return false;\n }\n }\n return true;\n }\n warn(`Unknown optional content policy ${group.policy}.`);\n return true;\n }\n warn(`Unknown group type ${group.type}.`);\n return true;\n }\n\n setVisibility(id, visible = true) {\n const group = this.#groups.get(id);\n if (!group) {\n warn(`Optional content group not found: ${id}`);\n return;\n }\n group._setVisible(INTERNAL, !!visible, /* userSet = */ true);\n\n this.#cachedGetHash = null;\n }\n\n setOCGState({ state, preserveRB }) {\n let operator;\n\n for (const elem of state) {\n switch (elem) {\n case \"ON\":\n case \"OFF\":\n case \"Toggle\":\n operator = elem;\n continue;\n }\n\n const group = this.#groups.get(elem);\n if (!group) {\n continue;\n }\n switch (operator) {\n case \"ON\":\n group._setVisible(INTERNAL, true);\n break;\n case \"OFF\":\n group._setVisible(INTERNAL, false);\n break;\n case \"Toggle\":\n group._setVisible(INTERNAL, !group.visible);\n break;\n }\n }\n\n this.#cachedGetHash = null;\n }\n\n get hasInitialVisibility() {\n return this.#initialHash === null || this.getHash() === this.#initialHash;\n }\n\n getOrder() {\n if (!this.#groups.size) {\n return null;\n }\n if (this.#order) {\n return this.#order.slice();\n }\n return [...this.#groups.keys()];\n }\n\n getGroups() {\n return this.#groups.size > 0 ? objectFromMap(this.#groups) : null;\n }\n\n getGroup(id) {\n return this.#groups.get(id) || null;\n }\n\n getHash() {\n if (this.#cachedGetHash !== null) {\n return this.#cachedGetHash;\n }\n const hash = new MurmurHash3_64();\n\n for (const [id, group] of this.#groups) {\n hash.update(`${id}:${group.visible}`);\n }\n return (this.#cachedGetHash = hash.hexdigest());\n }\n}\n\nexport { OptionalContentConfig };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"../interfaces\").IPDFStream} IPDFStream */\n/** @typedef {import(\"../interfaces\").IPDFStreamReader} IPDFStreamReader */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../interfaces\").IPDFStreamRangeReader} IPDFStreamRangeReader */\n\nimport { assert } from \"../shared/util.js\";\nimport { isPdfFile } from \"./display_utils.js\";\n\n/** @implements {IPDFStream} */\nclass PDFDataTransportStream {\n constructor(\n pdfDataRangeTransport,\n { disableRange = false, disableStream = false }\n ) {\n assert(\n pdfDataRangeTransport,\n 'PDFDataTransportStream - missing required \"pdfDataRangeTransport\" argument.'\n );\n const { length, initialData, progressiveDone, contentDispositionFilename } =\n pdfDataRangeTransport;\n\n this._queuedChunks = [];\n this._progressiveDone = progressiveDone;\n this._contentDispositionFilename = contentDispositionFilename;\n\n if (initialData?.length > 0) {\n // Prevent any possible issues by only transferring a Uint8Array that\n // completely \"utilizes\" its underlying ArrayBuffer.\n const buffer =\n initialData instanceof Uint8Array &&\n initialData.byteLength === initialData.buffer.byteLength\n ? initialData.buffer\n : new Uint8Array(initialData).buffer;\n this._queuedChunks.push(buffer);\n }\n\n this._pdfDataRangeTransport = pdfDataRangeTransport;\n this._isStreamingSupported = !disableStream;\n this._isRangeSupported = !disableRange;\n this._contentLength = length;\n\n this._fullRequestReader = null;\n this._rangeReaders = [];\n\n pdfDataRangeTransport.addRangeListener((begin, chunk) => {\n this._onReceiveData({ begin, chunk });\n });\n\n pdfDataRangeTransport.addProgressListener((loaded, total) => {\n this._onProgress({ loaded, total });\n });\n\n pdfDataRangeTransport.addProgressiveReadListener(chunk => {\n this._onReceiveData({ chunk });\n });\n\n pdfDataRangeTransport.addProgressiveDoneListener(() => {\n this._onProgressiveDone();\n });\n\n pdfDataRangeTransport.transportReady();\n }\n\n _onReceiveData({ begin, chunk }) {\n // Prevent any possible issues by only transferring a Uint8Array that\n // completely \"utilizes\" its underlying ArrayBuffer.\n const buffer =\n chunk instanceof Uint8Array &&\n chunk.byteLength === chunk.buffer.byteLength\n ? chunk.buffer\n : new Uint8Array(chunk).buffer;\n\n if (begin === undefined) {\n if (this._fullRequestReader) {\n this._fullRequestReader._enqueue(buffer);\n } else {\n this._queuedChunks.push(buffer);\n }\n } else {\n const found = this._rangeReaders.some(function (rangeReader) {\n if (rangeReader._begin !== begin) {\n return false;\n }\n rangeReader._enqueue(buffer);\n return true;\n });\n assert(\n found,\n \"_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.\"\n );\n }\n }\n\n get _progressiveDataLength() {\n return this._fullRequestReader?._loaded ?? 0;\n }\n\n _onProgress(evt) {\n if (evt.total === undefined) {\n // Reporting to first range reader, if it exists.\n this._rangeReaders[0]?.onProgress?.({ loaded: evt.loaded });\n } else {\n this._fullRequestReader?.onProgress?.({\n loaded: evt.loaded,\n total: evt.total,\n });\n }\n }\n\n _onProgressiveDone() {\n this._fullRequestReader?.progressiveDone();\n this._progressiveDone = true;\n }\n\n _removeRangeReader(reader) {\n const i = this._rangeReaders.indexOf(reader);\n if (i >= 0) {\n this._rangeReaders.splice(i, 1);\n }\n }\n\n getFullReader() {\n assert(\n !this._fullRequestReader,\n \"PDFDataTransportStream.getFullReader can only be called once.\"\n );\n const queuedChunks = this._queuedChunks;\n this._queuedChunks = null;\n return new PDFDataTransportStreamReader(\n this,\n queuedChunks,\n this._progressiveDone,\n this._contentDispositionFilename\n );\n }\n\n getRangeReader(begin, end) {\n if (end <= this._progressiveDataLength) {\n return null;\n }\n const reader = new PDFDataTransportStreamRangeReader(this, begin, end);\n this._pdfDataRangeTransport.requestDataRange(begin, end);\n this._rangeReaders.push(reader);\n return reader;\n }\n\n cancelAllRequests(reason) {\n this._fullRequestReader?.cancel(reason);\n\n for (const reader of this._rangeReaders.slice(0)) {\n reader.cancel(reason);\n }\n this._pdfDataRangeTransport.abort();\n }\n}\n\n/** @implements {IPDFStreamReader} */\nclass PDFDataTransportStreamReader {\n constructor(\n stream,\n queuedChunks,\n progressiveDone = false,\n contentDispositionFilename = null\n ) {\n this._stream = stream;\n this._done = progressiveDone || false;\n this._filename = isPdfFile(contentDispositionFilename)\n ? contentDispositionFilename\n : null;\n this._queuedChunks = queuedChunks || [];\n this._loaded = 0;\n for (const chunk of this._queuedChunks) {\n this._loaded += chunk.byteLength;\n }\n this._requests = [];\n this._headersReady = Promise.resolve();\n stream._fullRequestReader = this;\n\n this.onProgress = null;\n }\n\n _enqueue(chunk) {\n if (this._done) {\n return; // Ignore new data.\n }\n if (this._requests.length > 0) {\n const requestCapability = this._requests.shift();\n requestCapability.resolve({ value: chunk, done: false });\n } else {\n this._queuedChunks.push(chunk);\n }\n this._loaded += chunk.byteLength;\n }\n\n get headersReady() {\n return this._headersReady;\n }\n\n get filename() {\n return this._filename;\n }\n\n get isRangeSupported() {\n return this._stream._isRangeSupported;\n }\n\n get isStreamingSupported() {\n return this._stream._isStreamingSupported;\n }\n\n get contentLength() {\n return this._stream._contentLength;\n }\n\n async read() {\n if (this._queuedChunks.length > 0) {\n const chunk = this._queuedChunks.shift();\n return { value: chunk, done: false };\n }\n if (this._done) {\n return { value: undefined, done: true };\n }\n const requestCapability = Promise.withResolvers();\n this._requests.push(requestCapability);\n return requestCapability.promise;\n }\n\n cancel(reason) {\n this._done = true;\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n }\n\n progressiveDone() {\n if (this._done) {\n return;\n }\n this._done = true;\n }\n}\n\n/** @implements {IPDFStreamRangeReader} */\nclass PDFDataTransportStreamRangeReader {\n constructor(stream, begin, end) {\n this._stream = stream;\n this._begin = begin;\n this._end = end;\n this._queuedChunk = null;\n this._requests = [];\n this._done = false;\n\n this.onProgress = null;\n }\n\n _enqueue(chunk) {\n if (this._done) {\n return; // ignore new data\n }\n if (this._requests.length === 0) {\n this._queuedChunk = chunk;\n } else {\n const requestsCapability = this._requests.shift();\n requestsCapability.resolve({ value: chunk, done: false });\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n }\n this._done = true;\n this._stream._removeRangeReader(this);\n }\n\n get isStreamingSupported() {\n return false;\n }\n\n async read() {\n if (this._queuedChunk) {\n const chunk = this._queuedChunk;\n this._queuedChunk = null;\n return { value: chunk, done: false };\n }\n if (this._done) {\n return { value: undefined, done: true };\n }\n const requestCapability = Promise.withResolvers();\n this._requests.push(requestCapability);\n return requestCapability.promise;\n }\n\n cancel(reason) {\n this._done = true;\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n this._stream._removeRangeReader(this);\n }\n}\n\nexport { PDFDataTransportStream };\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { stringToBytes } from \"../shared/util.js\";\n\n// This getFilenameFromContentDispositionHeader function is adapted from\n// https://github.com/Rob--W/open-in-browser/blob/7e2e35a38b8b4e981b11da7b2f01df0149049e92/extension/content-disposition.js\n// with the following changes:\n// - Modified to conform to PDF.js's coding style.\n// - Move return to the end of the function to prevent Babel from dropping the\n// function declarations.\n\n/**\n * Extract file name from the Content-Disposition HTTP response header.\n *\n * @param {string} contentDisposition\n * @returns {string} Filename, if found in the Content-Disposition header.\n */\nfunction getFilenameFromContentDispositionHeader(contentDisposition) {\n let needsEncodingFixup = true;\n\n // filename*=ext-value (\"ext-value\" from RFC 5987, referenced by RFC 6266).\n let tmp = toParamRegExp(\"filename\\\\*\", \"i\").exec(contentDisposition);\n if (tmp) {\n tmp = tmp[1];\n let filename = rfc2616unquote(tmp);\n filename = unescape(filename);\n filename = rfc5987decode(filename);\n filename = rfc2047decode(filename);\n return fixupEncoding(filename);\n }\n\n // Continuations (RFC 2231 section 3, referenced by RFC 5987 section 3.1).\n // filename*n*=part\n // filename*n=part\n tmp = rfc2231getparam(contentDisposition);\n if (tmp) {\n // RFC 2047, section\n const filename = rfc2047decode(tmp);\n return fixupEncoding(filename);\n }\n\n // filename=value (RFC 5987, section 4.1).\n tmp = toParamRegExp(\"filename\", \"i\").exec(contentDisposition);\n if (tmp) {\n tmp = tmp[1];\n let filename = rfc2616unquote(tmp);\n filename = rfc2047decode(filename);\n return fixupEncoding(filename);\n }\n\n // After this line there are only function declarations. We cannot put\n // \"return\" here for readability because babel would then drop the function\n // declarations...\n function toParamRegExp(attributePattern, flags) {\n return new RegExp(\n \"(?:^|;)\\\\s*\" +\n attributePattern +\n \"\\\\s*=\\\\s*\" +\n // Captures: value = token | quoted-string\n // (RFC 2616, section 3.6 and referenced by RFC 6266 4.1)\n \"(\" +\n '[^\";\\\\s][^;\\\\s]*' +\n \"|\" +\n '\"(?:[^\"\\\\\\\\]|\\\\\\\\\"?)+\"?' +\n \")\",\n flags\n );\n }\n function textdecode(encoding, value) {\n if (encoding) {\n if (!/^[\\x00-\\xFF]+$/.test(value)) {\n return value;\n }\n try {\n const decoder = new TextDecoder(encoding, { fatal: true });\n const buffer = stringToBytes(value);\n value = decoder.decode(buffer);\n needsEncodingFixup = false;\n } catch {\n // TextDecoder constructor threw - unrecognized encoding.\n }\n }\n return value;\n }\n function fixupEncoding(value) {\n if (needsEncodingFixup && /[\\x80-\\xff]/.test(value)) {\n // Maybe multi-byte UTF-8.\n value = textdecode(\"utf-8\", value);\n if (needsEncodingFixup) {\n // Try iso-8859-1 encoding.\n value = textdecode(\"iso-8859-1\", value);\n }\n }\n return value;\n }\n function rfc2231getparam(contentDispositionStr) {\n const matches = [];\n let match;\n // Iterate over all filename*n= and filename*n*= with n being an integer\n // of at least zero. Any non-zero number must not start with '0'.\n const iter = toParamRegExp(\"filename\\\\*((?!0\\\\d)\\\\d+)(\\\\*?)\", \"ig\");\n while ((match = iter.exec(contentDispositionStr)) !== null) {\n let [, n, quot, part] = match; // eslint-disable-line prefer-const\n n = parseInt(n, 10);\n if (n in matches) {\n // Ignore anything after the invalid second filename*0.\n if (n === 0) {\n break;\n }\n continue;\n }\n matches[n] = [quot, part];\n }\n const parts = [];\n for (let n = 0; n < matches.length; ++n) {\n if (!(n in matches)) {\n // Numbers must be consecutive. Truncate when there is a hole.\n break;\n }\n let [quot, part] = matches[n]; // eslint-disable-line prefer-const\n part = rfc2616unquote(part);\n if (quot) {\n part = unescape(part);\n if (n === 0) {\n part = rfc5987decode(part);\n }\n }\n parts.push(part);\n }\n return parts.join(\"\");\n }\n function rfc2616unquote(value) {\n if (value.startsWith('\"')) {\n const parts = value.slice(1).split('\\\\\"');\n // Find the first unescaped \" and terminate there.\n for (let i = 0; i < parts.length; ++i) {\n const quotindex = parts[i].indexOf('\"');\n if (quotindex !== -1) {\n parts[i] = parts[i].slice(0, quotindex);\n parts.length = i + 1; // Truncates and stop the iteration.\n }\n parts[i] = parts[i].replaceAll(/\\\\(.)/g, \"$1\");\n }\n value = parts.join('\"');\n }\n return value;\n }\n function rfc5987decode(extvalue) {\n // Decodes \"ext-value\" from RFC 5987.\n const encodingend = extvalue.indexOf(\"'\");\n if (encodingend === -1) {\n // Some servers send \"filename*=\" without encoding 'language' prefix,\n // e.g. in https://github.com/Rob--W/open-in-browser/issues/26\n // Let's accept the value like Firefox (57) (Chrome 62 rejects it).\n return extvalue;\n }\n const encoding = extvalue.slice(0, encodingend);\n const langvalue = extvalue.slice(encodingend + 1);\n // Ignore language (RFC 5987 section 3.2.1, and RFC 6266 section 4.1 ).\n const value = langvalue.replace(/^[^']*'/, \"\");\n return textdecode(encoding, value);\n }\n function rfc2047decode(value) {\n // RFC 2047-decode the result. Firefox tried to drop support for it, but\n // backed out because some servers use it - https://bugzil.la/875615\n // Firefox's condition for decoding is here: https://searchfox.org/mozilla-central/rev/4a590a5a15e35d88a3b23dd6ac3c471cf85b04a8/netwerk/mime/nsMIMEHeaderParamImpl.cpp#742-748\n\n // We are more strict and only recognize RFC 2047-encoding if the value\n // starts with \"=?\", since then it is likely that the full value is\n // RFC 2047-encoded.\n\n // Firefox also decodes words even where RFC 2047 section 5 states:\n // \"An 'encoded-word' MUST NOT appear within a 'quoted-string'.\"\n if (!value.startsWith(\"=?\") || /[\\x00-\\x19\\x80-\\xff]/.test(value)) {\n return value;\n }\n // RFC 2047, section 2.4\n // encoded-word = \"=?\" charset \"?\" encoding \"?\" encoded-text \"?=\"\n // charset = token (but let's restrict to characters that denote a\n // possibly valid encoding).\n // encoding = q or b\n // encoded-text = any printable ASCII character other than ? or space.\n // ... but Firefox permits ? and space.\n return value.replaceAll(\n /=\\?([\\w-]*)\\?([QqBb])\\?((?:[^?]|\\?(?!=))*)\\?=/g,\n function (matches, charset, encoding, text) {\n if (encoding === \"q\" || encoding === \"Q\") {\n // RFC 2047 section 4.2.\n text = text.replaceAll(\"_\", \" \");\n text = text.replaceAll(/=([0-9a-fA-F]{2})/g, function (match, hex) {\n return String.fromCharCode(parseInt(hex, 16));\n });\n return textdecode(charset, text);\n } // else encoding is b or B - base64 (RFC 2047 section 4.1)\n try {\n text = atob(text);\n } catch {}\n return textdecode(charset, text);\n }\n );\n }\n\n return \"\";\n}\n\nexport { getFilenameFromContentDispositionHeader };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n assert,\n MissingPDFException,\n UnexpectedResponseException,\n} from \"../shared/util.js\";\nimport { getFilenameFromContentDispositionHeader } from \"./content_disposition.js\";\nimport { isPdfFile } from \"./display_utils.js\";\n\nfunction validateRangeRequestCapabilities({\n getResponseHeader,\n isHttp,\n rangeChunkSize,\n disableRange,\n}) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n Number.isInteger(rangeChunkSize) && rangeChunkSize > 0,\n \"rangeChunkSize must be an integer larger than zero.\"\n );\n }\n const returnValues = {\n allowRangeRequests: false,\n suggestedLength: undefined,\n };\n\n const length = parseInt(getResponseHeader(\"Content-Length\"), 10);\n if (!Number.isInteger(length)) {\n return returnValues;\n }\n\n returnValues.suggestedLength = length;\n\n if (length <= 2 * rangeChunkSize) {\n // The file size is smaller than the size of two chunks, so it does not\n // make any sense to abort the request and retry with a range request.\n return returnValues;\n }\n\n if (disableRange || !isHttp) {\n return returnValues;\n }\n if (getResponseHeader(\"Accept-Ranges\") !== \"bytes\") {\n return returnValues;\n }\n\n const contentEncoding = getResponseHeader(\"Content-Encoding\") || \"identity\";\n if (contentEncoding !== \"identity\") {\n return returnValues;\n }\n\n returnValues.allowRangeRequests = true;\n return returnValues;\n}\n\nfunction extractFilenameFromHeader(getResponseHeader) {\n const contentDisposition = getResponseHeader(\"Content-Disposition\");\n if (contentDisposition) {\n let filename = getFilenameFromContentDispositionHeader(contentDisposition);\n if (filename.includes(\"%\")) {\n try {\n filename = decodeURIComponent(filename);\n } catch {}\n }\n if (isPdfFile(filename)) {\n return filename;\n }\n }\n return null;\n}\n\nfunction createResponseStatusError(status, url) {\n if (status === 404 || (status === 0 && url.startsWith(\"file:\"))) {\n return new MissingPDFException('Missing PDF \"' + url + '\".');\n }\n return new UnexpectedResponseException(\n `Unexpected server response (${status}) while retrieving PDF \"${url}\".`,\n status\n );\n}\n\nfunction validateResponseStatus(status) {\n return status === 200 || status === 206;\n}\n\nexport {\n createResponseStatusError,\n extractFilenameFromHeader,\n validateRangeRequestCapabilities,\n validateResponseStatus,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AbortException, assert, warn } from \"../shared/util.js\";\nimport {\n createResponseStatusError,\n extractFilenameFromHeader,\n validateRangeRequestCapabilities,\n validateResponseStatus,\n} from \"./network_utils.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\n 'Module \"./fetch_stream.js\" shall not be used with MOZCENTRAL builds.'\n );\n}\n\nfunction createFetchOptions(headers, withCredentials, abortController) {\n return {\n method: \"GET\",\n headers,\n signal: abortController.signal,\n mode: \"cors\",\n credentials: withCredentials ? \"include\" : \"same-origin\",\n redirect: \"follow\",\n };\n}\n\nfunction createHeaders(httpHeaders) {\n const headers = new Headers();\n for (const property in httpHeaders) {\n const value = httpHeaders[property];\n if (value === undefined) {\n continue;\n }\n headers.append(property, value);\n }\n return headers;\n}\n\nfunction getArrayBuffer(val) {\n if (val instanceof Uint8Array) {\n return val.buffer;\n }\n if (val instanceof ArrayBuffer) {\n return val;\n }\n warn(`getArrayBuffer - unexpected data format: ${val}`);\n return new Uint8Array(val).buffer;\n}\n\n/** @implements {IPDFStream} */\nclass PDFFetchStream {\n constructor(source) {\n this.source = source;\n this.isHttp = /^https?:/i.test(source.url);\n this.httpHeaders = (this.isHttp && source.httpHeaders) || {};\n\n this._fullRequestReader = null;\n this._rangeRequestReaders = [];\n }\n\n get _progressiveDataLength() {\n return this._fullRequestReader?._loaded ?? 0;\n }\n\n getFullReader() {\n assert(\n !this._fullRequestReader,\n \"PDFFetchStream.getFullReader can only be called once.\"\n );\n this._fullRequestReader = new PDFFetchStreamReader(this);\n return this._fullRequestReader;\n }\n\n getRangeReader(begin, end) {\n if (end <= this._progressiveDataLength) {\n return null;\n }\n const reader = new PDFFetchStreamRangeReader(this, begin, end);\n this._rangeRequestReaders.push(reader);\n return reader;\n }\n\n cancelAllRequests(reason) {\n this._fullRequestReader?.cancel(reason);\n\n for (const reader of this._rangeRequestReaders.slice(0)) {\n reader.cancel(reason);\n }\n }\n}\n\n/** @implements {IPDFStreamReader} */\nclass PDFFetchStreamReader {\n constructor(stream) {\n this._stream = stream;\n this._reader = null;\n this._loaded = 0;\n this._filename = null;\n const source = stream.source;\n this._withCredentials = source.withCredentials || false;\n this._contentLength = source.length;\n this._headersCapability = Promise.withResolvers();\n this._disableRange = source.disableRange || false;\n this._rangeChunkSize = source.rangeChunkSize;\n if (!this._rangeChunkSize && !this._disableRange) {\n this._disableRange = true;\n }\n\n this._abortController = new AbortController();\n this._isStreamingSupported = !source.disableStream;\n this._isRangeSupported = !source.disableRange;\n\n this._headers = createHeaders(this._stream.httpHeaders);\n\n const url = source.url;\n fetch(\n url,\n createFetchOptions(\n this._headers,\n this._withCredentials,\n this._abortController\n )\n )\n .then(response => {\n if (!validateResponseStatus(response.status)) {\n throw createResponseStatusError(response.status, url);\n }\n this._reader = response.body.getReader();\n this._headersCapability.resolve();\n\n const getResponseHeader = name => response.headers.get(name);\n\n const { allowRangeRequests, suggestedLength } =\n validateRangeRequestCapabilities({\n getResponseHeader,\n isHttp: this._stream.isHttp,\n rangeChunkSize: this._rangeChunkSize,\n disableRange: this._disableRange,\n });\n\n this._isRangeSupported = allowRangeRequests;\n // Setting right content length.\n this._contentLength = suggestedLength || this._contentLength;\n\n this._filename = extractFilenameFromHeader(getResponseHeader);\n\n // We need to stop reading when range is supported and streaming is\n // disabled.\n if (!this._isStreamingSupported && this._isRangeSupported) {\n this.cancel(new AbortException(\"Streaming is disabled.\"));\n }\n })\n .catch(this._headersCapability.reject);\n\n this.onProgress = null;\n }\n\n get headersReady() {\n return this._headersCapability.promise;\n }\n\n get filename() {\n return this._filename;\n }\n\n get contentLength() {\n return this._contentLength;\n }\n\n get isRangeSupported() {\n return this._isRangeSupported;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n async read() {\n await this._headersCapability.promise;\n const { value, done } = await this._reader.read();\n if (done) {\n return { value, done };\n }\n this._loaded += value.byteLength;\n this.onProgress?.({\n loaded: this._loaded,\n total: this._contentLength,\n });\n\n return { value: getArrayBuffer(value), done: false };\n }\n\n cancel(reason) {\n this._reader?.cancel(reason);\n this._abortController.abort();\n }\n}\n\n/** @implements {IPDFStreamRangeReader} */\nclass PDFFetchStreamRangeReader {\n constructor(stream, begin, end) {\n this._stream = stream;\n this._reader = null;\n this._loaded = 0;\n const source = stream.source;\n this._withCredentials = source.withCredentials || false;\n this._readCapability = Promise.withResolvers();\n this._isStreamingSupported = !source.disableStream;\n\n this._abortController = new AbortController();\n this._headers = createHeaders(this._stream.httpHeaders);\n this._headers.append(\"Range\", `bytes=${begin}-${end - 1}`);\n\n const url = source.url;\n fetch(\n url,\n createFetchOptions(\n this._headers,\n this._withCredentials,\n this._abortController\n )\n )\n .then(response => {\n if (!validateResponseStatus(response.status)) {\n throw createResponseStatusError(response.status, url);\n }\n this._readCapability.resolve();\n this._reader = response.body.getReader();\n })\n .catch(this._readCapability.reject);\n\n this.onProgress = null;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n async read() {\n await this._readCapability.promise;\n const { value, done } = await this._reader.read();\n if (done) {\n return { value, done };\n }\n this._loaded += value.byteLength;\n this.onProgress?.({ loaded: this._loaded });\n\n return { value: getArrayBuffer(value), done: false };\n }\n\n cancel(reason) {\n this._reader?.cancel(reason);\n this._abortController.abort();\n }\n}\n\nexport { PDFFetchStream };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, stringToBytes } from \"../shared/util.js\";\nimport {\n createResponseStatusError,\n extractFilenameFromHeader,\n validateRangeRequestCapabilities,\n} from \"./network_utils.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\n 'Module \"./network.js\" shall not be used with MOZCENTRAL builds.'\n );\n}\n\nconst OK_RESPONSE = 200;\nconst PARTIAL_CONTENT_RESPONSE = 206;\n\nfunction getArrayBuffer(xhr) {\n const data = xhr.response;\n if (typeof data !== \"string\") {\n return data;\n }\n return stringToBytes(data).buffer;\n}\n\nclass NetworkManager {\n constructor(url, args = {}) {\n this.url = url;\n this.isHttp = /^https?:/i.test(url);\n this.httpHeaders = (this.isHttp && args.httpHeaders) || Object.create(null);\n this.withCredentials = args.withCredentials || false;\n\n this.currXhrId = 0;\n this.pendingRequests = Object.create(null);\n }\n\n requestRange(begin, end, listeners) {\n const args = {\n begin,\n end,\n };\n for (const prop in listeners) {\n args[prop] = listeners[prop];\n }\n return this.request(args);\n }\n\n requestFull(listeners) {\n return this.request(listeners);\n }\n\n request(args) {\n const xhr = new XMLHttpRequest();\n const xhrId = this.currXhrId++;\n const pendingRequest = (this.pendingRequests[xhrId] = { xhr });\n\n xhr.open(\"GET\", this.url);\n xhr.withCredentials = this.withCredentials;\n for (const property in this.httpHeaders) {\n const value = this.httpHeaders[property];\n if (value === undefined) {\n continue;\n }\n xhr.setRequestHeader(property, value);\n }\n if (this.isHttp && \"begin\" in args && \"end\" in args) {\n xhr.setRequestHeader(\"Range\", `bytes=${args.begin}-${args.end - 1}`);\n pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE;\n } else {\n pendingRequest.expectedStatus = OK_RESPONSE;\n }\n xhr.responseType = \"arraybuffer\";\n\n if (args.onError) {\n xhr.onerror = function (evt) {\n args.onError(xhr.status);\n };\n }\n xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);\n xhr.onprogress = this.onProgress.bind(this, xhrId);\n\n pendingRequest.onHeadersReceived = args.onHeadersReceived;\n pendingRequest.onDone = args.onDone;\n pendingRequest.onError = args.onError;\n pendingRequest.onProgress = args.onProgress;\n\n xhr.send(null);\n\n return xhrId;\n }\n\n onProgress(xhrId, evt) {\n const pendingRequest = this.pendingRequests[xhrId];\n if (!pendingRequest) {\n return; // Maybe abortRequest was called...\n }\n pendingRequest.onProgress?.(evt);\n }\n\n onStateChange(xhrId, evt) {\n const pendingRequest = this.pendingRequests[xhrId];\n if (!pendingRequest) {\n return; // Maybe abortRequest was called...\n }\n\n const xhr = pendingRequest.xhr;\n if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {\n pendingRequest.onHeadersReceived();\n delete pendingRequest.onHeadersReceived;\n }\n\n if (xhr.readyState !== 4) {\n return;\n }\n\n if (!(xhrId in this.pendingRequests)) {\n // The XHR request might have been aborted in onHeadersReceived()\n // callback, in which case we should abort request.\n return;\n }\n\n delete this.pendingRequests[xhrId];\n\n // Success status == 0 can be on ftp, file and other protocols.\n if (xhr.status === 0 && this.isHttp) {\n pendingRequest.onError?.(xhr.status);\n return;\n }\n const xhrStatus = xhr.status || OK_RESPONSE;\n\n // From http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.2:\n // \"A server MAY ignore the Range header\". This means it's possible to\n // get a 200 rather than a 206 response from a range request.\n const ok_response_on_range_request =\n xhrStatus === OK_RESPONSE &&\n pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;\n\n if (\n !ok_response_on_range_request &&\n xhrStatus !== pendingRequest.expectedStatus\n ) {\n pendingRequest.onError?.(xhr.status);\n return;\n }\n\n const chunk = getArrayBuffer(xhr);\n if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {\n const rangeHeader = xhr.getResponseHeader(\"Content-Range\");\n const matches = /bytes (\\d+)-(\\d+)\\/(\\d+)/.exec(rangeHeader);\n pendingRequest.onDone({\n begin: parseInt(matches[1], 10),\n chunk,\n });\n } else if (chunk) {\n pendingRequest.onDone({\n begin: 0,\n chunk,\n });\n } else {\n pendingRequest.onError?.(xhr.status);\n }\n }\n\n getRequestXhr(xhrId) {\n return this.pendingRequests[xhrId].xhr;\n }\n\n isPendingRequest(xhrId) {\n return xhrId in this.pendingRequests;\n }\n\n abortRequest(xhrId) {\n const xhr = this.pendingRequests[xhrId].xhr;\n delete this.pendingRequests[xhrId];\n xhr.abort();\n }\n}\n\n/** @implements {IPDFStream} */\nclass PDFNetworkStream {\n constructor(source) {\n this._source = source;\n this._manager = new NetworkManager(source.url, {\n httpHeaders: source.httpHeaders,\n withCredentials: source.withCredentials,\n });\n this._rangeChunkSize = source.rangeChunkSize;\n this._fullRequestReader = null;\n this._rangeRequestReaders = [];\n }\n\n _onRangeRequestReaderClosed(reader) {\n const i = this._rangeRequestReaders.indexOf(reader);\n if (i >= 0) {\n this._rangeRequestReaders.splice(i, 1);\n }\n }\n\n getFullReader() {\n assert(\n !this._fullRequestReader,\n \"PDFNetworkStream.getFullReader can only be called once.\"\n );\n this._fullRequestReader = new PDFNetworkStreamFullRequestReader(\n this._manager,\n this._source\n );\n return this._fullRequestReader;\n }\n\n getRangeReader(begin, end) {\n const reader = new PDFNetworkStreamRangeRequestReader(\n this._manager,\n begin,\n end\n );\n reader.onClosed = this._onRangeRequestReaderClosed.bind(this);\n this._rangeRequestReaders.push(reader);\n return reader;\n }\n\n cancelAllRequests(reason) {\n this._fullRequestReader?.cancel(reason);\n\n for (const reader of this._rangeRequestReaders.slice(0)) {\n reader.cancel(reason);\n }\n }\n}\n\n/** @implements {IPDFStreamReader} */\nclass PDFNetworkStreamFullRequestReader {\n constructor(manager, source) {\n this._manager = manager;\n\n const args = {\n onHeadersReceived: this._onHeadersReceived.bind(this),\n onDone: this._onDone.bind(this),\n onError: this._onError.bind(this),\n onProgress: this._onProgress.bind(this),\n };\n this._url = source.url;\n this._fullRequestId = manager.requestFull(args);\n this._headersReceivedCapability = Promise.withResolvers();\n this._disableRange = source.disableRange || false;\n this._contentLength = source.length; // Optional\n this._rangeChunkSize = source.rangeChunkSize;\n if (!this._rangeChunkSize && !this._disableRange) {\n this._disableRange = true;\n }\n\n this._isStreamingSupported = false;\n this._isRangeSupported = false;\n\n this._cachedChunks = [];\n this._requests = [];\n this._done = false;\n this._storedError = undefined;\n this._filename = null;\n\n this.onProgress = null;\n }\n\n _onHeadersReceived() {\n const fullRequestXhrId = this._fullRequestId;\n const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);\n\n const getResponseHeader = name => fullRequestXhr.getResponseHeader(name);\n\n const { allowRangeRequests, suggestedLength } =\n validateRangeRequestCapabilities({\n getResponseHeader,\n isHttp: this._manager.isHttp,\n rangeChunkSize: this._rangeChunkSize,\n disableRange: this._disableRange,\n });\n\n if (allowRangeRequests) {\n this._isRangeSupported = true;\n }\n // Setting right content length.\n this._contentLength = suggestedLength || this._contentLength;\n\n this._filename = extractFilenameFromHeader(getResponseHeader);\n\n if (this._isRangeSupported) {\n // NOTE: by cancelling the full request, and then issuing range\n // requests, there will be an issue for sites where you can only\n // request the pdf once. However, if this is the case, then the\n // server should not be returning that it can support range requests.\n this._manager.abortRequest(fullRequestXhrId);\n }\n\n this._headersReceivedCapability.resolve();\n }\n\n _onDone(data) {\n if (data) {\n if (this._requests.length > 0) {\n const requestCapability = this._requests.shift();\n requestCapability.resolve({ value: data.chunk, done: false });\n } else {\n this._cachedChunks.push(data.chunk);\n }\n }\n this._done = true;\n if (this._cachedChunks.length > 0) {\n return;\n }\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n }\n\n _onError(status) {\n this._storedError = createResponseStatusError(status, this._url);\n this._headersReceivedCapability.reject(this._storedError);\n for (const requestCapability of this._requests) {\n requestCapability.reject(this._storedError);\n }\n this._requests.length = 0;\n this._cachedChunks.length = 0;\n }\n\n _onProgress(evt) {\n this.onProgress?.({\n loaded: evt.loaded,\n total: evt.lengthComputable ? evt.total : this._contentLength,\n });\n }\n\n get filename() {\n return this._filename;\n }\n\n get isRangeSupported() {\n return this._isRangeSupported;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n get contentLength() {\n return this._contentLength;\n }\n\n get headersReady() {\n return this._headersReceivedCapability.promise;\n }\n\n async read() {\n if (this._storedError) {\n throw this._storedError;\n }\n if (this._cachedChunks.length > 0) {\n const chunk = this._cachedChunks.shift();\n return { value: chunk, done: false };\n }\n if (this._done) {\n return { value: undefined, done: true };\n }\n const requestCapability = Promise.withResolvers();\n this._requests.push(requestCapability);\n return requestCapability.promise;\n }\n\n cancel(reason) {\n this._done = true;\n this._headersReceivedCapability.reject(reason);\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n if (this._manager.isPendingRequest(this._fullRequestId)) {\n this._manager.abortRequest(this._fullRequestId);\n }\n this._fullRequestReader = null;\n }\n}\n\n/** @implements {IPDFStreamRangeReader} */\nclass PDFNetworkStreamRangeRequestReader {\n constructor(manager, begin, end) {\n this._manager = manager;\n\n const args = {\n onDone: this._onDone.bind(this),\n onError: this._onError.bind(this),\n onProgress: this._onProgress.bind(this),\n };\n this._url = manager.url;\n this._requestId = manager.requestRange(begin, end, args);\n this._requests = [];\n this._queuedChunk = null;\n this._done = false;\n this._storedError = undefined;\n\n this.onProgress = null;\n this.onClosed = null;\n }\n\n _close() {\n this.onClosed?.(this);\n }\n\n _onDone(data) {\n const chunk = data.chunk;\n if (this._requests.length > 0) {\n const requestCapability = this._requests.shift();\n requestCapability.resolve({ value: chunk, done: false });\n } else {\n this._queuedChunk = chunk;\n }\n this._done = true;\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n this._close();\n }\n\n _onError(status) {\n this._storedError = createResponseStatusError(status, this._url);\n for (const requestCapability of this._requests) {\n requestCapability.reject(this._storedError);\n }\n this._requests.length = 0;\n this._queuedChunk = null;\n }\n\n _onProgress(evt) {\n if (!this.isStreamingSupported) {\n this.onProgress?.({ loaded: evt.loaded });\n }\n }\n\n get isStreamingSupported() {\n return false;\n }\n\n async read() {\n if (this._storedError) {\n throw this._storedError;\n }\n if (this._queuedChunk !== null) {\n const chunk = this._queuedChunk;\n this._queuedChunk = null;\n return { value: chunk, done: false };\n }\n if (this._done) {\n return { value: undefined, done: true };\n }\n const requestCapability = Promise.withResolvers();\n this._requests.push(requestCapability);\n return requestCapability.promise;\n }\n\n cancel(reason) {\n this._done = true;\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n if (this._manager.isPendingRequest(this._requestId)) {\n this._manager.abortRequest(this._requestId);\n }\n this._close();\n }\n}\n\nexport { PDFNetworkStream };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AbortException, assert, MissingPDFException } from \"../shared/util.js\";\nimport {\n extractFilenameFromHeader,\n validateRangeRequestCapabilities,\n} from \"./network_utils.js\";\nimport { NodePackages } from \"./node_utils.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\n 'Module \"./node_stream.js\" shall not be used with MOZCENTRAL builds.'\n );\n}\n\nconst fileUriRegex = /^file:\\/\\/\\/[a-zA-Z]:\\//;\n\nfunction parseUrl(sourceUrl) {\n const url = NodePackages.get(\"url\");\n const parsedUrl = url.parse(sourceUrl);\n if (parsedUrl.protocol === \"file:\" || parsedUrl.host) {\n return parsedUrl;\n }\n // Prepending 'file:///' to Windows absolute path.\n if (/^[a-z]:[/\\\\]/i.test(sourceUrl)) {\n return url.parse(`file:///${sourceUrl}`);\n }\n // Changes protocol to 'file:' if url refers to filesystem.\n if (!parsedUrl.host) {\n parsedUrl.protocol = \"file:\";\n }\n return parsedUrl;\n}\n\nclass PDFNodeStream {\n constructor(source) {\n this.source = source;\n this.url = parseUrl(source.url);\n this.isHttp =\n this.url.protocol === \"http:\" || this.url.protocol === \"https:\";\n // Check if url refers to filesystem.\n this.isFsUrl = this.url.protocol === \"file:\";\n this.httpHeaders = (this.isHttp && source.httpHeaders) || {};\n\n this._fullRequestReader = null;\n this._rangeRequestReaders = [];\n }\n\n get _progressiveDataLength() {\n return this._fullRequestReader?._loaded ?? 0;\n }\n\n getFullReader() {\n assert(\n !this._fullRequestReader,\n \"PDFNodeStream.getFullReader can only be called once.\"\n );\n this._fullRequestReader = this.isFsUrl\n ? new PDFNodeStreamFsFullReader(this)\n : new PDFNodeStreamFullReader(this);\n return this._fullRequestReader;\n }\n\n getRangeReader(start, end) {\n if (end <= this._progressiveDataLength) {\n return null;\n }\n const rangeReader = this.isFsUrl\n ? new PDFNodeStreamFsRangeReader(this, start, end)\n : new PDFNodeStreamRangeReader(this, start, end);\n this._rangeRequestReaders.push(rangeReader);\n return rangeReader;\n }\n\n cancelAllRequests(reason) {\n this._fullRequestReader?.cancel(reason);\n\n for (const reader of this._rangeRequestReaders.slice(0)) {\n reader.cancel(reason);\n }\n }\n}\n\nclass BaseFullReader {\n constructor(stream) {\n this._url = stream.url;\n this._done = false;\n this._storedError = null;\n this.onProgress = null;\n const source = stream.source;\n this._contentLength = source.length; // optional\n this._loaded = 0;\n this._filename = null;\n\n this._disableRange = source.disableRange || false;\n this._rangeChunkSize = source.rangeChunkSize;\n if (!this._rangeChunkSize && !this._disableRange) {\n this._disableRange = true;\n }\n\n this._isStreamingSupported = !source.disableStream;\n this._isRangeSupported = !source.disableRange;\n\n this._readableStream = null;\n this._readCapability = Promise.withResolvers();\n this._headersCapability = Promise.withResolvers();\n }\n\n get headersReady() {\n return this._headersCapability.promise;\n }\n\n get filename() {\n return this._filename;\n }\n\n get contentLength() {\n return this._contentLength;\n }\n\n get isRangeSupported() {\n return this._isRangeSupported;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n async read() {\n await this._readCapability.promise;\n if (this._done) {\n return { value: undefined, done: true };\n }\n if (this._storedError) {\n throw this._storedError;\n }\n\n const chunk = this._readableStream.read();\n if (chunk === null) {\n this._readCapability = Promise.withResolvers();\n return this.read();\n }\n this._loaded += chunk.length;\n this.onProgress?.({\n loaded: this._loaded,\n total: this._contentLength,\n });\n\n // Ensure that `read()` method returns ArrayBuffer.\n const buffer = new Uint8Array(chunk).buffer;\n return { value: buffer, done: false };\n }\n\n cancel(reason) {\n // Call `this._error()` method when cancel is called\n // before _readableStream is set.\n if (!this._readableStream) {\n this._error(reason);\n return;\n }\n this._readableStream.destroy(reason);\n }\n\n _error(reason) {\n this._storedError = reason;\n this._readCapability.resolve();\n }\n\n _setReadableStream(readableStream) {\n this._readableStream = readableStream;\n readableStream.on(\"readable\", () => {\n this._readCapability.resolve();\n });\n\n readableStream.on(\"end\", () => {\n // Destroy readable to minimize resource usage.\n readableStream.destroy();\n this._done = true;\n this._readCapability.resolve();\n });\n\n readableStream.on(\"error\", reason => {\n this._error(reason);\n });\n\n // We need to stop reading when range is supported and streaming is\n // disabled.\n if (!this._isStreamingSupported && this._isRangeSupported) {\n this._error(new AbortException(\"streaming is disabled\"));\n }\n\n // Destroy ReadableStream if already in errored state.\n if (this._storedError) {\n this._readableStream.destroy(this._storedError);\n }\n }\n}\n\nclass BaseRangeReader {\n constructor(stream) {\n this._url = stream.url;\n this._done = false;\n this._storedError = null;\n this.onProgress = null;\n this._loaded = 0;\n this._readableStream = null;\n this._readCapability = Promise.withResolvers();\n const source = stream.source;\n this._isStreamingSupported = !source.disableStream;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n async read() {\n await this._readCapability.promise;\n if (this._done) {\n return { value: undefined, done: true };\n }\n if (this._storedError) {\n throw this._storedError;\n }\n\n const chunk = this._readableStream.read();\n if (chunk === null) {\n this._readCapability = Promise.withResolvers();\n return this.read();\n }\n this._loaded += chunk.length;\n this.onProgress?.({ loaded: this._loaded });\n\n // Ensure that `read()` method returns ArrayBuffer.\n const buffer = new Uint8Array(chunk).buffer;\n return { value: buffer, done: false };\n }\n\n cancel(reason) {\n // Call `this._error()` method when cancel is called\n // before _readableStream is set.\n if (!this._readableStream) {\n this._error(reason);\n return;\n }\n this._readableStream.destroy(reason);\n }\n\n _error(reason) {\n this._storedError = reason;\n this._readCapability.resolve();\n }\n\n _setReadableStream(readableStream) {\n this._readableStream = readableStream;\n readableStream.on(\"readable\", () => {\n this._readCapability.resolve();\n });\n\n readableStream.on(\"end\", () => {\n // Destroy readableStream to minimize resource usage.\n readableStream.destroy();\n this._done = true;\n this._readCapability.resolve();\n });\n\n readableStream.on(\"error\", reason => {\n this._error(reason);\n });\n\n // Destroy readableStream if already in errored state.\n if (this._storedError) {\n this._readableStream.destroy(this._storedError);\n }\n }\n}\n\nfunction createRequestOptions(parsedUrl, headers) {\n return {\n protocol: parsedUrl.protocol,\n auth: parsedUrl.auth,\n host: parsedUrl.hostname,\n port: parsedUrl.port,\n path: parsedUrl.path,\n method: \"GET\",\n headers,\n };\n}\n\nclass PDFNodeStreamFullReader extends BaseFullReader {\n constructor(stream) {\n super(stream);\n\n const handleResponse = response => {\n if (response.statusCode === 404) {\n const error = new MissingPDFException(`Missing PDF \"${this._url}\".`);\n this._storedError = error;\n this._headersCapability.reject(error);\n return;\n }\n this._headersCapability.resolve();\n this._setReadableStream(response);\n\n // Make sure that headers name are in lower case, as mentioned\n // here: https://nodejs.org/api/http.html#http_message_headers.\n const getResponseHeader = name =>\n this._readableStream.headers[name.toLowerCase()];\n\n const { allowRangeRequests, suggestedLength } =\n validateRangeRequestCapabilities({\n getResponseHeader,\n isHttp: stream.isHttp,\n rangeChunkSize: this._rangeChunkSize,\n disableRange: this._disableRange,\n });\n\n this._isRangeSupported = allowRangeRequests;\n // Setting right content length.\n this._contentLength = suggestedLength || this._contentLength;\n\n this._filename = extractFilenameFromHeader(getResponseHeader);\n };\n\n this._request = null;\n if (this._url.protocol === \"http:\") {\n const http = NodePackages.get(\"http\");\n this._request = http.request(\n createRequestOptions(this._url, stream.httpHeaders),\n handleResponse\n );\n } else {\n const https = NodePackages.get(\"https\");\n this._request = https.request(\n createRequestOptions(this._url, stream.httpHeaders),\n handleResponse\n );\n }\n\n this._request.on(\"error\", reason => {\n this._storedError = reason;\n this._headersCapability.reject(reason);\n });\n // Note: `request.end(data)` is used to write `data` to request body\n // and notify end of request. But one should always call `request.end()`\n // even if there is no data to write -- (to notify the end of request).\n this._request.end();\n }\n}\n\nclass PDFNodeStreamRangeReader extends BaseRangeReader {\n constructor(stream, start, end) {\n super(stream);\n\n this._httpHeaders = {};\n for (const property in stream.httpHeaders) {\n const value = stream.httpHeaders[property];\n if (value === undefined) {\n continue;\n }\n this._httpHeaders[property] = value;\n }\n this._httpHeaders.Range = `bytes=${start}-${end - 1}`;\n\n const handleResponse = response => {\n if (response.statusCode === 404) {\n const error = new MissingPDFException(`Missing PDF \"${this._url}\".`);\n this._storedError = error;\n return;\n }\n this._setReadableStream(response);\n };\n\n this._request = null;\n if (this._url.protocol === \"http:\") {\n const http = NodePackages.get(\"http\");\n this._request = http.request(\n createRequestOptions(this._url, this._httpHeaders),\n handleResponse\n );\n } else {\n const https = NodePackages.get(\"https\");\n this._request = https.request(\n createRequestOptions(this._url, this._httpHeaders),\n handleResponse\n );\n }\n\n this._request.on(\"error\", reason => {\n this._storedError = reason;\n });\n this._request.end();\n }\n}\n\nclass PDFNodeStreamFsFullReader extends BaseFullReader {\n constructor(stream) {\n super(stream);\n\n let path = decodeURIComponent(this._url.path);\n\n // Remove the extra slash to get right path from url like `file:///C:/`\n if (fileUriRegex.test(this._url.href)) {\n path = path.replace(/^\\//, \"\");\n }\n\n const fs = NodePackages.get(\"fs\");\n fs.promises.lstat(path).then(\n stat => {\n // Setting right content length.\n this._contentLength = stat.size;\n\n this._setReadableStream(fs.createReadStream(path));\n this._headersCapability.resolve();\n },\n error => {\n if (error.code === \"ENOENT\") {\n error = new MissingPDFException(`Missing PDF \"${path}\".`);\n }\n this._storedError = error;\n this._headersCapability.reject(error);\n }\n );\n }\n}\n\nclass PDFNodeStreamFsRangeReader extends BaseRangeReader {\n constructor(stream, start, end) {\n super(stream);\n\n let path = decodeURIComponent(this._url.path);\n\n // Remove the extra slash to get right path from url like `file:///C:/`\n if (fileUriRegex.test(this._url.href)) {\n path = path.replace(/^\\//, \"\");\n }\n\n const fs = NodePackages.get(\"fs\");\n this._setReadableStream(fs.createReadStream(path, { start, end: end - 1 }));\n }\n}\n\nexport { PDFNodeStream };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./display_utils\").PageViewport} PageViewport */\n/** @typedef {import(\"./api\").TextContent} TextContent */\n\nimport { AbortException, Util, warn } from \"../shared/util.js\";\nimport { deprecated, setLayerDimensions } from \"./display_utils.js\";\n\n/**\n * @typedef {Object} TextLayerParameters\n * @property {ReadableStream | TextContent} textContentSource - Text content to\n * render, i.e. the value returned by the page's `streamTextContent` or\n * `getTextContent` method.\n * @property {HTMLElement} container - The DOM node that will contain the text\n * runs.\n * @property {PageViewport} viewport - The target viewport to properly layout\n * the text runs.\n */\n\n/**\n * @typedef {Object} TextLayerUpdateParameters\n * @property {PageViewport} viewport - The target viewport to properly layout\n * the text runs.\n * @property {function} [onBefore] - Callback invoked before the textLayer is\n * updated in the DOM.\n */\n\nconst MAX_TEXT_DIVS_TO_RENDER = 100000;\nconst DEFAULT_FONT_SIZE = 30;\nconst DEFAULT_FONT_ASCENT = 0.8;\n\nclass TextLayer {\n #capability = Promise.withResolvers();\n\n #container = null;\n\n #disableProcessItems = false;\n\n #fontInspectorEnabled = !!globalThis.FontInspector?.enabled;\n\n #lang = null;\n\n #layoutTextParams = null;\n\n #pageHeight = 0;\n\n #pageWidth = 0;\n\n #reader = null;\n\n #rootContainer = null;\n\n #rotation = 0;\n\n #scale = 0;\n\n #styleCache = Object.create(null);\n\n #textContentItemsStr = [];\n\n #textContentSource = null;\n\n #textDivs = [];\n\n #textDivProperties = new WeakMap();\n\n #transform = null;\n\n static #ascentCache = new Map();\n\n static #canvasCtx = null;\n\n static #pendingTextLayers = new Set();\n\n /**\n * @param {TextLayerParameters} options\n */\n constructor({ textContentSource, container, viewport }) {\n if (textContentSource instanceof ReadableStream) {\n this.#textContentSource = textContentSource;\n } else if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n typeof textContentSource === \"object\"\n ) {\n this.#textContentSource = new ReadableStream({\n start(controller) {\n controller.enqueue(textContentSource);\n controller.close();\n },\n });\n } else {\n throw new Error('No \"textContentSource\" parameter specified.');\n }\n this.#container = this.#rootContainer = container;\n\n this.#scale = viewport.scale * (globalThis.devicePixelRatio || 1);\n this.#rotation = viewport.rotation;\n this.#layoutTextParams = {\n prevFontSize: null,\n prevFontFamily: null,\n div: null,\n properties: null,\n ctx: null,\n };\n const { pageWidth, pageHeight, pageX, pageY } = viewport.rawDims;\n this.#transform = [1, 0, 0, -1, -pageX, pageY + pageHeight];\n this.#pageWidth = pageWidth;\n this.#pageHeight = pageHeight;\n\n setLayerDimensions(container, viewport);\n\n TextLayer.#pendingTextLayers.add(this);\n // Always clean-up the temporary canvas once rendering is no longer pending.\n this.#capability.promise\n .catch(() => {\n // Avoid \"Uncaught promise\" messages in the console.\n })\n .then(() => {\n TextLayer.#pendingTextLayers.delete(this);\n this.#layoutTextParams = null;\n this.#styleCache = null;\n });\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n // For testing purposes.\n Object.defineProperty(this, \"pageWidth\", {\n get() {\n return this.#pageWidth;\n },\n });\n Object.defineProperty(this, \"pageHeight\", {\n get() {\n return this.#pageHeight;\n },\n });\n }\n }\n\n /**\n * Render the textLayer.\n * @returns {Promise}\n */\n render() {\n const pump = () => {\n this.#reader.read().then(({ value, done }) => {\n if (done) {\n this.#capability.resolve();\n return;\n }\n this.#lang ??= value.lang;\n Object.assign(this.#styleCache, value.styles);\n this.#processItems(value.items);\n pump();\n }, this.#capability.reject);\n };\n this.#reader = this.#textContentSource.getReader();\n pump();\n\n return this.#capability.promise;\n }\n\n /**\n * Update a previously rendered textLayer, if necessary.\n * @param {TextLayerUpdateParameters} options\n * @returns {undefined}\n */\n update({ viewport, onBefore = null }) {\n const scale = viewport.scale * (globalThis.devicePixelRatio || 1);\n const rotation = viewport.rotation;\n\n if (rotation !== this.#rotation) {\n onBefore?.();\n this.#rotation = rotation;\n setLayerDimensions(this.#rootContainer, { rotation });\n }\n\n if (scale !== this.#scale) {\n onBefore?.();\n this.#scale = scale;\n const params = {\n prevFontSize: null,\n prevFontFamily: null,\n div: null,\n properties: null,\n ctx: TextLayer.#getCtx(this.#lang),\n };\n for (const div of this.#textDivs) {\n params.properties = this.#textDivProperties.get(div);\n params.div = div;\n this.#layout(params);\n }\n }\n }\n\n /**\n * Cancel rendering of the textLayer.\n * @returns {undefined}\n */\n cancel() {\n const abortEx = new AbortException(\"TextLayer task cancelled.\");\n\n this.#reader?.cancel(abortEx).catch(() => {\n // Avoid \"Uncaught promise\" messages in the console.\n });\n this.#reader = null;\n\n this.#capability.reject(abortEx);\n }\n\n /**\n * @type {Array} HTML elements that correspond to the text items\n * of the textContent input.\n * This is output and will initially be set to an empty array.\n */\n get textDivs() {\n return this.#textDivs;\n }\n\n /**\n * @type {Array} Strings that correspond to the `str` property of\n * the text items of the textContent input.\n * This is output and will initially be set to an empty array\n */\n get textContentItemsStr() {\n return this.#textContentItemsStr;\n }\n\n #processItems(items) {\n if (this.#disableProcessItems) {\n return;\n }\n this.#layoutTextParams.ctx ||= TextLayer.#getCtx(this.#lang);\n\n const textDivs = this.#textDivs,\n textContentItemsStr = this.#textContentItemsStr;\n\n for (const item of items) {\n // No point in rendering many divs as it would make the browser\n // unusable even after the divs are rendered.\n if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER) {\n warn(\"Ignoring additional textDivs for performance reasons.\");\n\n this.#disableProcessItems = true; // Avoid multiple warnings for one page.\n return;\n }\n\n if (item.str === undefined) {\n if (\n item.type === \"beginMarkedContentProps\" ||\n item.type === \"beginMarkedContent\"\n ) {\n const parent = this.#container;\n this.#container = document.createElement(\"span\");\n this.#container.classList.add(\"markedContent\");\n if (item.id !== null) {\n this.#container.setAttribute(\"id\", `${item.id}`);\n }\n parent.append(this.#container);\n } else if (item.type === \"endMarkedContent\") {\n this.#container = this.#container.parentNode;\n }\n continue;\n }\n textContentItemsStr.push(item.str);\n this.#appendText(item);\n }\n }\n\n #appendText(geom) {\n // Initialize all used properties to keep the caches monomorphic.\n const textDiv = document.createElement(\"span\");\n const textDivProperties = {\n angle: 0,\n canvasWidth: 0,\n hasText: geom.str !== \"\",\n hasEOL: geom.hasEOL,\n fontSize: 0,\n };\n this.#textDivs.push(textDiv);\n\n const tx = Util.transform(this.#transform, geom.transform);\n let angle = Math.atan2(tx[1], tx[0]);\n const style = this.#styleCache[geom.fontName];\n if (style.vertical) {\n angle += Math.PI / 2;\n }\n\n const fontFamily =\n (this.#fontInspectorEnabled && style.fontSubstitution) ||\n style.fontFamily;\n const fontHeight = Math.hypot(tx[2], tx[3]);\n const fontAscent =\n fontHeight * TextLayer.#getAscent(fontFamily, this.#lang);\n\n let left, top;\n if (angle === 0) {\n left = tx[4];\n top = tx[5] - fontAscent;\n } else {\n left = tx[4] + fontAscent * Math.sin(angle);\n top = tx[5] - fontAscent * Math.cos(angle);\n }\n\n const scaleFactorStr = \"calc(var(--scale-factor)*\";\n const divStyle = textDiv.style;\n // Setting the style properties individually, rather than all at once,\n // should be OK since the `textDiv` isn't appended to the document yet.\n if (this.#container === this.#rootContainer) {\n divStyle.left = `${((100 * left) / this.#pageWidth).toFixed(2)}%`;\n divStyle.top = `${((100 * top) / this.#pageHeight).toFixed(2)}%`;\n } else {\n // We're in a marked content span, hence we can't use percents.\n divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`;\n divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`;\n }\n divStyle.fontSize = `${scaleFactorStr}${fontHeight.toFixed(2)}px)`;\n divStyle.fontFamily = fontFamily;\n\n textDivProperties.fontSize = fontHeight;\n\n // Keeps screen readers from pausing on every new text span.\n textDiv.setAttribute(\"role\", \"presentation\");\n\n textDiv.textContent = geom.str;\n // geom.dir may be 'ttb' for vertical texts.\n textDiv.dir = geom.dir;\n\n // `fontName` is only used by the FontInspector, and we only use `dataset`\n // here to make the font name available in the debugger.\n if (this.#fontInspectorEnabled) {\n textDiv.dataset.fontName =\n style.fontSubstitutionLoadedName || geom.fontName;\n }\n if (angle !== 0) {\n textDivProperties.angle = angle * (180 / Math.PI);\n }\n // We don't bother scaling single-char text divs, because it has very\n // little effect on text highlighting. This makes scrolling on docs with\n // lots of such divs a lot faster.\n let shouldScaleText = false;\n if (geom.str.length > 1) {\n shouldScaleText = true;\n } else if (geom.str !== \" \" && geom.transform[0] !== geom.transform[3]) {\n const absScaleX = Math.abs(geom.transform[0]),\n absScaleY = Math.abs(geom.transform[3]);\n // When the horizontal/vertical scaling differs significantly, also scale\n // even single-char text to improve highlighting (fixes issue11713.pdf).\n if (\n absScaleX !== absScaleY &&\n Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5\n ) {\n shouldScaleText = true;\n }\n }\n if (shouldScaleText) {\n textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width;\n }\n this.#textDivProperties.set(textDiv, textDivProperties);\n\n // Finally, layout and append the text to the DOM.\n this.#layoutTextParams.div = textDiv;\n this.#layoutTextParams.properties = textDivProperties;\n this.#layout(this.#layoutTextParams);\n\n if (textDivProperties.hasText) {\n this.#container.append(textDiv);\n }\n if (textDivProperties.hasEOL) {\n const br = document.createElement(\"br\");\n br.setAttribute(\"role\", \"presentation\");\n this.#container.append(br);\n }\n }\n\n #layout(params) {\n const { div, properties, ctx, prevFontSize, prevFontFamily } = params;\n const { style } = div;\n let transform = \"\";\n if (properties.canvasWidth !== 0 && properties.hasText) {\n const { fontFamily } = style;\n const { canvasWidth, fontSize } = properties;\n\n if (prevFontSize !== fontSize || prevFontFamily !== fontFamily) {\n ctx.font = `${fontSize * this.#scale}px ${fontFamily}`;\n params.prevFontSize = fontSize;\n params.prevFontFamily = fontFamily;\n }\n\n // Only measure the width for multi-char text divs, see `appendText`.\n const { width } = ctx.measureText(div.textContent);\n\n if (width > 0) {\n transform = `scaleX(${(canvasWidth * this.#scale) / width})`;\n }\n }\n if (properties.angle !== 0) {\n transform = `rotate(${properties.angle}deg) ${transform}`;\n }\n if (transform.length > 0) {\n style.transform = transform;\n }\n }\n\n /**\n * Clean-up global textLayer data.\n * @returns {undefined}\n */\n static cleanup() {\n if (this.#pendingTextLayers.size > 0) {\n return;\n }\n this.#ascentCache.clear();\n\n this.#canvasCtx?.canvas.remove();\n this.#canvasCtx = null;\n }\n\n static #getCtx(lang = null) {\n if (!this.#canvasCtx) {\n // We don't use an OffscreenCanvas here because we use serif/sans serif\n // fonts with it and they depends on the locale.\n // In Firefox, the element get a lang attribute that depends on\n // what Fluent returns for the locale and the OffscreenCanvas uses\n // the OS locale.\n // Those two locales can be different and consequently the used fonts will\n // be different (see bug 1869001).\n // Ideally, we should use in the text layer the fonts we've in the pdf (or\n // their replacements when they aren't embedded) and then we can use an\n // OffscreenCanvas.\n const canvas = document.createElement(\"canvas\");\n canvas.className = \"hiddenCanvasElement\";\n document.body.append(canvas);\n this.#canvasCtx = canvas.getContext(\"2d\", { alpha: false });\n }\n return this.#canvasCtx;\n }\n\n static #getAscent(fontFamily, lang) {\n const cachedAscent = this.#ascentCache.get(fontFamily);\n if (cachedAscent) {\n return cachedAscent;\n }\n const ctx = this.#getCtx(lang);\n\n const savedFont = ctx.font;\n ctx.canvas.width = ctx.canvas.height = DEFAULT_FONT_SIZE;\n ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`;\n const metrics = ctx.measureText(\"\");\n\n // Both properties aren't available by default in Firefox.\n let ascent = metrics.fontBoundingBoxAscent;\n let descent = Math.abs(metrics.fontBoundingBoxDescent);\n if (ascent) {\n const ratio = ascent / (ascent + descent);\n this.#ascentCache.set(fontFamily, ratio);\n\n ctx.canvas.width = ctx.canvas.height = 0;\n ctx.font = savedFont;\n return ratio;\n }\n\n // Try basic heuristic to guess ascent/descent.\n // Draw a g with baseline at 0,0 and then get the line\n // number where a pixel has non-null red component (starting\n // from bottom).\n ctx.strokeStyle = \"red\";\n ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);\n ctx.strokeText(\"g\", 0, 0);\n let pixels = ctx.getImageData(\n 0,\n 0,\n DEFAULT_FONT_SIZE,\n DEFAULT_FONT_SIZE\n ).data;\n descent = 0;\n for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) {\n if (pixels[i] > 0) {\n descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE);\n break;\n }\n }\n\n // Draw an A with baseline at 0,DEFAULT_FONT_SIZE and then get the line\n // number where a pixel has non-null red component (starting\n // from top).\n ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);\n ctx.strokeText(\"A\", 0, DEFAULT_FONT_SIZE);\n pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;\n ascent = 0;\n for (let i = 0, ii = pixels.length; i < ii; i += 4) {\n if (pixels[i] > 0) {\n ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE);\n break;\n }\n }\n\n ctx.canvas.width = ctx.canvas.height = 0;\n ctx.font = savedFont;\n\n const ratio = ascent ? ascent / (ascent + descent) : DEFAULT_FONT_ASCENT;\n this.#ascentCache.set(fontFamily, ratio);\n return ratio;\n }\n}\n\nfunction renderTextLayer() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n return;\n }\n deprecated(\"`renderTextLayer`, please use `TextLayer` instead.\");\n\n const { textContentSource, container, viewport, ...rest } = arguments[0];\n const restKeys = Object.keys(rest);\n if (restKeys.length > 0) {\n warn(\"Ignoring `renderTextLayer` parameters: \" + restKeys.join(\", \"));\n }\n\n const textLayer = new TextLayer({\n textContentSource,\n container,\n viewport,\n });\n\n const { textDivs, textContentItemsStr } = textLayer;\n const promise = textLayer.render();\n\n // eslint-disable-next-line consistent-return\n return {\n promise,\n textDivs,\n textContentItemsStr,\n };\n}\n\nfunction updateTextLayer() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n return;\n }\n deprecated(\"`updateTextLayer`, please use `TextLayer` instead.\");\n}\n\nexport { renderTextLayer, TextLayer, updateTextLayer };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./api\").TextContent} TextContent */\n\nclass XfaText {\n /**\n * Walk an XFA tree and create an array of text nodes that is compatible\n * with a regular PDFs TextContent. Currently, only TextItem.str is supported,\n * all other fields and styles haven't been implemented.\n *\n * @param {Object} xfa - An XFA fake DOM object.\n *\n * @returns {TextContent}\n */\n static textContent(xfa) {\n const items = [];\n const output = {\n items,\n styles: Object.create(null),\n };\n function walk(node) {\n if (!node) {\n return;\n }\n let str = null;\n const name = node.name;\n if (name === \"#text\") {\n str = node.value;\n } else if (!XfaText.shouldBuildText(name)) {\n return;\n } else if (node?.attributes?.textContent) {\n str = node.attributes.textContent;\n } else if (node.value) {\n str = node.value;\n }\n if (str !== null) {\n items.push({\n str,\n });\n }\n if (!node.children) {\n return;\n }\n for (const child of node.children) {\n walk(child);\n }\n }\n walk(xfa);\n return output;\n }\n\n /**\n * @param {string} name - DOM node name. (lower case)\n *\n * @returns {boolean} true if the DOM node should have a corresponding text\n * node.\n */\n static shouldBuildText(name) {\n return !(\n name === \"textarea\" ||\n name === \"input\" ||\n name === \"option\" ||\n name === \"select\"\n );\n }\n}\n\nexport { XfaText };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @module pdfjsLib\n */\n\nimport {\n AbortException,\n AnnotationMode,\n assert,\n getVerbosityLevel,\n info,\n InvalidPDFException,\n isNodeJS,\n MAX_IMAGE_SIZE_TO_CACHE,\n MissingPDFException,\n PasswordException,\n RenderingIntentFlag,\n setVerbosityLevel,\n shadow,\n stringToBytes,\n UnexpectedResponseException,\n UnknownErrorException,\n unreachable,\n warn,\n} from \"../shared/util.js\";\nimport {\n AnnotationStorage,\n PrintAnnotationStorage,\n SerializableEmpty,\n} from \"./annotation_storage.js\";\nimport {\n DOMCanvasFactory,\n DOMCMapReaderFactory,\n DOMFilterFactory,\n DOMStandardFontDataFactory,\n isDataScheme,\n isValidFetchUrl,\n PageViewport,\n RenderingCancelledException,\n StatTimer,\n} from \"./display_utils.js\";\nimport { FontFaceObject, FontLoader } from \"./font_loader.js\";\nimport {\n NodeCanvasFactory,\n NodeCMapReaderFactory,\n NodeFilterFactory,\n NodePackages,\n NodeStandardFontDataFactory,\n} from \"display-node_utils\";\nimport { CanvasGraphics } from \"./canvas.js\";\nimport { GlobalWorkerOptions } from \"./worker_options.js\";\nimport { MessageHandler } from \"../shared/message_handler.js\";\nimport { Metadata } from \"./metadata.js\";\nimport { OptionalContentConfig } from \"./optional_content_config.js\";\nimport { PDFDataTransportStream } from \"./transport_stream.js\";\nimport { PDFFetchStream } from \"display-fetch_stream\";\nimport { PDFNetworkStream } from \"display-network\";\nimport { PDFNodeStream } from \"display-node_stream\";\nimport { TextLayer } from \"./text_layer.js\";\nimport { XfaText } from \"./xfa_text.js\";\n\nconst DEFAULT_RANGE_CHUNK_SIZE = 65536; // 2^16 = 65536\nconst RENDERING_CANCELLED_TIMEOUT = 100; // ms\nconst DELAYED_CLEANUP_TIMEOUT = 5000; // ms\n\nconst DefaultCanvasFactory =\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeCanvasFactory\n : DOMCanvasFactory;\nconst DefaultCMapReaderFactory =\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeCMapReaderFactory\n : DOMCMapReaderFactory;\nconst DefaultFilterFactory =\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeFilterFactory\n : DOMFilterFactory;\nconst DefaultStandardFontDataFactory =\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeStandardFontDataFactory\n : DOMStandardFontDataFactory;\n\n/**\n * @typedef { Int8Array | Uint8Array | Uint8ClampedArray |\n * Int16Array | Uint16Array |\n * Int32Array | Uint32Array | Float32Array |\n * Float64Array\n * } TypedArray\n */\n\n/**\n * @typedef {Object} RefProxy\n * @property {number} num\n * @property {number} gen\n */\n\n/**\n * Document initialization / loading parameters object.\n *\n * @typedef {Object} DocumentInitParameters\n * @property {string | URL} [url] - The URL of the PDF.\n * @property {TypedArray | ArrayBuffer | Array | string} [data] -\n * Binary PDF data.\n * Use TypedArrays (Uint8Array) to improve the memory usage. If PDF data is\n * BASE64-encoded, use `atob()` to convert it to a binary string first.\n *\n * NOTE: If TypedArrays are used they will generally be transferred to the\n * worker-thread. This will help reduce main-thread memory usage, however\n * it will take ownership of the TypedArrays.\n * @property {Object} [httpHeaders] - Basic authentication headers.\n * @property {boolean} [withCredentials] - Indicates whether or not\n * cross-site Access-Control requests should be made using credentials such\n * as cookies or authorization headers. The default is `false`.\n * @property {string} [password] - For decrypting password-protected PDFs.\n * @property {number} [length] - The PDF file length. It's used for progress\n * reports and range requests operations.\n * @property {PDFDataRangeTransport} [range] - Allows for using a custom range\n * transport implementation.\n * @property {number} [rangeChunkSize] - Specify maximum number of bytes fetched\n * per range request. The default value is {@link DEFAULT_RANGE_CHUNK_SIZE}.\n * @property {PDFWorker} [worker] - The worker that will be used for loading and\n * parsing the PDF data.\n * @property {number} [verbosity] - Controls the logging level; the constants\n * from {@link VerbosityLevel} should be used.\n * @property {string} [docBaseUrl] - The base URL of the document, used when\n * attempting to recover valid absolute URLs for annotations, and outline\n * items, that (incorrectly) only specify relative URLs.\n * @property {string} [cMapUrl] - The URL where the predefined Adobe CMaps are\n * located. Include the trailing slash.\n * @property {boolean} [cMapPacked] - Specifies if the Adobe CMaps are binary\n * packed or not. The default value is `true`.\n * @property {Object} [CMapReaderFactory] - The factory that will be used when\n * reading built-in CMap files. Providing a custom factory is useful for\n * environments without Fetch API or `XMLHttpRequest` support, such as\n * Node.js. The default value is {DOMCMapReaderFactory}.\n * @property {boolean} [useSystemFonts] - When `true`, fonts that aren't\n * embedded in the PDF document will fallback to a system font.\n * The default value is `true` in web environments and `false` in Node.js;\n * unless `disableFontFace === true` in which case this defaults to `false`\n * regardless of the environment (to prevent completely broken fonts).\n * @property {string} [standardFontDataUrl] - The URL where the standard font\n * files are located. Include the trailing slash.\n * @property {Object} [StandardFontDataFactory] - The factory that will be used\n * when reading the standard font files. Providing a custom factory is useful\n * for environments without Fetch API or `XMLHttpRequest` support, such as\n * Node.js. The default value is {DOMStandardFontDataFactory}.\n * @property {boolean} [useWorkerFetch] - Enable using the Fetch API in the\n * worker-thread when reading CMap and standard font files. When `true`,\n * the `CMapReaderFactory` and `StandardFontDataFactory` options are ignored.\n * The default value is `true` in web environments and `false` in Node.js.\n * @property {boolean} [stopAtErrors] - Reject certain promises, e.g.\n * `getOperatorList`, `getTextContent`, and `RenderTask`, when the associated\n * PDF data cannot be successfully parsed, instead of attempting to recover\n * whatever possible of the data. The default value is `false`.\n * @property {number} [maxImageSize] - The maximum allowed image size in total\n * pixels, i.e. width * height. Images above this value will not be rendered.\n * Use -1 for no limit, which is also the default value.\n * @property {boolean} [isEvalSupported] - Determines if we can evaluate strings\n * as JavaScript. Primarily used to improve performance of PDF functions.\n * The default value is `true`.\n * @property {boolean} [isOffscreenCanvasSupported] - Determines if we can use\n * `OffscreenCanvas` in the worker. Primarily used to improve performance of\n * image conversion/rendering.\n * The default value is `true` in web environments and `false` in Node.js.\n * @property {number} [canvasMaxAreaInBytes] - The integer value is used to\n * know when an image must be resized (uses `OffscreenCanvas` in the worker).\n * If it's -1 then a possibly slow algorithm is used to guess the max value.\n * @property {boolean} [disableFontFace] - By default fonts are converted to\n * OpenType fonts and loaded via the Font Loading API or `@font-face` rules.\n * If disabled, fonts will be rendered using a built-in font renderer that\n * constructs the glyphs with primitive path commands.\n * The default value is `false` in web environments and `true` in Node.js.\n * @property {boolean} [fontExtraProperties] - Include additional properties,\n * which are unused during rendering of PDF documents, when exporting the\n * parsed font data from the worker-thread. This may be useful for debugging\n * purposes (and backwards compatibility), but note that it will lead to\n * increased memory usage. The default value is `false`.\n * @property {boolean} [enableXfa] - Render Xfa forms if any.\n * The default value is `false`.\n * @property {HTMLDocument} [ownerDocument] - Specify an explicit document\n * context to create elements with and to load resources, such as fonts,\n * into. Defaults to the current document.\n * @property {boolean} [disableRange] - Disable range request loading of PDF\n * files. When enabled, and if the server supports partial content requests,\n * then the PDF will be fetched in chunks. The default value is `false`.\n * @property {boolean} [disableStream] - Disable streaming of PDF file data.\n * By default PDF.js attempts to load PDF files in chunks. The default value\n * is `false`.\n * @property {boolean} [disableAutoFetch] - Disable pre-fetching of PDF file\n * data. When range requests are enabled PDF.js will automatically keep\n * fetching more data even if it isn't needed to display the current page.\n * The default value is `false`.\n *\n * NOTE: It is also necessary to disable streaming, see above, in order for\n * disabling of pre-fetching to work correctly.\n * @property {boolean} [pdfBug] - Enables special hooks for debugging PDF.js\n * (see `web/debugger.js`). The default value is `false`.\n * @property {Object} [canvasFactory] - The factory instance that will be used\n * when creating canvases. The default value is {new DOMCanvasFactory()}.\n * @property {Object} [filterFactory] - A factory instance that will be used\n * to create SVG filters when rendering some images on the main canvas.\n */\n\n/**\n * This is the main entry point for loading a PDF and interacting with it.\n *\n * NOTE: If a URL is used to fetch the PDF data a standard Fetch API call (or\n * XHR as fallback) is used, which means it must follow same origin rules,\n * e.g. no cross-domain requests without CORS.\n *\n * @param {string | URL | TypedArray | ArrayBuffer | DocumentInitParameters}\n * src - Can be a URL where a PDF file is located, a typed array (Uint8Array)\n * already populated with data, or a parameter object.\n * @returns {PDFDocumentLoadingTask}\n */\nfunction getDocument(src) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n if (typeof src === \"string\" || src instanceof URL) {\n src = { url: src };\n } else if (src instanceof ArrayBuffer || ArrayBuffer.isView(src)) {\n src = { data: src };\n }\n }\n if (typeof src !== \"object\") {\n throw new Error(\"Invalid parameter in getDocument, need parameter object.\");\n }\n if (!src.url && !src.data && !src.range) {\n throw new Error(\n \"Invalid parameter object: need either .data, .range or .url\"\n );\n }\n const task = new PDFDocumentLoadingTask();\n const { docId } = task;\n\n const url = src.url ? getUrlProp(src.url) : null;\n const data = src.data ? getDataProp(src.data) : null;\n const httpHeaders = src.httpHeaders || null;\n const withCredentials = src.withCredentials === true;\n const password = src.password ?? null;\n const rangeTransport =\n src.range instanceof PDFDataRangeTransport ? src.range : null;\n const rangeChunkSize =\n Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0\n ? src.rangeChunkSize\n : DEFAULT_RANGE_CHUNK_SIZE;\n let worker = src.worker instanceof PDFWorker ? src.worker : null;\n const verbosity = src.verbosity;\n // Ignore \"data:\"-URLs, since they can't be used to recover valid absolute\n // URLs anyway. We want to avoid sending them to the worker-thread, since\n // they contain the *entire* PDF document and can thus be arbitrarily long.\n const docBaseUrl =\n typeof src.docBaseUrl === \"string\" && !isDataScheme(src.docBaseUrl)\n ? src.docBaseUrl\n : null;\n const cMapUrl = typeof src.cMapUrl === \"string\" ? src.cMapUrl : null;\n const cMapPacked = src.cMapPacked !== false;\n const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory;\n const standardFontDataUrl =\n typeof src.standardFontDataUrl === \"string\"\n ? src.standardFontDataUrl\n : null;\n const StandardFontDataFactory =\n src.StandardFontDataFactory || DefaultStandardFontDataFactory;\n const ignoreErrors = src.stopAtErrors !== true;\n const maxImageSize =\n Number.isInteger(src.maxImageSize) && src.maxImageSize > -1\n ? src.maxImageSize\n : -1;\n const isEvalSupported = src.isEvalSupported !== false;\n const isOffscreenCanvasSupported =\n typeof src.isOffscreenCanvasSupported === \"boolean\"\n ? src.isOffscreenCanvasSupported\n : !isNodeJS;\n const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes)\n ? src.canvasMaxAreaInBytes\n : -1;\n const disableFontFace =\n typeof src.disableFontFace === \"boolean\" ? src.disableFontFace : isNodeJS;\n const fontExtraProperties = src.fontExtraProperties === true;\n const enableXfa = src.enableXfa === true;\n const ownerDocument = src.ownerDocument || globalThis.document;\n const disableRange = src.disableRange === true;\n const disableStream = src.disableStream === true;\n const disableAutoFetch = src.disableAutoFetch === true;\n const pdfBug = src.pdfBug === true;\n\n // Parameters whose default values depend on other parameters.\n const length = rangeTransport ? rangeTransport.length : src.length ?? NaN;\n const useSystemFonts =\n typeof src.useSystemFonts === \"boolean\"\n ? src.useSystemFonts\n : !isNodeJS && !disableFontFace;\n const useWorkerFetch =\n typeof src.useWorkerFetch === \"boolean\"\n ? src.useWorkerFetch\n : (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n (CMapReaderFactory === DOMCMapReaderFactory &&\n StandardFontDataFactory === DOMStandardFontDataFactory &&\n cMapUrl &&\n standardFontDataUrl &&\n isValidFetchUrl(cMapUrl, document.baseURI) &&\n isValidFetchUrl(standardFontDataUrl, document.baseURI));\n const canvasFactory =\n src.canvasFactory || new DefaultCanvasFactory({ ownerDocument });\n const filterFactory =\n src.filterFactory || new DefaultFilterFactory({ docId, ownerDocument });\n\n // Parameters only intended for development/testing purposes.\n const styleElement =\n typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")\n ? src.styleElement\n : null;\n\n // Set the main-thread verbosity level.\n setVerbosityLevel(verbosity);\n\n // Ensure that the various factories can be initialized, when necessary,\n // since the user may provide *custom* ones.\n const transportFactory = {\n canvasFactory,\n filterFactory,\n };\n if (!useWorkerFetch) {\n transportFactory.cMapReaderFactory = new CMapReaderFactory({\n baseUrl: cMapUrl,\n isCompressed: cMapPacked,\n });\n transportFactory.standardFontDataFactory = new StandardFontDataFactory({\n baseUrl: standardFontDataUrl,\n });\n }\n\n if (!worker) {\n const workerParams = {\n verbosity,\n port: GlobalWorkerOptions.workerPort,\n };\n // Worker was not provided -- creating and owning our own. If message port\n // is specified in global worker options, using it.\n worker = workerParams.port\n ? PDFWorker.fromPort(workerParams)\n : new PDFWorker(workerParams);\n task._worker = worker;\n }\n\n const docParams = {\n docId,\n apiVersion:\n typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"TESTING\")\n ? PDFJSDev.eval(\"BUNDLE_VERSION\")\n : null,\n data,\n password,\n disableAutoFetch,\n rangeChunkSize,\n length,\n docBaseUrl,\n enableXfa,\n evaluatorOptions: {\n maxImageSize,\n disableFontFace,\n ignoreErrors,\n isEvalSupported,\n isOffscreenCanvasSupported,\n canvasMaxAreaInBytes,\n fontExtraProperties,\n useSystemFonts,\n cMapUrl: useWorkerFetch ? cMapUrl : null,\n standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null,\n },\n };\n const transportParams = {\n disableFontFace,\n fontExtraProperties,\n enableXfa,\n ownerDocument,\n disableAutoFetch,\n pdfBug,\n styleElement,\n };\n\n worker.promise\n .then(function () {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n\n const workerIdPromise = worker.messageHandler.sendWithPromise(\n \"GetDocRequest\",\n docParams,\n data ? [data.buffer] : null\n );\n\n let networkStream;\n if (rangeTransport) {\n networkStream = new PDFDataTransportStream(rangeTransport, {\n disableRange,\n disableStream,\n });\n } else if (!data) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: createPDFNetworkStream\");\n }\n const createPDFNetworkStream = params => {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS\n ) {\n const isFetchSupported = function () {\n return (\n typeof fetch !== \"undefined\" &&\n typeof Response !== \"undefined\" &&\n \"body\" in Response.prototype\n );\n };\n return isFetchSupported() && isValidFetchUrl(params.url)\n ? new PDFFetchStream(params)\n : new PDFNodeStream(params);\n }\n return isValidFetchUrl(params.url)\n ? new PDFFetchStream(params)\n : new PDFNetworkStream(params);\n };\n\n networkStream = createPDFNetworkStream({\n url,\n length,\n httpHeaders,\n withCredentials,\n rangeChunkSize,\n disableRange,\n disableStream,\n });\n }\n\n return workerIdPromise.then(workerId => {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n\n const messageHandler = new MessageHandler(docId, workerId, worker.port);\n const transport = new WorkerTransport(\n messageHandler,\n task,\n networkStream,\n transportParams,\n transportFactory\n );\n task._transport = transport;\n messageHandler.send(\"Ready\", null);\n });\n })\n .catch(task._capability.reject);\n\n return task;\n}\n\nfunction getUrlProp(val) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n return null; // The 'url' is unused with `PDFDataRangeTransport`.\n }\n if (val instanceof URL) {\n return val.href;\n }\n try {\n // The full path is required in the 'url' field.\n return new URL(val, window.location).href;\n } catch {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS &&\n typeof val === \"string\"\n ) {\n return val; // Use the url as-is in Node.js environments.\n }\n }\n throw new Error(\n \"Invalid PDF url data: \" +\n \"either string or URL-object is expected in the url property.\"\n );\n}\n\nfunction getDataProp(val) {\n // Converting string or array-like data to Uint8Array.\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS &&\n typeof Buffer !== \"undefined\" && // eslint-disable-line no-undef\n val instanceof Buffer // eslint-disable-line no-undef\n ) {\n throw new Error(\n \"Please provide binary data as `Uint8Array`, rather than `Buffer`.\"\n );\n }\n if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) {\n // Use the data as-is when it's already a Uint8Array that completely\n // \"utilizes\" its underlying ArrayBuffer, to prevent any possible\n // issues when transferring it to the worker-thread.\n return val;\n }\n if (typeof val === \"string\") {\n return stringToBytes(val);\n }\n if (\n val instanceof ArrayBuffer ||\n ArrayBuffer.isView(val) ||\n (typeof val === \"object\" && !isNaN(val?.length))\n ) {\n return new Uint8Array(val);\n }\n throw new Error(\n \"Invalid PDF binary data: either TypedArray, \" +\n \"string, or array-like object is expected in the data property.\"\n );\n}\n\nfunction isRefProxy(ref) {\n return (\n typeof ref === \"object\" &&\n Number.isInteger(ref?.num) &&\n ref.num >= 0 &&\n Number.isInteger(ref?.gen) &&\n ref.gen >= 0\n );\n}\n\n/**\n * @typedef {Object} OnProgressParameters\n * @property {number} loaded - Currently loaded number of bytes.\n * @property {number} total - Total number of bytes in the PDF file.\n */\n\n/**\n * The loading task controls the operations required to load a PDF document\n * (such as network requests) and provides a way to listen for completion,\n * after which individual pages can be rendered.\n */\nclass PDFDocumentLoadingTask {\n static #docId = 0;\n\n constructor() {\n this._capability = Promise.withResolvers();\n this._transport = null;\n this._worker = null;\n\n /**\n * Unique identifier for the document loading task.\n * @type {string}\n */\n this.docId = `d${PDFDocumentLoadingTask.#docId++}`;\n\n /**\n * Whether the loading task is destroyed or not.\n * @type {boolean}\n */\n this.destroyed = false;\n\n /**\n * Callback to request a password if a wrong or no password was provided.\n * The callback receives two parameters: a function that should be called\n * with the new password, and a reason (see {@link PasswordResponses}).\n * @type {function}\n */\n this.onPassword = null;\n\n /**\n * Callback to be able to monitor the loading progress of the PDF file\n * (necessary to implement e.g. a loading bar).\n * The callback receives an {@link OnProgressParameters} argument.\n * @type {function}\n */\n this.onProgress = null;\n }\n\n /**\n * Promise for document loading task completion.\n * @type {Promise}\n */\n get promise() {\n return this._capability.promise;\n }\n\n /**\n * Abort all network requests and destroy the worker.\n * @returns {Promise} A promise that is resolved when destruction is\n * completed.\n */\n async destroy() {\n this.destroyed = true;\n try {\n if (this._worker?.port) {\n this._worker._pendingDestroy = true;\n }\n await this._transport?.destroy();\n } catch (ex) {\n if (this._worker?.port) {\n delete this._worker._pendingDestroy;\n }\n throw ex;\n }\n\n this._transport = null;\n if (this._worker) {\n this._worker.destroy();\n this._worker = null;\n }\n }\n}\n\n/**\n * Abstract class to support range requests file loading.\n *\n * NOTE: The TypedArrays passed to the constructor and relevant methods below\n * will generally be transferred to the worker-thread. This will help reduce\n * main-thread memory usage, however it will take ownership of the TypedArrays.\n */\nclass PDFDataRangeTransport {\n /**\n * @param {number} length\n * @param {Uint8Array|null} initialData\n * @param {boolean} [progressiveDone]\n * @param {string} [contentDispositionFilename]\n */\n constructor(\n length,\n initialData,\n progressiveDone = false,\n contentDispositionFilename = null\n ) {\n this.length = length;\n this.initialData = initialData;\n this.progressiveDone = progressiveDone;\n this.contentDispositionFilename = contentDispositionFilename;\n\n this._rangeListeners = [];\n this._progressListeners = [];\n this._progressiveReadListeners = [];\n this._progressiveDoneListeners = [];\n this._readyCapability = Promise.withResolvers();\n }\n\n /**\n * @param {function} listener\n */\n addRangeListener(listener) {\n this._rangeListeners.push(listener);\n }\n\n /**\n * @param {function} listener\n */\n addProgressListener(listener) {\n this._progressListeners.push(listener);\n }\n\n /**\n * @param {function} listener\n */\n addProgressiveReadListener(listener) {\n this._progressiveReadListeners.push(listener);\n }\n\n /**\n * @param {function} listener\n */\n addProgressiveDoneListener(listener) {\n this._progressiveDoneListeners.push(listener);\n }\n\n /**\n * @param {number} begin\n * @param {Uint8Array|null} chunk\n */\n onDataRange(begin, chunk) {\n for (const listener of this._rangeListeners) {\n listener(begin, chunk);\n }\n }\n\n /**\n * @param {number} loaded\n * @param {number|undefined} total\n */\n onDataProgress(loaded, total) {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressListeners) {\n listener(loaded, total);\n }\n });\n }\n\n /**\n * @param {Uint8Array|null} chunk\n */\n onDataProgressiveRead(chunk) {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressiveReadListeners) {\n listener(chunk);\n }\n });\n }\n\n onDataProgressiveDone() {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressiveDoneListeners) {\n listener();\n }\n });\n }\n\n transportReady() {\n this._readyCapability.resolve();\n }\n\n /**\n * @param {number} begin\n * @param {number} end\n */\n requestDataRange(begin, end) {\n unreachable(\"Abstract method PDFDataRangeTransport.requestDataRange\");\n }\n\n abort() {}\n}\n\n/**\n * Proxy to a `PDFDocument` in the worker thread.\n */\nclass PDFDocumentProxy {\n constructor(pdfInfo, transport) {\n this._pdfInfo = pdfInfo;\n this._transport = transport;\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n // For testing purposes.\n Object.defineProperty(this, \"getNetworkStreamName\", {\n value: () => this._transport.getNetworkStreamName(),\n });\n Object.defineProperty(this, \"getXFADatasets\", {\n value: () => this._transport.getXFADatasets(),\n });\n Object.defineProperty(this, \"getXRefPrevValue\", {\n value: () => this._transport.getXRefPrevValue(),\n });\n Object.defineProperty(this, \"getStartXRefPos\", {\n value: () => this._transport.getStartXRefPos(),\n });\n Object.defineProperty(this, \"getAnnotArray\", {\n value: pageIndex => this._transport.getAnnotArray(pageIndex),\n });\n }\n }\n\n /**\n * @type {AnnotationStorage} Storage for annotation data in forms.\n */\n get annotationStorage() {\n return this._transport.annotationStorage;\n }\n\n /**\n * @type {Object} The filter factory instance.\n */\n get filterFactory() {\n return this._transport.filterFactory;\n }\n\n /**\n * @type {number} Total number of pages in the PDF file.\n */\n get numPages() {\n return this._pdfInfo.numPages;\n }\n\n /**\n * @type {Array} A (not guaranteed to be) unique ID to\n * identify the PDF document.\n * NOTE: The first element will always be defined for all PDF documents,\n * whereas the second element is only defined for *modified* PDF documents.\n */\n get fingerprints() {\n return this._pdfInfo.fingerprints;\n }\n\n /**\n * @type {boolean} True if only XFA form.\n */\n get isPureXfa() {\n return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n }\n\n /**\n * NOTE: This is (mostly) intended to support printing of XFA forms.\n *\n * @type {Object | null} An object representing a HTML tree structure\n * to render the XFA, or `null` when no XFA form exists.\n */\n get allXfaHtml() {\n return this._transport._htmlForXfa;\n }\n\n /**\n * @param {number} pageNumber - The page number to get. The first page is 1.\n * @returns {Promise} A promise that is resolved with\n * a {@link PDFPageProxy} object.\n */\n getPage(pageNumber) {\n return this._transport.getPage(pageNumber);\n }\n\n /**\n * @param {RefProxy} ref - The page reference.\n * @returns {Promise} A promise that is resolved with the page index,\n * starting from zero, that is associated with the reference.\n */\n getPageIndex(ref) {\n return this._transport.getPageIndex(ref);\n }\n\n /**\n * @returns {Promise>>} A promise that is resolved\n * with a mapping from named destinations to references.\n *\n * This can be slow for large documents. Use `getDestination` instead.\n */\n getDestinations() {\n return this._transport.getDestinations();\n }\n\n /**\n * @param {string} id - The named destination to get.\n * @returns {Promise | null>} A promise that is resolved with all\n * information of the given named destination, or `null` when the named\n * destination is not present in the PDF file.\n */\n getDestination(id) {\n return this._transport.getDestination(id);\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with\n * an {Array} containing the page labels that correspond to the page\n * indexes, or `null` when no page labels are present in the PDF file.\n */\n getPageLabels() {\n return this._transport.getPageLabels();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a {string}\n * containing the page layout name.\n */\n getPageLayout() {\n return this._transport.getPageLayout();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a {string}\n * containing the page mode name.\n */\n getPageMode() {\n return this._transport.getPageMode();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an\n * {Object} containing the viewer preferences, or `null` when no viewer\n * preferences are present in the PDF file.\n */\n getViewerPreferences() {\n return this._transport.getViewerPreferences();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an {Array}\n * containing the destination, or `null` when no open action is present\n * in the PDF.\n */\n getOpenAction() {\n return this._transport.getOpenAction();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a lookup table\n * for mapping named attachments to their content.\n */\n getAttachments() {\n return this._transport.getAttachments();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {Object} with the JavaScript actions:\n * - from the name tree.\n * - from A or AA entries in the catalog dictionary.\n * , or `null` if no JavaScript exists.\n */\n getJSActions() {\n return this._transport.getDocJSActions();\n }\n\n /**\n * @typedef {Object} OutlineNode\n * @property {string} title\n * @property {boolean} bold\n * @property {boolean} italic\n * @property {Uint8ClampedArray} color - The color in RGB format to use for\n * display purposes.\n * @property {string | Array | null} dest\n * @property {string | null} url\n * @property {string | undefined} unsafeUrl\n * @property {boolean | undefined} newWindow\n * @property {number | undefined} count\n * @property {Array} items\n */\n\n /**\n * @returns {Promise>} A promise that is resolved with an\n * {Array} that is a tree outline (if it has one) of the PDF file.\n */\n getOutline() {\n return this._transport.getOutline();\n }\n\n /**\n * @typedef {Object} GetOptionalContentConfigParameters\n * @property {string} [intent] - Determines the optional content groups that\n * are visible by default; valid values are:\n * - 'display' (viewable groups).\n * - 'print' (printable groups).\n * - 'any' (all groups).\n * The default value is 'display'.\n */\n\n /**\n * @param {GetOptionalContentConfigParameters} [params] - Optional content\n * config parameters.\n * @returns {Promise} A promise that is resolved with\n * an {@link OptionalContentConfig} that contains all the optional content\n * groups (assuming that the document has any).\n */\n getOptionalContentConfig({ intent = \"display\" } = {}) {\n const { renderingIntent } = this._transport.getRenderingIntent(intent);\n\n return this._transport.getOptionalContentConfig(renderingIntent);\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with\n * an {Array} that contains the permission flags for the PDF document, or\n * `null` when no permissions are present in the PDF file.\n */\n getPermissions() {\n return this._transport.getPermissions();\n }\n\n /**\n * @returns {Promise<{ info: Object, metadata: Metadata }>} A promise that is\n * resolved with an {Object} that has `info` and `metadata` properties.\n * `info` is an {Object} filled with anything available in the information\n * dictionary and similarly `metadata` is a {Metadata} object with\n * information from the metadata section of the PDF.\n */\n getMetadata() {\n return this._transport.getMetadata();\n }\n\n /**\n * @typedef {Object} MarkInfo\n * Properties correspond to Table 321 of the PDF 32000-1:2008 spec.\n * @property {boolean} Marked\n * @property {boolean} UserProperties\n * @property {boolean} Suspects\n */\n\n /**\n * @returns {Promise} A promise that is resolved with\n * a {MarkInfo} object that contains the MarkInfo flags for the PDF\n * document, or `null` when no MarkInfo values are present in the PDF file.\n */\n getMarkInfo() {\n return this._transport.getMarkInfo();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {Uint8Array} containing the raw data of the PDF document.\n */\n getData() {\n return this._transport.getData();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {Uint8Array} containing the full data of the saved document.\n */\n saveDocument() {\n return this._transport.saveDocument();\n }\n\n /**\n * @returns {Promise<{ length: number }>} A promise that is resolved when the\n * document's data is loaded. It is resolved with an {Object} that contains\n * the `length` property that indicates size of the PDF data in bytes.\n */\n getDownloadInfo() {\n return this._transport.downloadInfoCapability.promise;\n }\n\n /**\n * Cleans up resources allocated by the document on both the main and worker\n * threads.\n *\n * NOTE: Do not, under any circumstances, call this method when rendering is\n * currently ongoing since that may lead to rendering errors.\n *\n * @param {boolean} [keepLoadedFonts] - Let fonts remain attached to the DOM.\n * NOTE: This will increase persistent memory usage, hence don't use this\n * option unless absolutely necessary. The default value is `false`.\n * @returns {Promise} A promise that is resolved when clean-up has finished.\n */\n cleanup(keepLoadedFonts = false) {\n return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);\n }\n\n /**\n * Destroys the current document instance and terminates the worker.\n */\n destroy() {\n return this.loadingTask.destroy();\n }\n\n /**\n * @param {RefProxy} ref - The page reference.\n * @returns {number | null} The page number, if it's cached.\n */\n cachedPageNumber(ref) {\n return this._transport.cachedPageNumber(ref);\n }\n\n /**\n * @type {DocumentInitParameters} A subset of the current\n * {DocumentInitParameters}, which are needed in the viewer.\n */\n get loadingParams() {\n return this._transport.loadingParams;\n }\n\n /**\n * @type {PDFDocumentLoadingTask} The loadingTask for the current document.\n */\n get loadingTask() {\n return this._transport.loadingTask;\n }\n\n /**\n * @returns {Promise> | null>} A promise that is\n * resolved with an {Object} containing /AcroForm field data for the JS\n * sandbox, or `null` when no field data is present in the PDF file.\n */\n getFieldObjects() {\n return this._transport.getFieldObjects();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with `true`\n * if some /AcroForm fields have JavaScript actions.\n */\n hasJSActions() {\n return this._transport.hasJSActions();\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with an\n * {Array} containing IDs of annotations that have a calculation\n * action, or `null` when no such annotations are present in the PDF file.\n */\n getCalculationOrderIds() {\n return this._transport.getCalculationOrderIds();\n }\n}\n\n/**\n * Page getViewport parameters.\n *\n * @typedef {Object} GetViewportParameters\n * @property {number} scale - The desired scale of the viewport.\n * @property {number} [rotation] - The desired rotation, in degrees, of\n * the viewport. If omitted it defaults to the page rotation.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n * The default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n * The default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be\n * flipped. The default value is `false`.\n */\n\n/**\n * Page getTextContent parameters.\n *\n * @typedef {Object} getTextContentParameters\n * @property {boolean} [includeMarkedContent] - When true include marked\n * content items in the items array of TextContent. The default is `false`.\n * @property {boolean} [disableNormalization] - When true the text is *not*\n * normalized in the worker-thread. The default is `false`.\n */\n\n/**\n * Page text content.\n *\n * @typedef {Object} TextContent\n * @property {Array} items - Array of\n * {@link TextItem} and {@link TextMarkedContent} objects. TextMarkedContent\n * items are included when includeMarkedContent is true.\n * @property {Object} styles - {@link TextStyle} objects,\n * indexed by font name.\n * @property {string | null} lang - The document /Lang attribute.\n */\n\n/**\n * Page text content part.\n *\n * @typedef {Object} TextItem\n * @property {string} str - Text content.\n * @property {string} dir - Text direction: 'ttb', 'ltr' or 'rtl'.\n * @property {Array} transform - Transformation matrix.\n * @property {number} width - Width in device space.\n * @property {number} height - Height in device space.\n * @property {string} fontName - Font name used by PDF.js for converted font.\n * @property {boolean} hasEOL - Indicating if the text content is followed by a\n * line-break.\n */\n\n/**\n * Page text marked content part.\n *\n * @typedef {Object} TextMarkedContent\n * @property {string} type - Either 'beginMarkedContent',\n * 'beginMarkedContentProps', or 'endMarkedContent'.\n * @property {string} id - The marked content identifier. Only used for type\n * 'beginMarkedContentProps'.\n */\n\n/**\n * Text style.\n *\n * @typedef {Object} TextStyle\n * @property {number} ascent - Font ascent.\n * @property {number} descent - Font descent.\n * @property {boolean} vertical - Whether or not the text is in vertical mode.\n * @property {string} fontFamily - The possible font family.\n */\n\n/**\n * Page annotation parameters.\n *\n * @typedef {Object} GetAnnotationsParameters\n * @property {string} [intent] - Determines the annotations that are fetched,\n * can be 'display' (viewable annotations), 'print' (printable annotations),\n * or 'any' (all annotations). The default value is 'display'.\n */\n\n/**\n * Page render parameters.\n *\n * @typedef {Object} RenderParameters\n * @property {CanvasRenderingContext2D} canvasContext - A 2D context of a DOM\n * Canvas object.\n * @property {PageViewport} viewport - Rendering viewport obtained by calling\n * the `PDFPageProxy.getViewport` method.\n * @property {string} [intent] - Rendering intent, can be 'display', 'print',\n * or 'any'. The default value is 'display'.\n * @property {number} [annotationMode] Controls which annotations are rendered\n * onto the canvas, for annotations with appearance-data; the values from\n * {@link AnnotationMode} should be used. The following values are supported:\n * - `AnnotationMode.DISABLE`, which disables all annotations.\n * - `AnnotationMode.ENABLE`, which includes all possible annotations (thus\n * it also depends on the `intent`-option, see above).\n * - `AnnotationMode.ENABLE_FORMS`, which excludes annotations that contain\n * interactive form elements (those will be rendered in the display layer).\n * - `AnnotationMode.ENABLE_STORAGE`, which includes all possible annotations\n * (as above) but where interactive form elements are updated with data\n * from the {@link AnnotationStorage}-instance; useful e.g. for printing.\n * The default value is `AnnotationMode.ENABLE`.\n * @property {Array} [transform] - Additional transform, applied just\n * before viewport transform.\n * @property {CanvasGradient | CanvasPattern | string} [background] - Background\n * to use for the canvas.\n * Any valid `canvas.fillStyle` can be used: a `DOMString` parsed as CSS\n * value, a `CanvasGradient` object (a linear or radial gradient) or\n * a `CanvasPattern` object (a repetitive image). The default value is\n * 'rgb(255,255,255)'.\n *\n * NOTE: This option may be partially, or completely, ignored when the\n * `pageColors`-option is used.\n * @property {Object} [pageColors] - Overwrites background and foreground colors\n * with user defined ones in order to improve readability in high contrast\n * mode.\n * @property {Promise} [optionalContentConfigPromise] -\n * A promise that should resolve with an {@link OptionalContentConfig}\n * created from `PDFDocumentProxy.getOptionalContentConfig`. If `null`,\n * the configuration will be fetched automatically with the default visibility\n * states set.\n * @property {Map} [annotationCanvasMap] - Map some\n * annotation ids with canvases used to render them.\n * @property {PrintAnnotationStorage} [printAnnotationStorage]\n */\n\n/**\n * Page getOperatorList parameters.\n *\n * @typedef {Object} GetOperatorListParameters\n * @property {string} [intent] - Rendering intent, can be 'display', 'print',\n * or 'any'. The default value is 'display'.\n * @property {number} [annotationMode] Controls which annotations are included\n * in the operatorList, for annotations with appearance-data; the values from\n * {@link AnnotationMode} should be used. The following values are supported:\n * - `AnnotationMode.DISABLE`, which disables all annotations.\n * - `AnnotationMode.ENABLE`, which includes all possible annotations (thus\n * it also depends on the `intent`-option, see above).\n * - `AnnotationMode.ENABLE_FORMS`, which excludes annotations that contain\n * interactive form elements (those will be rendered in the display layer).\n * - `AnnotationMode.ENABLE_STORAGE`, which includes all possible annotations\n * (as above) but where interactive form elements are updated with data\n * from the {@link AnnotationStorage}-instance; useful e.g. for printing.\n * The default value is `AnnotationMode.ENABLE`.\n * @property {PrintAnnotationStorage} [printAnnotationStorage]\n */\n\n/**\n * Structure tree node. The root node will have a role \"Root\".\n *\n * @typedef {Object} StructTreeNode\n * @property {Array} children - Array of\n * {@link StructTreeNode} and {@link StructTreeContent} objects.\n * @property {string} role - element's role, already mapped if a role map exists\n * in the PDF.\n */\n\n/**\n * Structure tree content.\n *\n * @typedef {Object} StructTreeContent\n * @property {string} type - either \"content\" for page and stream structure\n * elements or \"object\" for object references.\n * @property {string} id - unique id that will map to the text layer.\n */\n\n/**\n * PDF page operator list.\n *\n * @typedef {Object} PDFOperatorList\n * @property {Array} fnArray - Array containing the operator functions.\n * @property {Array} argsArray - Array containing the arguments of the\n * functions.\n */\n\n/**\n * Proxy to a `PDFPage` in the worker thread.\n */\nclass PDFPageProxy {\n #delayedCleanupTimeout = null;\n\n #pendingCleanup = false;\n\n constructor(pageIndex, pageInfo, transport, pdfBug = false) {\n this._pageIndex = pageIndex;\n this._pageInfo = pageInfo;\n this._transport = transport;\n this._stats = pdfBug ? new StatTimer() : null;\n this._pdfBug = pdfBug;\n /** @type {PDFObjects} */\n this.commonObjs = transport.commonObjs;\n this.objs = new PDFObjects();\n\n this._maybeCleanupAfterRender = false;\n this._intentStates = new Map();\n this.destroyed = false;\n }\n\n /**\n * @type {number} Page number of the page. First page is 1.\n */\n get pageNumber() {\n return this._pageIndex + 1;\n }\n\n /**\n * @type {number} The number of degrees the page is rotated clockwise.\n */\n get rotate() {\n return this._pageInfo.rotate;\n }\n\n /**\n * @type {RefProxy | null} The reference that points to this page.\n */\n get ref() {\n return this._pageInfo.ref;\n }\n\n /**\n * @type {number} The default size of units in 1/72nds of an inch.\n */\n get userUnit() {\n return this._pageInfo.userUnit;\n }\n\n /**\n * @type {Array} An array of the visible portion of the PDF page in\n * user space units [x1, y1, x2, y2].\n */\n get view() {\n return this._pageInfo.view;\n }\n\n /**\n * @param {GetViewportParameters} params - Viewport parameters.\n * @returns {PageViewport} Contains 'width' and 'height' properties\n * along with transforms required for rendering.\n */\n getViewport({\n scale,\n rotation = this.rotate,\n offsetX = 0,\n offsetY = 0,\n dontFlip = false,\n } = {}) {\n return new PageViewport({\n viewBox: this.view,\n scale,\n rotation,\n offsetX,\n offsetY,\n dontFlip,\n });\n }\n\n /**\n * @param {GetAnnotationsParameters} [params] - Annotation parameters.\n * @returns {Promise>} A promise that is resolved with an\n * {Array} of the annotation objects.\n */\n getAnnotations({ intent = \"display\" } = {}) {\n const { renderingIntent } = this._transport.getRenderingIntent(intent);\n\n return this._transport.getAnnotations(this._pageIndex, renderingIntent);\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an\n * {Object} with JS actions.\n */\n getJSActions() {\n return this._transport.getPageJSActions(this._pageIndex);\n }\n\n /**\n * @type {Object} The filter factory instance.\n */\n get filterFactory() {\n return this._transport.filterFactory;\n }\n\n /**\n * @type {boolean} True if only XFA form.\n */\n get isPureXfa() {\n return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {Object} with a fake DOM object (a tree structure where elements\n * are {Object} with a name, attributes (class, style, ...), value and\n * children, very similar to a HTML DOM tree), or `null` if no XFA exists.\n */\n async getXfa() {\n return this._transport._htmlForXfa?.children[this._pageIndex] || null;\n }\n\n /**\n * Begins the process of rendering a page to the desired context.\n *\n * @param {RenderParameters} params - Page render parameters.\n * @returns {RenderTask} An object that contains a promise that is\n * resolved when the page finishes rendering.\n */\n render({\n canvasContext,\n viewport,\n intent = \"display\",\n annotationMode = AnnotationMode.ENABLE,\n transform = null,\n background = null,\n optionalContentConfigPromise = null,\n annotationCanvasMap = null,\n pageColors = null,\n printAnnotationStorage = null,\n }) {\n this._stats?.time(\"Overall\");\n\n const intentArgs = this._transport.getRenderingIntent(\n intent,\n annotationMode,\n printAnnotationStorage\n );\n const { renderingIntent, cacheKey } = intentArgs;\n // If there was a pending destroy, cancel it so no cleanup happens during\n // this call to render...\n this.#pendingCleanup = false;\n // ... and ensure that a delayed cleanup is always aborted.\n this.#abortDelayedCleanup();\n\n optionalContentConfigPromise ||=\n this._transport.getOptionalContentConfig(renderingIntent);\n\n let intentState = this._intentStates.get(cacheKey);\n if (!intentState) {\n intentState = Object.create(null);\n this._intentStates.set(cacheKey, intentState);\n }\n\n // Ensure that a pending `streamReader` cancel timeout is always aborted.\n if (intentState.streamReaderCancelTimeout) {\n clearTimeout(intentState.streamReaderCancelTimeout);\n intentState.streamReaderCancelTimeout = null;\n }\n\n const intentPrint = !!(renderingIntent & RenderingIntentFlag.PRINT);\n\n // If there's no displayReadyCapability yet, then the operatorList\n // was never requested before. Make the request and create the promise.\n if (!intentState.displayReadyCapability) {\n intentState.displayReadyCapability = Promise.withResolvers();\n intentState.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false,\n separateAnnots: null,\n };\n\n this._stats?.time(\"Page Request\");\n this._pumpOperatorList(intentArgs);\n }\n\n const complete = error => {\n intentState.renderTasks.delete(internalRenderTask);\n\n // Attempt to reduce memory usage during *printing*, by always running\n // cleanup immediately once rendering has finished.\n if (this._maybeCleanupAfterRender || intentPrint) {\n this.#pendingCleanup = true;\n }\n this.#tryCleanup(/* delayed = */ !intentPrint);\n\n if (error) {\n internalRenderTask.capability.reject(error);\n\n this._abortOperatorList({\n intentState,\n reason: error instanceof Error ? error : new Error(error),\n });\n } else {\n internalRenderTask.capability.resolve();\n }\n\n if (this._stats) {\n this._stats.timeEnd(\"Rendering\");\n this._stats.timeEnd(\"Overall\");\n\n if (globalThis.Stats?.enabled) {\n globalThis.Stats.add(this.pageNumber, this._stats);\n }\n }\n };\n\n const internalRenderTask = new InternalRenderTask({\n callback: complete,\n // Only include the required properties, and *not* the entire object.\n params: {\n canvasContext,\n viewport,\n transform,\n background,\n },\n objs: this.objs,\n commonObjs: this.commonObjs,\n annotationCanvasMap,\n operatorList: intentState.operatorList,\n pageIndex: this._pageIndex,\n canvasFactory: this._transport.canvasFactory,\n filterFactory: this._transport.filterFactory,\n useRequestAnimationFrame: !intentPrint,\n pdfBug: this._pdfBug,\n pageColors,\n });\n\n (intentState.renderTasks ||= new Set()).add(internalRenderTask);\n const renderTask = internalRenderTask.task;\n\n Promise.all([\n intentState.displayReadyCapability.promise,\n optionalContentConfigPromise,\n ])\n .then(([transparency, optionalContentConfig]) => {\n if (this.destroyed) {\n complete();\n return;\n }\n this._stats?.time(\"Rendering\");\n\n if (!(optionalContentConfig.renderingIntent & renderingIntent)) {\n throw new Error(\n \"Must use the same `intent`-argument when calling the `PDFPageProxy.render` \" +\n \"and `PDFDocumentProxy.getOptionalContentConfig` methods.\"\n );\n }\n internalRenderTask.initializeGraphics({\n transparency,\n optionalContentConfig,\n });\n internalRenderTask.operatorListChanged();\n })\n .catch(complete);\n\n return renderTask;\n }\n\n /**\n * @param {GetOperatorListParameters} params - Page getOperatorList\n * parameters.\n * @returns {Promise} A promise resolved with an\n * {@link PDFOperatorList} object that represents the page's operator list.\n */\n getOperatorList({\n intent = \"display\",\n annotationMode = AnnotationMode.ENABLE,\n printAnnotationStorage = null,\n } = {}) {\n if (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"GENERIC\")) {\n throw new Error(\"Not implemented: getOperatorList\");\n }\n function operatorListChanged() {\n if (intentState.operatorList.lastChunk) {\n intentState.opListReadCapability.resolve(intentState.operatorList);\n\n intentState.renderTasks.delete(opListTask);\n }\n }\n\n const intentArgs = this._transport.getRenderingIntent(\n intent,\n annotationMode,\n printAnnotationStorage,\n /* isOpList = */ true\n );\n let intentState = this._intentStates.get(intentArgs.cacheKey);\n if (!intentState) {\n intentState = Object.create(null);\n this._intentStates.set(intentArgs.cacheKey, intentState);\n }\n let opListTask;\n\n if (!intentState.opListReadCapability) {\n opListTask = Object.create(null);\n opListTask.operatorListChanged = operatorListChanged;\n intentState.opListReadCapability = Promise.withResolvers();\n (intentState.renderTasks ||= new Set()).add(opListTask);\n intentState.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false,\n separateAnnots: null,\n };\n\n this._stats?.time(\"Page Request\");\n this._pumpOperatorList(intentArgs);\n }\n return intentState.opListReadCapability.promise;\n }\n\n /**\n * NOTE: All occurrences of whitespace will be replaced by\n * standard spaces (0x20).\n *\n * @param {getTextContentParameters} params - getTextContent parameters.\n * @returns {ReadableStream} Stream for reading text content chunks.\n */\n streamTextContent({\n includeMarkedContent = false,\n disableNormalization = false,\n } = {}) {\n const TEXT_CONTENT_CHUNK_SIZE = 100;\n\n return this._transport.messageHandler.sendWithStream(\n \"GetTextContent\",\n {\n pageIndex: this._pageIndex,\n includeMarkedContent: includeMarkedContent === true,\n disableNormalization: disableNormalization === true,\n },\n {\n highWaterMark: TEXT_CONTENT_CHUNK_SIZE,\n size(textContent) {\n return textContent.items.length;\n },\n }\n );\n }\n\n /**\n * NOTE: All occurrences of whitespace will be replaced by\n * standard spaces (0x20).\n *\n * @param {getTextContentParameters} params - getTextContent parameters.\n * @returns {Promise} A promise that is resolved with a\n * {@link TextContent} object that represents the page's text content.\n */\n getTextContent(params = {}) {\n if (this._transport._htmlForXfa) {\n // TODO: We need to revisit this once the XFA foreground patch lands and\n // only do this for non-foreground XFA.\n return this.getXfa().then(xfa => XfaText.textContent(xfa));\n }\n const readableStream = this.streamTextContent(params);\n\n return new Promise(function (resolve, reject) {\n function pump() {\n reader.read().then(function ({ value, done }) {\n if (done) {\n resolve(textContent);\n return;\n }\n textContent.lang ??= value.lang;\n Object.assign(textContent.styles, value.styles);\n textContent.items.push(...value.items);\n pump();\n }, reject);\n }\n\n const reader = readableStream.getReader();\n const textContent = {\n items: [],\n styles: Object.create(null),\n lang: null,\n };\n pump();\n });\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {@link StructTreeNode} object that represents the page's structure tree,\n * or `null` when no structure tree is present for the current page.\n */\n getStructTree() {\n return this._transport.getStructTree(this._pageIndex);\n }\n\n /**\n * Destroys the page object.\n * @private\n */\n _destroy() {\n this.destroyed = true;\n\n const waitOn = [];\n for (const intentState of this._intentStates.values()) {\n this._abortOperatorList({\n intentState,\n reason: new Error(\"Page was destroyed.\"),\n force: true,\n });\n\n if (intentState.opListReadCapability) {\n // Avoid errors below, since the renderTasks are just stubs.\n continue;\n }\n for (const internalRenderTask of intentState.renderTasks) {\n waitOn.push(internalRenderTask.completed);\n internalRenderTask.cancel();\n }\n }\n this.objs.clear();\n this.#pendingCleanup = false;\n this.#abortDelayedCleanup();\n\n return Promise.all(waitOn);\n }\n\n /**\n * Cleans up resources allocated by the page.\n *\n * @param {boolean} [resetStats] - Reset page stats, if enabled.\n * The default value is `false`.\n * @returns {boolean} Indicates if clean-up was successfully run.\n */\n cleanup(resetStats = false) {\n this.#pendingCleanup = true;\n const success = this.#tryCleanup(/* delayed = */ false);\n\n if (resetStats && success) {\n this._stats &&= new StatTimer();\n }\n return success;\n }\n\n /**\n * Attempts to clean up if rendering is in a state where that's possible.\n * @param {boolean} [delayed] - Delay the cleanup, to e.g. improve zooming\n * performance in documents with large images.\n * The default value is `false`.\n * @returns {boolean} Indicates if clean-up was successfully run.\n */\n #tryCleanup(delayed = false) {\n this.#abortDelayedCleanup();\n\n if (!this.#pendingCleanup || this.destroyed) {\n return false;\n }\n if (delayed) {\n this.#delayedCleanupTimeout = setTimeout(() => {\n this.#delayedCleanupTimeout = null;\n this.#tryCleanup(/* delayed = */ false);\n }, DELAYED_CLEANUP_TIMEOUT);\n\n return false;\n }\n for (const { renderTasks, operatorList } of this._intentStates.values()) {\n if (renderTasks.size > 0 || !operatorList.lastChunk) {\n return false;\n }\n }\n this._intentStates.clear();\n this.objs.clear();\n this.#pendingCleanup = false;\n return true;\n }\n\n #abortDelayedCleanup() {\n if (this.#delayedCleanupTimeout) {\n clearTimeout(this.#delayedCleanupTimeout);\n this.#delayedCleanupTimeout = null;\n }\n }\n\n /**\n * @private\n */\n _startRenderPage(transparency, cacheKey) {\n const intentState = this._intentStates.get(cacheKey);\n if (!intentState) {\n return; // Rendering was cancelled.\n }\n this._stats?.timeEnd(\"Page Request\");\n\n // TODO Refactor RenderPageRequest to separate rendering\n // and operator list logic\n intentState.displayReadyCapability?.resolve(transparency);\n }\n\n /**\n * @private\n */\n _renderPageChunk(operatorListChunk, intentState) {\n // Add the new chunk to the current operator list.\n for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {\n intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);\n intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);\n }\n intentState.operatorList.lastChunk = operatorListChunk.lastChunk;\n intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots;\n\n // Notify all the rendering tasks there are more operators to be consumed.\n for (const internalRenderTask of intentState.renderTasks) {\n internalRenderTask.operatorListChanged();\n }\n\n if (operatorListChunk.lastChunk) {\n this.#tryCleanup(/* delayed = */ true);\n }\n }\n\n /**\n * @private\n */\n _pumpOperatorList({\n renderingIntent,\n cacheKey,\n annotationStorageSerializable,\n }) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n Number.isInteger(renderingIntent) && renderingIntent > 0,\n '_pumpOperatorList: Expected valid \"renderingIntent\" argument.'\n );\n }\n const { map, transfer } = annotationStorageSerializable;\n\n const readableStream = this._transport.messageHandler.sendWithStream(\n \"GetOperatorList\",\n {\n pageIndex: this._pageIndex,\n intent: renderingIntent,\n cacheKey,\n annotationStorage: map,\n },\n transfer\n );\n const reader = readableStream.getReader();\n\n const intentState = this._intentStates.get(cacheKey);\n intentState.streamReader = reader;\n\n const pump = () => {\n reader.read().then(\n ({ value, done }) => {\n if (done) {\n intentState.streamReader = null;\n return;\n }\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n this._renderPageChunk(value, intentState);\n pump();\n },\n reason => {\n intentState.streamReader = null;\n\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n if (intentState.operatorList) {\n // Mark operator list as complete.\n intentState.operatorList.lastChunk = true;\n\n for (const internalRenderTask of intentState.renderTasks) {\n internalRenderTask.operatorListChanged();\n }\n this.#tryCleanup(/* delayed = */ true);\n }\n\n if (intentState.displayReadyCapability) {\n intentState.displayReadyCapability.reject(reason);\n } else if (intentState.opListReadCapability) {\n intentState.opListReadCapability.reject(reason);\n } else {\n throw reason;\n }\n }\n );\n };\n pump();\n }\n\n /**\n * @private\n */\n _abortOperatorList({ intentState, reason, force = false }) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n reason instanceof Error,\n '_abortOperatorList: Expected valid \"reason\" argument.'\n );\n }\n\n if (!intentState.streamReader) {\n return;\n }\n // Ensure that a pending `streamReader` cancel timeout is always aborted.\n if (intentState.streamReaderCancelTimeout) {\n clearTimeout(intentState.streamReaderCancelTimeout);\n intentState.streamReaderCancelTimeout = null;\n }\n\n if (!force) {\n // Ensure that an Error occurring in *only* one `InternalRenderTask`, e.g.\n // multiple render() calls on the same canvas, won't break all rendering.\n if (intentState.renderTasks.size > 0) {\n return;\n }\n // Don't immediately abort parsing on the worker-thread when rendering is\n // cancelled, since that will unnecessarily delay re-rendering when (for\n // partially parsed pages) e.g. zooming/rotation occurs in the viewer.\n if (reason instanceof RenderingCancelledException) {\n let delay = RENDERING_CANCELLED_TIMEOUT;\n if (reason.extraDelay > 0 && reason.extraDelay < /* ms = */ 1000) {\n // Above, we prevent the total delay from becoming arbitrarily large.\n delay += reason.extraDelay;\n }\n\n intentState.streamReaderCancelTimeout = setTimeout(() => {\n intentState.streamReaderCancelTimeout = null;\n this._abortOperatorList({ intentState, reason, force: true });\n }, delay);\n return;\n }\n }\n intentState.streamReader\n .cancel(new AbortException(reason.message))\n .catch(() => {\n // Avoid \"Uncaught promise\" messages in the console.\n });\n intentState.streamReader = null;\n\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n // Remove the current `intentState`, since a cancelled `getOperatorList`\n // call on the worker-thread cannot be re-started...\n for (const [curCacheKey, curIntentState] of this._intentStates) {\n if (curIntentState === intentState) {\n this._intentStates.delete(curCacheKey);\n break;\n }\n }\n // ... and force clean-up to ensure that any old state is always removed.\n this.cleanup();\n }\n\n /**\n * @type {StatTimer | null} Returns page stats, if enabled; returns `null`\n * otherwise.\n */\n get stats() {\n return this._stats;\n }\n}\n\nclass LoopbackPort {\n #listeners = new Set();\n\n #deferred = Promise.resolve();\n\n postMessage(obj, transfer) {\n const event = {\n data: structuredClone(obj, transfer ? { transfer } : null),\n };\n\n this.#deferred.then(() => {\n for (const listener of this.#listeners) {\n listener.call(this, event);\n }\n });\n }\n\n addEventListener(name, listener) {\n this.#listeners.add(listener);\n }\n\n removeEventListener(name, listener) {\n this.#listeners.delete(listener);\n }\n\n terminate() {\n this.#listeners.clear();\n }\n}\n\n/**\n * @typedef {Object} PDFWorkerParameters\n * @property {string} [name] - The name of the worker.\n * @property {Worker} [port] - The `workerPort` object.\n * @property {number} [verbosity] - Controls the logging level;\n * the constants from {@link VerbosityLevel} should be used.\n */\n\nconst PDFWorkerUtil = {\n isWorkerDisabled: false,\n fakeWorkerId: 0,\n};\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n if (isNodeJS) {\n // Workers aren't supported in Node.js, force-disabling them there.\n PDFWorkerUtil.isWorkerDisabled = true;\n\n GlobalWorkerOptions.workerSrc ||= PDFJSDev.test(\"LIB\")\n ? \"../pdf.worker.js\"\n : \"./pdf.worker.mjs\";\n }\n\n // Check if URLs have the same origin. For non-HTTP based URLs, returns false.\n PDFWorkerUtil.isSameOrigin = function (baseUrl, otherUrl) {\n let base;\n try {\n base = new URL(baseUrl);\n if (!base.origin || base.origin === \"null\") {\n return false; // non-HTTP url\n }\n } catch {\n return false;\n }\n\n const other = new URL(otherUrl, base);\n return base.origin === other.origin;\n };\n\n PDFWorkerUtil.createCDNWrapper = function (url) {\n // We will rely on blob URL's property to specify origin.\n // We want this function to fail in case if createObjectURL or Blob do not\n // exist or fail for some reason -- our Worker creation will fail anyway.\n const wrapper = `await import(\"${url}\");`;\n return URL.createObjectURL(\n new Blob([wrapper], { type: \"text/javascript\" })\n );\n };\n}\n\n/**\n * PDF.js web worker abstraction that controls the instantiation of PDF\n * documents. Message handlers are used to pass information from the main\n * thread to the worker thread and vice versa. If the creation of a web\n * worker is not possible, a \"fake\" worker will be used instead.\n *\n * @param {PDFWorkerParameters} params - The worker initialization parameters.\n */\nclass PDFWorker {\n static #workerPorts;\n\n constructor({\n name = null,\n port = null,\n verbosity = getVerbosityLevel(),\n } = {}) {\n this.name = name;\n this.destroyed = false;\n this.verbosity = verbosity;\n\n this._readyCapability = Promise.withResolvers();\n this._port = null;\n this._webWorker = null;\n this._messageHandler = null;\n\n if (\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) &&\n port\n ) {\n if (PDFWorker.#workerPorts?.has(port)) {\n throw new Error(\"Cannot use more than one PDFWorker per port.\");\n }\n (PDFWorker.#workerPorts ||= new WeakMap()).set(port, this);\n this._initializeFromPort(port);\n return;\n }\n this._initialize();\n }\n\n /**\n * Promise for worker initialization completion.\n * @type {Promise}\n */\n get promise() {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS\n ) {\n // Ensure that all Node.js packages/polyfills have loaded.\n return Promise.all([NodePackages.promise, this._readyCapability.promise]);\n }\n return this._readyCapability.promise;\n }\n\n /**\n * The current `workerPort`, when it exists.\n * @type {Worker}\n */\n get port() {\n return this._port;\n }\n\n /**\n * The current MessageHandler-instance.\n * @type {MessageHandler}\n */\n get messageHandler() {\n return this._messageHandler;\n }\n\n _initializeFromPort(port) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: _initializeFromPort\");\n }\n this._port = port;\n this._messageHandler = new MessageHandler(\"main\", \"worker\", port);\n this._messageHandler.on(\"ready\", function () {\n // Ignoring \"ready\" event -- MessageHandler should already be initialized\n // and ready to accept messages.\n });\n this._readyCapability.resolve();\n // Send global setting, e.g. verbosity level.\n this._messageHandler.send(\"configure\", {\n verbosity: this.verbosity,\n });\n }\n\n _initialize() {\n // If worker support isn't disabled explicit and the browser has worker\n // support, create a new web worker and test if it/the browser fulfills\n // all requirements to run parts of pdf.js in a web worker.\n // Right now, the requirement is, that an Uint8Array is still an\n // Uint8Array as it arrives on the worker. (Chrome added this with v.15.)\n if (\n !PDFWorkerUtil.isWorkerDisabled &&\n !PDFWorker.#mainThreadWorkerMessageHandler\n ) {\n let { workerSrc } = PDFWorker;\n\n try {\n // Wraps workerSrc path into blob URL, if the former does not belong\n // to the same origin.\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n !PDFWorkerUtil.isSameOrigin(window.location.href, workerSrc)\n ) {\n workerSrc = PDFWorkerUtil.createCDNWrapper(\n new URL(workerSrc, window.location).href\n );\n }\n\n const worker = new Worker(workerSrc, { type: \"module\" });\n const messageHandler = new MessageHandler(\"main\", \"worker\", worker);\n const terminateEarly = () => {\n worker.removeEventListener(\"error\", onWorkerError);\n messageHandler.destroy();\n worker.terminate();\n if (this.destroyed) {\n this._readyCapability.reject(new Error(\"Worker was destroyed\"));\n } else {\n // Fall back to fake worker if the termination is caused by an\n // error (e.g. NetworkError / SecurityError).\n this._setupFakeWorker();\n }\n };\n\n const onWorkerError = () => {\n if (!this._webWorker) {\n // Worker failed to initialize due to an error. Clean up and fall\n // back to the fake worker.\n terminateEarly();\n }\n };\n worker.addEventListener(\"error\", onWorkerError);\n\n messageHandler.on(\"test\", data => {\n worker.removeEventListener(\"error\", onWorkerError);\n if (this.destroyed) {\n terminateEarly();\n return; // worker was destroyed\n }\n if (data) {\n this._messageHandler = messageHandler;\n this._port = worker;\n this._webWorker = worker;\n\n this._readyCapability.resolve();\n // Send global setting, e.g. verbosity level.\n messageHandler.send(\"configure\", {\n verbosity: this.verbosity,\n });\n } else {\n this._setupFakeWorker();\n messageHandler.destroy();\n worker.terminate();\n }\n });\n\n messageHandler.on(\"ready\", data => {\n worker.removeEventListener(\"error\", onWorkerError);\n if (this.destroyed) {\n terminateEarly();\n return; // worker was destroyed\n }\n try {\n sendTest();\n } catch {\n // We need fallback to a faked worker.\n this._setupFakeWorker();\n }\n });\n\n const sendTest = () => {\n const testObj = new Uint8Array();\n // Ensure that we can use `postMessage` transfers.\n messageHandler.send(\"test\", testObj, [testObj.buffer]);\n };\n\n // It might take time for the worker to initialize. We will try to send\n // the \"test\" message immediately, and once the \"ready\" message arrives.\n // The worker shall process only the first received \"test\" message.\n sendTest();\n return;\n } catch {\n info(\"The worker has been disabled.\");\n }\n }\n // Either workers are disabled, not supported or have thrown an exception.\n // Thus, we fallback to a faked worker.\n this._setupFakeWorker();\n }\n\n _setupFakeWorker() {\n if (!PDFWorkerUtil.isWorkerDisabled) {\n warn(\"Setting up fake worker.\");\n PDFWorkerUtil.isWorkerDisabled = true;\n }\n\n PDFWorker._setupFakeWorkerGlobal\n .then(WorkerMessageHandler => {\n if (this.destroyed) {\n this._readyCapability.reject(new Error(\"Worker was destroyed\"));\n return;\n }\n const port = new LoopbackPort();\n this._port = port;\n\n // All fake workers use the same port, making id unique.\n const id = `fake${PDFWorkerUtil.fakeWorkerId++}`;\n\n // If the main thread is our worker, setup the handling for the\n // messages -- the main thread sends to it self.\n const workerHandler = new MessageHandler(id + \"_worker\", id, port);\n WorkerMessageHandler.setup(workerHandler, port);\n\n const messageHandler = new MessageHandler(id, id + \"_worker\", port);\n this._messageHandler = messageHandler;\n this._readyCapability.resolve();\n // Send global setting, e.g. verbosity level.\n messageHandler.send(\"configure\", {\n verbosity: this.verbosity,\n });\n })\n .catch(reason => {\n this._readyCapability.reject(\n new Error(`Setting up fake worker failed: \"${reason.message}\".`)\n );\n });\n }\n\n /**\n * Destroys the worker instance.\n */\n destroy() {\n this.destroyed = true;\n if (this._webWorker) {\n // We need to terminate only web worker created resource.\n this._webWorker.terminate();\n this._webWorker = null;\n }\n PDFWorker.#workerPorts?.delete(this._port);\n this._port = null;\n if (this._messageHandler) {\n this._messageHandler.destroy();\n this._messageHandler = null;\n }\n }\n\n /**\n * @param {PDFWorkerParameters} params - The worker initialization parameters.\n */\n static fromPort(params) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: fromPort\");\n }\n if (!params?.port) {\n throw new Error(\"PDFWorker.fromPort - invalid method signature.\");\n }\n const cachedPort = this.#workerPorts?.get(params.port);\n if (cachedPort) {\n if (cachedPort._pendingDestroy) {\n throw new Error(\n \"PDFWorker.fromPort - the worker is being destroyed.\\n\" +\n \"Please remember to await `PDFDocumentLoadingTask.destroy()`-calls.\"\n );\n }\n return cachedPort;\n }\n return new PDFWorker(params);\n }\n\n /**\n * The current `workerSrc`, when it exists.\n * @type {string}\n */\n static get workerSrc() {\n if (GlobalWorkerOptions.workerSrc) {\n return GlobalWorkerOptions.workerSrc;\n }\n throw new Error('No \"GlobalWorkerOptions.workerSrc\" specified.');\n }\n\n static get #mainThreadWorkerMessageHandler() {\n try {\n return globalThis.pdfjsWorker?.WorkerMessageHandler || null;\n } catch {\n return null;\n }\n }\n\n // Loads worker code into the main-thread.\n static get _setupFakeWorkerGlobal() {\n const loader = async () => {\n if (this.#mainThreadWorkerMessageHandler) {\n // The worker was already loaded using e.g. a `