diff --git a/dev/viewer/viewer.html.diff b/dev/viewer/viewer.html.diff index db94ace7..c41f7e46 100644 --- a/dev/viewer/viewer.html.diff +++ b/dev/viewer/viewer.html.diff @@ -1,5 +1,5 @@ ---- ../tmp/pdfjs-3.10/web/viewer.html 2023-08-27 17:53:36.000000000 +0900 -+++ viewer/viewer.html 2023-09-02 10:03:30.000000000 +0900 +--- ../tmp/pdfjs-3.11/web/viewer.html 2023-09-24 19:37:10.000000000 +0900 ++++ viewer/viewer.html 2023-09-28 07:53:48.000000000 +0900 @@ -25,18 +25,25 @@ diff --git a/dev/viewer/viewer.js.diff b/dev/viewer/viewer.js.diff index be5dd30f..83a021a9 100644 --- a/dev/viewer/viewer.js.diff +++ b/dev/viewer/viewer.js.diff @@ -1,5 +1,5 @@ ---- ../tmp/pdfjs-3.10/web/viewer.js 2023-08-27 17:53:52.000000000 +0900 -+++ viewer/viewer.js 2023-09-02 10:04:39.000000000 +0900 +--- ../tmp/pdfjs-3.11/web/viewer.js 2023-09-24 19:37:24.000000000 +0900 ++++ viewer/viewer.js 2023-09-28 07:56:46.000000000 +0900 @@ -43,10 +43,10 @@ exports.GenericCom = GenericCom; class GenericPreferences extends _preferences.BasePreferences { @@ -13,7 +13,7 @@ } } class GenericExternalServices extends _app.DefaultExternalServices { -@@ -680,7 +680,7 @@ +@@ -683,7 +683,7 @@ title = url; } } @@ -22,7 +22,7 @@ }, setTitle(title = this._title) { this._title = title; -@@ -4889,7 +4889,7 @@ +@@ -5155,7 +5155,7 @@ }; exports.FindState = FindState; const FIND_TIMEOUT = 250; @@ -31,7 +31,7 @@ const MATCH_SCROLL_OFFSET_LEFT = -400; const CHARACTERS_TO_NORMALIZE = { "\u2010": "-", -@@ -7489,7 +7489,7 @@ +@@ -7755,7 +7755,7 @@ this.#dispatchEvent(); return; } @@ -40,7 +40,7 @@ if (!this.isInitialEventDispatched) { this.#dispatchEvent(); } -@@ -8387,7 +8387,7 @@ +@@ -8655,7 +8655,7 @@ this.#annotationEditorMode = options.annotationEditorMode ?? _pdfjsLib.AnnotationEditorType.NONE; this.imageResourcesPath = options.imageResourcesPath || ""; this.enablePrintAutoRotate = options.enablePrintAutoRotate || false; @@ -49,7 +49,7 @@ if (options.useOnlyCssZoom) { console.error("useOnlyCssZoom was removed, please use `maxCanvasPixels = 0` instead."); options.maxCanvasPixels = 0; -@@ -12232,10 +12232,10 @@ +@@ -12516,10 +12516,10 @@ } async _writeToStorage() { const databaseStr = JSON.stringify(this.database); @@ -62,7 +62,7 @@ } async set(name, val) { await this._initializedPromise; -@@ -13081,7 +13081,7 @@ +@@ -13365,7 +13365,7 @@ function getL10nData(key, args, fallback) { var data = gL10nData[key]; if (!data) { @@ -71,7 +71,7 @@ if (!fallback) { return null; } -@@ -13517,6 +13517,9 @@ +@@ -13801,6 +13801,9 @@ } window.addEventListener("keydown", function (event) { if (event.keyCode === 80 && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) { @@ -81,7 +81,7 @@ window.print(); event.preventDefault(); event.stopImmediatePropagation(); -@@ -13789,7 +13792,7 @@ +@@ -14081,7 +14084,7 @@ try { parent.document.dispatchEvent(event); } catch (ex) { diff --git a/package-lock.json b/package-lock.json index 3c0658f7..9cf3910a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "latex-utensils": "6.2.0", "mathjax-full": "3.2.2", "micromatch": "4.0.5", - "pdfjs-dist": "3.10.111", + "pdfjs-dist": "3.11.174", "workerpool": "6.5.0", "ws": "8.14.2" }, @@ -5643,9 +5643,9 @@ } }, "node_modules/pdfjs-dist": { - "version": "3.10.111", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-3.10.111.tgz", - "integrity": "sha512-+SXXGN/3YTNQSK5Ae7EyqQuR+4IAsNunJq/Us5ByOkRJ45qBXXOwkiWi3RIDU+CyF+ak5eSWXl2FQW2PKBrsRA==", + "version": "3.11.174", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-3.11.174.tgz", + "integrity": "sha512-TdTZPf1trZ8/UFu5Cx/GXB7GZM30LT+wWUNfsi6Bq8ePLnb+woNKtDymI2mxZYBpMbonNFqKmiz684DIfnd8dA==", "engines": { "node": ">=18" }, diff --git a/package.json b/package.json index ecd414e8..eb87e518 100644 --- a/package.json +++ b/package.json @@ -1708,7 +1708,7 @@ "latex-utensils": "6.2.0", "mathjax-full": "3.2.2", "micromatch": "4.0.5", - "pdfjs-dist": "3.10.111", + "pdfjs-dist": "3.11.174", "workerpool": "6.5.0", "ws": "8.14.2" }, diff --git a/viewer/images/altText_add.svg b/viewer/images/altText_add.svg new file mode 100644 index 00000000..3451b536 --- /dev/null +++ b/viewer/images/altText_add.svg @@ -0,0 +1,3 @@ + + + diff --git a/viewer/images/altText_done.svg b/viewer/images/altText_done.svg new file mode 100644 index 00000000..f54924eb --- /dev/null +++ b/viewer/images/altText_done.svg @@ -0,0 +1,3 @@ + + + diff --git a/viewer/locale/cs/viewer.properties b/viewer/locale/cs/viewer.properties index b7521dd2..49f88d7d 100644 --- a/viewer/locale/cs/viewer.properties +++ b/viewer/locale/cs/viewer.properties @@ -246,9 +246,6 @@ editor_free_text2_label=Text editor_ink2.title=Kreslení editor_ink2_label=Kreslení -editor_stamp.title=Přidat obrázek -editor_stamp_label=Přidat obrázek - editor_stamp1.title=Přidání či úprava obrázků editor_stamp1_label=Přidání či úprava obrázků @@ -268,3 +265,20 @@ editor_stamp_add_image.title=Přidat obrázek 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/viewer/locale/dsb/viewer.properties b/viewer/locale/dsb/viewer.properties index e4e51d1e..4094e149 100644 --- a/viewer/locale/dsb/viewer.properties +++ b/viewer/locale/dsb/viewer.properties @@ -246,9 +246,6 @@ editor_free_text2_label=Tekst editor_ink2.title=Kresliś editor_ink2_label=Kresliś -editor_stamp.title=Wobraz pśidaś -editor_stamp_label=Wobraz pśidaś - editor_stamp1.title=Wobraze pśidaś abo wobźěłaś editor_stamp1_label=Wobraze pśidaś abo wobźěłaś @@ -268,3 +265,20 @@ editor_stamp_add_image.title=Wobraz pśidaś 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/viewer/locale/el/viewer.properties b/viewer/locale/el/viewer.properties index 47b1f8e2..e28ab7f2 100644 --- a/viewer/locale/el/viewer.properties +++ b/viewer/locale/el/viewer.properties @@ -249,6 +249,9 @@ editor_ink2_label=Σχέδιο editor_stamp.title=Προσθήκη εικόνας editor_stamp_label=Προσθήκη εικόνας +editor_stamp1.title=Προσθήκη ή επεξεργασία εικόνων +editor_stamp1_label=Προσθήκη ή επεξεργασία εικόνων + free_text2_default_content=Ξεκινήστε να πληκτρολογείτε… # Editor Parameters @@ -258,6 +261,9 @@ 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=Επεξεργασία σχεδίων diff --git a/viewer/locale/en-CA/viewer.properties b/viewer/locale/en-CA/viewer.properties index d3868489..8e10fcfb 100644 --- a/viewer/locale/en-CA/viewer.properties +++ b/viewer/locale/en-CA/viewer.properties @@ -41,9 +41,17 @@ 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 @@ -212,7 +220,6 @@ 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 @@ -239,6 +246,12 @@ 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 @@ -248,6 +261,9 @@ 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 diff --git a/viewer/locale/en-GB/viewer.properties b/viewer/locale/en-GB/viewer.properties index 63fcec7a..50f50f66 100644 --- a/viewer/locale/en-GB/viewer.properties +++ b/viewer/locale/en-GB/viewer.properties @@ -246,9 +246,6 @@ 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 @@ -268,3 +265,20 @@ editor_stamp_add_image.title=Add image 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/viewer/locale/en-US/viewer.properties b/viewer/locale/en-US/viewer.properties index db404c89..b0369cc2 100644 --- a/viewer/locale/en-US/viewer.properties +++ b/viewer/locale/en-US/viewer.properties @@ -263,3 +263,20 @@ editor_stamp_add_image.title=Add image 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/viewer/locale/es-AR/viewer.properties b/viewer/locale/es-AR/viewer.properties index 9014658d..63bb5389 100644 --- a/viewer/locale/es-AR/viewer.properties +++ b/viewer/locale/es-AR/viewer.properties @@ -246,9 +246,6 @@ editor_free_text2_label=Texto editor_ink2.title=Dibujar editor_ink2_label=Dibujar -editor_stamp.title=Agregar una imagen -editor_stamp_label=Agregar una imagen - editor_stamp1.title=Agregar o editar imágenes editor_stamp1_label=Agregar o editar imágenes @@ -268,3 +265,20 @@ editor_stamp_add_image.title=Agregar una imagen 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/viewer/locale/es-CL/viewer.properties b/viewer/locale/es-CL/viewer.properties index c8d20e04..b7996bc9 100644 --- a/viewer/locale/es-CL/viewer.properties +++ b/viewer/locale/es-CL/viewer.properties @@ -246,9 +246,6 @@ 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 @@ -268,3 +265,20 @@ editor_stamp_add_image.title=Añadir imagen 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/viewer/locale/es-ES/viewer.properties b/viewer/locale/es-ES/viewer.properties index 119cdbc4..7435385b 100644 --- a/viewer/locale/es-ES/viewer.properties +++ b/viewer/locale/es-ES/viewer.properties @@ -41,6 +41,11 @@ 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. @@ -244,6 +249,9 @@ 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 @@ -253,6 +261,9 @@ 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 diff --git a/viewer/locale/eu/viewer.properties b/viewer/locale/eu/viewer.properties index 5e2cbe39..45ecd663 100644 --- a/viewer/locale/eu/viewer.properties +++ b/viewer/locale/eu/viewer.properties @@ -246,8 +246,8 @@ editor_free_text2_label=Testua editor_ink2.title=Marrazkia editor_ink2_label=Marrazkia -editor_stamp.title=Gehitu irudia -editor_stamp_label=Gehitu irudia +editor_stamp1.title=Gehitu edo editatu irudiak +editor_stamp1_label=Gehitu edo editatu irudiak free_text2_default_content=Hasi idazten… @@ -258,7 +258,27 @@ 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/viewer/locale/fi/viewer.properties b/viewer/locale/fi/viewer.properties index 84813f36..e03e6a7c 100644 --- a/viewer/locale/fi/viewer.properties +++ b/viewer/locale/fi/viewer.properties @@ -249,6 +249,9 @@ 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 @@ -258,6 +261,9 @@ 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 diff --git a/viewer/locale/fur/viewer.properties b/viewer/locale/fur/viewer.properties index 4e0f3125..9bc87cd5 100644 --- a/viewer/locale/fur/viewer.properties +++ b/viewer/locale/fur/viewer.properties @@ -249,6 +249,9 @@ 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 @@ -258,6 +261,9 @@ 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 diff --git a/viewer/locale/gl/viewer.properties b/viewer/locale/gl/viewer.properties index ddfd2030..508ea5e4 100644 --- a/viewer/locale/gl/viewer.properties +++ b/viewer/locale/gl/viewer.properties @@ -41,6 +41,11 @@ 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. @@ -241,8 +246,8 @@ editor_free_text2_label=Texto editor_ink2.title=Debuxo editor_ink2_label=Debuxo -editor_stamp.title=Engadir unha imaxe -editor_stamp_label=Engadir unha imaxe +editor_stamp1.title=Engadir ou editar imaxes +editor_stamp1_label=Engadir ou editar imaxes free_text2_default_content=Comezar a teclear… @@ -253,6 +258,9 @@ 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 diff --git a/viewer/locale/gn/viewer.properties b/viewer/locale/gn/viewer.properties index e21b6b39..0ba9d36c 100644 --- a/viewer/locale/gn/viewer.properties +++ b/viewer/locale/gn/viewer.properties @@ -49,13 +49,13 @@ 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 tembipuru’ípe +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 tembipuru’ípe +open_in_app_label=Embojuruja tembiporu’ípe # Secondary toolbar and context menu -tools.title=Tembipuru -tools_label=Tembipuru +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 @@ -65,18 +65,18 @@ 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 rembipuru -cursor_text_select_tool_label=Moñe’ẽrã jeporavo rembipuru -cursor_hand_tool.title=Tembipuru po pegua myandy -cursor_hand_tool_label=Tembipuru po pegua +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=Eipuru kuatiarogue jeku’e +scroll_page.title=Eiporu kuatiarogue jeku’e scroll_page_label=Kuatiarogue jeku’e -scroll_vertical.title=Eipuru jeku’e ykeguáva +scroll_vertical.title=Eiporu jeku’e ykeguáva scroll_vertical_label=Jeku’e ykeguáva -scroll_horizontal.title=Eipuru jeku’e yvate gotyo +scroll_horizontal.title=Eiporu jeku’e yvate gotyo scroll_horizontal_label=Jeku’e yvate gotyo -scroll_wrapped.title=Eipuru jeku’e mbohyrupyre +scroll_wrapped.title=Eiporu jeku’e mbohyrupyre scroll_wrapped_label=Jeku’e mbohyrupyre spread_none.title=Ani ejuaju spreads kuatiarogue ndive @@ -146,7 +146,7 @@ print_progress_close=Heja 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’epuru) +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 @@ -154,8 +154,8 @@ layers.title=Ehechauka ñuãha (eikutu jo’a emomba’apo hag̃ua opaite ñuãh layers_label=Ñuãha thumbs.title=Mba’emirĩ jehechauka thumbs_label=Mba’emirĩ -current_outline_item.title=Eheka mba’epuru ag̃aguaitéva -current_outline_item_label=Mba’epuru ag̃aguaitéva +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 @@ -238,7 +238,7 @@ 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 eipuru PDF jehai’íva taity. +web_fonts_disabled=Ñanduti taity oñemongéma: ndaikatumo’ãi eiporu PDF jehai’íva taity. # Editor editor_free_text2.title=Moñe’ẽrã @@ -246,9 +246,6 @@ editor_free_text2_label=Moñe’ẽrã editor_ink2.title=Moha’ãnga editor_ink2_label=Moha’ãnga -editor_stamp.title=Embojuaju ta’ãnga -editor_stamp_label=Embojuaju ta’ãnga - editor_stamp1.title=Embojuaju térã embosako’i ta’ãnga editor_stamp1_label=Embojuaju térã embosako’i ta’ãnga @@ -267,4 +264,15 @@ 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 puruhára +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/viewer/locale/he/viewer.properties b/viewer/locale/he/viewer.properties index 01ddd9cd..306ff703 100644 --- a/viewer/locale/he/viewer.properties +++ b/viewer/locale/he/viewer.properties @@ -245,9 +245,6 @@ editor_free_text2_label=טקסט editor_ink2.title=ציור editor_ink2_label=ציור -editor_stamp.title=הוספת תמונה -editor_stamp_label=הוספת תמונה - editor_stamp1.title=הוספה או עריכת תמונות editor_stamp1_label=הוספה או עריכת תמונות @@ -267,3 +264,20 @@ editor_stamp_add_image.title=הוספת תמונה 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/viewer/locale/hsb/viewer.properties b/viewer/locale/hsb/viewer.properties index 98cbc7c7..d96940d4 100644 --- a/viewer/locale/hsb/viewer.properties +++ b/viewer/locale/hsb/viewer.properties @@ -246,9 +246,6 @@ editor_free_text2_label=Tekst editor_ink2.title=Rysować editor_ink2_label=Rysować -editor_stamp.title=Wobraz přidać -editor_stamp_label=Wobraz přidać - editor_stamp1.title=Wobrazy přidać abo wobdźěłać editor_stamp1_label=Wobrazy přidać abo wobdźěłać @@ -268,3 +265,20 @@ editor_stamp_add_image.title=Wobraz přidać 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/viewer/locale/hu/viewer.properties b/viewer/locale/hu/viewer.properties index c3bceda6..028aa058 100644 --- a/viewer/locale/hu/viewer.properties +++ b/viewer/locale/hu/viewer.properties @@ -246,9 +246,6 @@ editor_free_text2_label=Szöveg editor_ink2.title=Rajzolás editor_ink2_label=Rajzolás -editor_stamp.title=Kép hozzáadása -editor_stamp_label=Kép hozzáadása - editor_stamp1.title=Képek hozzáadása vagy szerkesztése editor_stamp1_label=Képek hozzáadása vagy szerkesztése @@ -268,3 +265,20 @@ editor_stamp_add_image.title=Kép hozzáadása 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/viewer/locale/ia/viewer.properties b/viewer/locale/ia/viewer.properties index 1c6878ec..a0e296e7 100644 --- a/viewer/locale/ia/viewer.properties +++ b/viewer/locale/ia/viewer.properties @@ -246,9 +246,6 @@ editor_free_text2_label=Texto editor_ink2.title=Designar editor_ink2_label=Designar -editor_stamp.title=Adder un imagine -editor_stamp_label=Adder un imagine - editor_stamp1.title=Adder o rediger imagines editor_stamp1_label=Adder o rediger imagines @@ -268,3 +265,20 @@ editor_stamp_add_image.title=Adder imagine 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/viewer/locale/is/viewer.properties b/viewer/locale/is/viewer.properties index f5b49242..4b40c1b6 100644 --- a/viewer/locale/is/viewer.properties +++ b/viewer/locale/is/viewer.properties @@ -246,9 +246,6 @@ editor_free_text2_label=Texti editor_ink2.title=Teikna editor_ink2_label=Teikna -editor_stamp.title=Bæta við mynd -editor_stamp_label=Bæta við mynd - editor_stamp1.title=Bæta við eða breyta myndum editor_stamp1_label=Bæta við eða breyta myndum @@ -268,3 +265,20 @@ editor_stamp_add_image.title=Bæta við mynd 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/viewer/locale/it/viewer.properties b/viewer/locale/it/viewer.properties index d8aa1351..99064248 100644 --- a/viewer/locale/it/viewer.properties +++ b/viewer/locale/it/viewer.properties @@ -1,7 +1,3 @@ -# 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/. - # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,204 +12,273 @@ # See the License for the specific language governing permissions and # limitations under the License. -previous.title = Pagina precedente -previous_label = Precedente -next.title = Pagina successiva -next_label = Successiva - -page.title = Pagina -of_pages = di {{pagesCount}} -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 -download_button.title = Scarica -download_button_label = Scarica - -bookmark1.title = Pagina corrente (mostra URL della pagina corrente) -bookmark1_label = Pagina corrente -open_in_app.title = Apri in app -open_in_app_label = Apri in app - -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.title = Proprietà del documento… -document_properties_label = Proprietà del documento… -document_properties_file_name = Nome file: -document_properties_file_size = Dimensione file: -document_properties_kb = {{size_kb}} kB ({{size_b}} byte) -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: -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 -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 = 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… -print_progress_percent = {{progress}}% -print_progress_close = Annulla - -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 -page_landmark = Pagina {{page}} -thumb_page_title = Pagina {{page}} -thumb_page_canvas = Miniatura della pagina {{page}} - -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 -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 -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 - -page_scale_width = Larghezza pagina -page_scale_fit = Adatta a una pagina -page_scale_auto = Zoom automatico -page_scale_actual = Dimensioni effettive -page_scale_percent = {{scale}}% - -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. - -annotation_date_string = {{date}}, {{time}} - -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. +# 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_stamp.title = Aggiungi un’immagine -editor_stamp_label = Aggiungi un’immagine -editor_stamp1.title = Aggiungi o rimuovi immagine -editor_stamp1_label = Aggiungi o rimuovi immagine +editor_free_text2.title=Testo +editor_free_text2_label=Testo +editor_ink2.title=Disegno +editor_ink2_label=Disegno -free_text2_default_content = Inizia a digitare… +editor_stamp1.title=Aggiungi o rimuovi immagine +editor_stamp1_label=Aggiungi o rimuovi immagine -# 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 +free_text2_default_content=Inizia a digitare… -# 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 +# 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/viewer/locale/ja/viewer.properties b/viewer/locale/ja/viewer.properties index b8a20101..797e6e6e 100644 --- a/viewer/locale/ja/viewer.properties +++ b/viewer/locale/ja/viewer.properties @@ -249,6 +249,9 @@ editor_ink2_label=インク注釈 editor_stamp.title=画像を追加します editor_stamp_label=画像を追加 +editor_stamp1.title=画像を追加または編集します +editor_stamp1_label=画像を追加または編集 + free_text2_default_content=テキストを入力してください... # Editor Parameters @@ -258,6 +261,9 @@ 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=インク注釈エディター diff --git a/viewer/locale/ka/viewer.properties b/viewer/locale/ka/viewer.properties index 1130a953..9ea7a963 100644 --- a/viewer/locale/ka/viewer.properties +++ b/viewer/locale/ka/viewer.properties @@ -246,9 +246,6 @@ editor_free_text2_label=ტექსტი editor_ink2.title=დახატვა editor_ink2_label=დახატვა -editor_stamp.title=სურათის დამატება -editor_stamp_label=სურათის დამატება - editor_stamp1.title=სურათების დამატება ან ჩასწორება editor_stamp1_label=სურათების დამატება ან ჩასწორება @@ -268,3 +265,20 @@ editor_stamp_add_image.title=სურათის დამატება 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/viewer/locale/kab/viewer.properties b/viewer/locale/kab/viewer.properties index ca2a8a23..8802ba82 100644 --- a/viewer/locale/kab/viewer.properties +++ b/viewer/locale/kab/viewer.properties @@ -39,13 +39,18 @@ 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 @@ -215,7 +220,6 @@ 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 @@ -242,6 +246,8 @@ editor_free_text2_label=Aḍris editor_ink2.title=Suneɣ editor_ink2_label=Suneɣ + + free_text2_default_content=Bdu tira... # Editor Parameters @@ -251,6 +257,7 @@ 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ɣ diff --git a/viewer/locale/kk/viewer.properties b/viewer/locale/kk/viewer.properties index 778e36d5..920f0a3b 100644 --- a/viewer/locale/kk/viewer.properties +++ b/viewer/locale/kk/viewer.properties @@ -246,9 +246,6 @@ editor_free_text2_label=Мәтін editor_ink2.title=Сурет салу editor_ink2_label=Сурет салу -editor_stamp.title=Суретті қосу -editor_stamp_label=Суретті қосу - editor_stamp1.title=Суреттерді қосу немесе түзету editor_stamp1_label=Суреттерді қосу немесе түзету @@ -268,3 +265,20 @@ editor_stamp_add_image.title=Суретті қосу 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/viewer/locale/ko/viewer.properties b/viewer/locale/ko/viewer.properties index 03ee0d7e..da4b0239 100644 --- a/viewer/locale/ko/viewer.properties +++ b/viewer/locale/ko/viewer.properties @@ -246,9 +246,6 @@ editor_free_text2_label=텍스트 editor_ink2.title=그리기 editor_ink2_label=그리기 -editor_stamp.title=이미지 추가 -editor_stamp_label=이미지 추가 - editor_stamp1.title=이미지 추가 또는 편집 editor_stamp1_label=이미지 추가 또는 편집 @@ -268,3 +265,20 @@ editor_stamp_add_image.title=이미지 추가 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/viewer/locale/nb-NO/viewer.properties b/viewer/locale/nb-NO/viewer.properties index 48e481a9..81045315 100644 --- a/viewer/locale/nb-NO/viewer.properties +++ b/viewer/locale/nb-NO/viewer.properties @@ -41,6 +41,11 @@ 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. @@ -241,8 +246,8 @@ editor_free_text2_label=Tekst editor_ink2.title=Tegn editor_ink2_label=Tegn -editor_stamp.title=Legg til et bilde -editor_stamp_label=Legg til et bilde +editor_stamp1.title=Legg til eller rediger bilder +editor_stamp1_label=Legg til eller rediger bilder free_text2_default_content=Begynn å skrive… @@ -253,7 +258,27 @@ 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/viewer/locale/nl/viewer.properties b/viewer/locale/nl/viewer.properties index a1796af5..c428dac5 100644 --- a/viewer/locale/nl/viewer.properties +++ b/viewer/locale/nl/viewer.properties @@ -246,9 +246,6 @@ editor_free_text2_label=Tekst editor_ink2.title=Tekenen editor_ink2_label=Tekenen -editor_stamp.title=Afbeelding toevoegen -editor_stamp_label=Afbeelding toevoegen - editor_stamp1.title=Afbeeldingen toevoegen of bewerken editor_stamp1_label=Afbeeldingen toevoegen of bewerken @@ -268,3 +265,10 @@ editor_stamp_add_image.title=Afbeelding toevoegen 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/viewer/locale/nn-NO/viewer.properties b/viewer/locale/nn-NO/viewer.properties index da26ce75..0c6a9abc 100644 --- a/viewer/locale/nn-NO/viewer.properties +++ b/viewer/locale/nn-NO/viewer.properties @@ -249,6 +249,9 @@ 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 @@ -258,6 +261,9 @@ 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 diff --git a/viewer/locale/oc/viewer.properties b/viewer/locale/oc/viewer.properties index 4745bdd1..2afe8efd 100644 --- a/viewer/locale/oc/viewer.properties +++ b/viewer/locale/oc/viewer.properties @@ -246,8 +246,8 @@ editor_free_text2_label=Tèxte editor_ink2.title=Dessenhar editor_ink2_label=Dessenhar -editor_stamp.title=Ajustar un imatge -editor_stamp_label=Ajustar un imatge +editor_stamp1.title=Apondre o modificar d’imatges +editor_stamp1_label=Apondre o modificar d’imatges free_text2_default_content=Començatz d’escriure… @@ -258,7 +258,21 @@ 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/viewer/locale/pa-IN/viewer.properties b/viewer/locale/pa-IN/viewer.properties index 56ae6bfe..2cb316fb 100644 --- a/viewer/locale/pa-IN/viewer.properties +++ b/viewer/locale/pa-IN/viewer.properties @@ -39,13 +39,18 @@ 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 @@ -215,7 +220,6 @@ 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 @@ -242,6 +246,12 @@ 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 @@ -251,6 +261,9 @@ 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=ਵਹਾਉਣ ਐਡੀਟਰ diff --git a/viewer/locale/rm/viewer.properties b/viewer/locale/rm/viewer.properties index 39cfb23e..ea0a1182 100644 --- a/viewer/locale/rm/viewer.properties +++ b/viewer/locale/rm/viewer.properties @@ -249,6 +249,9 @@ 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 @@ -258,6 +261,9 @@ 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 diff --git a/viewer/locale/sat/viewer.properties b/viewer/locale/sat/viewer.properties index 180c2682..b8c53998 100644 --- a/viewer/locale/sat/viewer.properties +++ b/viewer/locale/sat/viewer.properties @@ -249,6 +249,9 @@ editor_ink2_label=ᱛᱮᱭᱟᱨ editor_stamp.title=ᱢᱤᱫᱴᱟᱝ ᱪᱤᱛᱟᱹᱨ ᱥᱮᱞᱮᱫ ᱢᱮ editor_stamp_label=ᱢᱤᱫᱴᱟᱝ ᱪᱤᱛᱟᱹᱨ ᱥᱮᱞᱮᱫ ᱢᱮ +editor_stamp1.title=ᱪᱤᱛᱟᱹᱨᱠᱚ ᱥᱮᱞᱮᱫ ᱥᱮ ᱥᱟᱯᱲᱟᱣ ᱢᱮ +editor_stamp1_label=ᱪᱤᱛᱟᱹᱨᱠᱚ ᱥᱮᱞᱮᱫ ᱥᱮ ᱥᱟᱯᱲᱟᱣ ᱢᱮ + free_text2_default_content=ᱚᱞ ᱮᱛᱦᱚᱵ ᱢᱮ … # Editor Parameters @@ -258,6 +261,9 @@ 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=ᱛᱮᱭᱟᱨ ᱥᱟᱯᱲᱟᱣᱤᱭᱟᱹ diff --git a/viewer/locale/sl/viewer.properties b/viewer/locale/sl/viewer.properties index 70dfc39b..29254c12 100644 --- a/viewer/locale/sl/viewer.properties +++ b/viewer/locale/sl/viewer.properties @@ -246,9 +246,6 @@ editor_free_text2_label=Besedilo editor_ink2.title=Riši editor_ink2_label=Riši -editor_stamp.title=Dodaj sliko -editor_stamp_label=Dodaj sliko - editor_stamp1.title=Dodajanje ali urejanje slik editor_stamp1_label=Dodajanje ali urejanje slik @@ -268,3 +265,20 @@ editor_stamp_add_image.title=Dodaj sliko 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/viewer/locale/sv-SE/viewer.properties b/viewer/locale/sv-SE/viewer.properties index 56f24bd7..a15d2b68 100644 --- a/viewer/locale/sv-SE/viewer.properties +++ b/viewer/locale/sv-SE/viewer.properties @@ -246,9 +246,6 @@ editor_free_text2_label=Text editor_ink2.title=Rita editor_ink2_label=Rita -editor_stamp.title=Lägg till en bild -editor_stamp_label=Lägg till en bild - editor_stamp1.title=Lägg till eller redigera bilder editor_stamp1_label=Lägg till eller redigera bilder @@ -268,3 +265,20 @@ editor_stamp_add_image.title=Lägg till bild 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/viewer/locale/tg/viewer.properties b/viewer/locale/tg/viewer.properties index 05fd2197..b00f700e 100644 --- a/viewer/locale/tg/viewer.properties +++ b/viewer/locale/tg/viewer.properties @@ -246,9 +246,8 @@ 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=Нависед… @@ -266,3 +265,17 @@ editor_stamp_add_image.title=Илова кардани тасвир 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/viewer/locale/th/viewer.properties b/viewer/locale/th/viewer.properties index 84f74dac..f194072d 100644 --- a/viewer/locale/th/viewer.properties +++ b/viewer/locale/th/viewer.properties @@ -249,6 +249,9 @@ editor_ink2_label=รูปวาด editor_stamp.title=เพิ่มรูปภาพ editor_stamp_label=เพิ่มรูปภาพ +editor_stamp1.title=เพิ่มหรือแก้ไขภาพ +editor_stamp1_label=เพิ่มหรือแก้ไขภาพ + free_text2_default_content=เริ่มพิมพ์… # Editor Parameters @@ -258,6 +261,9 @@ 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=ตัวแก้ไขรูปวาด diff --git a/viewer/locale/tr/viewer.properties b/viewer/locale/tr/viewer.properties index 982d11ad..eaa4eaba 100644 --- a/viewer/locale/tr/viewer.properties +++ b/viewer/locale/tr/viewer.properties @@ -246,8 +246,8 @@ editor_free_text2_label=Metin editor_ink2.title=Çiz editor_ink2_label=Çiz -editor_stamp.title=Resim ekle -editor_stamp_label=Resim ekle +editor_stamp1.title=Resim ekle veya düzenle +editor_stamp1_label=Resim ekle veya düzenle free_text2_default_content=Yazmaya başlayın… @@ -258,7 +258,26 @@ 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/viewer/locale/uk/viewer.properties b/viewer/locale/uk/viewer.properties index d6ca7b27..64864e05 100644 --- a/viewer/locale/uk/viewer.properties +++ b/viewer/locale/uk/viewer.properties @@ -246,9 +246,6 @@ editor_free_text2_label=Текст editor_ink2.title=Малювати editor_ink2_label=Малювати -editor_stamp.title=Додати зображення -editor_stamp_label=Додати зображення - editor_stamp1.title=Додати чи редагувати зображення editor_stamp1_label=Додати чи редагувати зображення @@ -268,3 +265,20 @@ editor_stamp_add_image.title=Додати зображення 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/viewer/locale/zh-CN/viewer.properties b/viewer/locale/zh-CN/viewer.properties index 4d9d7cc2..12908d19 100644 --- a/viewer/locale/zh-CN/viewer.properties +++ b/viewer/locale/zh-CN/viewer.properties @@ -246,9 +246,6 @@ editor_free_text2_label=文本 editor_ink2.title=绘图 editor_ink2_label=绘图 -editor_stamp.title=添加图像 -editor_stamp_label=添加图像 - editor_stamp1.title=添加或编辑图像 editor_stamp1_label=添加或编辑图像 @@ -268,3 +265,20 @@ editor_stamp_add_image.title=添加图像 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/viewer/locale/zh-TW/viewer.properties b/viewer/locale/zh-TW/viewer.properties index 8fee7c77..56cf24c9 100644 --- a/viewer/locale/zh-TW/viewer.properties +++ b/viewer/locale/zh-TW/viewer.properties @@ -246,9 +246,6 @@ editor_free_text2_label=文字 editor_ink2.title=繪圖 editor_ink2_label=繪圖 -editor_stamp.title=新增圖片 -editor_stamp_label=新增圖片 - editor_stamp1.title=新增或編輯圖片 editor_stamp1_label=新增或編輯圖片 @@ -268,3 +265,17 @@ editor_stamp_add_image.title=新增圖片 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/viewer/viewer.css b/viewer/viewer.css index 12d15c07..2be1ecf0 100644 --- a/viewer/viewer.css +++ b/viewer/viewer.css @@ -84,12 +84,12 @@ .textLayer ::-moz-selection { background: blue; - background: AccentColor; + background: AccentColor; /* stylelint-disable-line declaration-block-no-duplicate-properties */ } .textLayer ::selection { background: blue; - background: AccentColor; + background: AccentColor; /* stylelint-disable-line declaration-block-no-duplicate-properties */ } /* Avoids https://github.com/mozilla/pdf.js/issues/13840 in Chrome */ @@ -446,20 +446,7 @@ font-size: calc(9px * var(--scale-factor)); } -.annotationLayer .highlightAnnotation, -.annotationLayer .underlineAnnotation, -.annotationLayer .squigglyAnnotation, -.annotationLayer .strikeoutAnnotation, -.annotationLayer .freeTextAnnotation, -.annotationLayer .lineAnnotation svg line, -.annotationLayer .squareAnnotation svg rect, -.annotationLayer .circleAnnotation svg ellipse, -.annotationLayer .polylineAnnotation svg polyline, -.annotationLayer .polygonAnnotation svg polygon, -.annotationLayer .caretAnnotation, -.annotationLayer .inkAnnotation svg polyline, -.annotationLayer .stampAnnotation, -.annotationLayer .fileAttachmentAnnotation { +.annotationLayer .popupTriggerArea { cursor: pointer; } @@ -817,22 +804,48 @@ } } +/* Ignored in GECKOVIEW builds: */ :root { --outline-width: 2px; - --outline-color: blue; + --outline-color: #0060df; + --outline-around-width: 1px; + --outline-around-color: #f0f0f4; + --hover-outline-around-color: var(--outline-around-color); --focus-outline: solid var(--outline-width) var(--outline-color); - --hover-outline: dashed var(--outline-width) var(--outline-color); + --unfocus-outline: solid var(--outline-width) transparent; + --focus-outline-around: solid var(--outline-around-width) + var(--outline-around-color); + --hover-outline-color: #8f8f9d; + --hover-outline: solid var(--outline-width) var(--hover-outline-color); + --hover-outline-around: solid var(--outline-around-width) + var(--hover-outline-around-color); --freetext-line-height: 1.35; --freetext-padding: 2px; - --resizer-size: 8px; + --resizer-bg-color: var(--outline-color); + --resizer-size: 6px; --resizer-shift: calc( - 0px - var(--outline-width) - var(--resizer-size) / 2 - var(--outline-width) / - 2 + 0px - (var(--outline-width) + var(--resizer-size)) / 2 - + var(--outline-around-width) ); - --resizer-color: white; --editorFreeText-editing-cursor: text; --editorInk-editing-cursor: url(images/cursor-editorInk.svg) 0 16, pointer; + + --alt-text-opacity: 0.8; + --alt-text-add-image: url(images/altText_add.svg); + --alt-text-done-image: url(images/altText_done.svg); + --alt-text-bg-color: rgba(43, 42, 51, var(--alt-text-opacity)); + --alt-text-fg-color: #fbfbfe; + --alt-text-border-color: var(--alt-text-bg-color); + --alt-text-hover-bg-color: rgba(82, 82, 94, var(--alt-text-opacity)); + --alt-text-hover-fg-color: var(--alt-text-fg-color); + --alt-text-hover-border-color: var(--alt-text-hover-bg-color); + --alt-text-active-bg-color: rgba(91, 91, 102, var(--alt-text-opacity)); + --alt-text-active-fg-color: var(--alt-text-fg-color); + --alt-text-active-border-color: var(--alt-text-hover-bg-color); + --alt-text-focus-outline-color: #0060df; + --alt-text-focus-border-color: #f0f0f4; + --alt-text-shadow: 0 2px 6px 0 rgba(28, 27, 34, 0.5); } @media (-webkit-min-device-pixel-ratio: 1.1), (min-resolution: 1.1dppx) { @@ -844,10 +857,25 @@ @media screen and (forced-colors: active) { :root { - --outline-width: 3px; - --outline-color: ButtonText; - --resizer-size: 12px; - --resizer-color: ButtonFace; + --outline-color: CanvasText; + --outline-around-color: ButtonFace; + --resizer-bg-color: ButtonText; + --hover-outline-color: Highlight; + --hover-outline-around-color: SelectedItemText; + + --alt-text-bg-color: Canvas; + --alt-text-fg-color: ButtonText; + --alt-text-border-color: ButtonText; + --alt-text-hover-bg-color: Canvas; + --alt-text-hover-fg-color: SelectedItem; + --alt-text-hover-border-color: SelectedItem; + --alt-text-active-bg-color: ButtonFace; + --alt-text-active-fg-color: SelectedItem; + --alt-text-active-border-color: ButtonText; + --alt-text-focus-outline-color: CanvasText; + --alt-text-focus-border-color: ButtonText; + --alt-text-shadow: none; + --alt-text-opacity: 1; } } @@ -888,26 +916,63 @@ cursor: var(--editorInk-editing-cursor); } -.annotationEditorLayer - :is(.freeTextEditor, .inkEditor, .stampEditor).draggable.selectedEditor { - cursor: move; -} - -.annotationEditorLayer .selectedEditor { - outline: var(--focus-outline); -} - .annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) { position: absolute; background: transparent; - border-radius: 3px; z-index: 1; transform-origin: 0 0; cursor: auto; max-width: 100%; max-height: 100%; + border: var(--unfocus-outline); } +.annotationEditorLayer .draggable.selectedEditor:is(.freeTextEditor, .inkEditor, .stampEditor) { + cursor: move; + } + +.annotationEditorLayer .selectedEditor:is(.freeTextEditor, .inkEditor, .stampEditor) { + border: var(--focus-outline); + outline: var(--focus-outline-around); + } + +.annotationEditorLayer .selectedEditor:is(.freeTextEditor, .inkEditor, .stampEditor)::before { + /* + This is a workaround for the lack of support for stripes(...) (see + https://drafts.csswg.org/css-images-4/#stripes). + The outline should be composed of 1px white, 2px blue and 1px white. + This could be achieved in different ways: + - using a linear-gradient; + - using a box-shadow; + - using an outline on the selected element and an outline+border on + the ::before pseudo-element. + All these options lead to incorrect rendering likely due to rounding + issues. + That said it doesn't mean that the current is ideal, but it's the best + we could come up with for the moment. + One drawback of this approach is that we use a border on the selected + element which means that we must take care of it when positioning the + div in js (see AnnotationEditor._borderLineWidth in editor.js). + */ + content: ""; + position: absolute; + inset: 0; + border: var(--focus-outline-around); + pointer-events: none; + } + +.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor):hover:not(.selectedEditor) { + border: var(--hover-outline); + outline: var(--hover-outline-around); + } + +.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor):hover:not(.selectedEditor)::before { + content: ""; + position: absolute; + inset: 0; + border: var(--focus-outline-around); + } + .annotationEditorLayer .freeTextEditor { padding: calc(var(--freetext-padding) * var(--scale-factor)); width: auto; @@ -953,11 +1018,6 @@ user-select: auto; } -.annotationEditorLayer - :is(.freeTextEditor, .inkEditor, .stampEditor):hover:not(.selectedEditor) { - outline: var(--hover-outline); -} - .annotationEditorLayer .inkEditor { width: 100%; height: 100%; @@ -986,8 +1046,6 @@ } .annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) > .resizers { - width: 100%; - height: 100%; position: absolute; inset: 0; } @@ -999,9 +1057,9 @@ .annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) > .resizers > .resizer { width: var(--resizer-size); height: var(--resizer-size); - border-radius: 50%; - background: var(--resizer-color); - border: var(--focus-outline); + background: content-box var(--resizer-bg-color); + border: var(--focus-outline-around); + border-radius: 2px; position: absolute; } @@ -1197,6 +1255,568 @@ cursor: ns-resize; } +.annotationEditorLayer + :is( + [data-main-rotation="0"] [data-editor-rotation="90"], + [data-main-rotation="90"] [data-editor-rotation="0"], + [data-main-rotation="180"] [data-editor-rotation="270"], + [data-main-rotation="270"] [data-editor-rotation="180"] + ) .altText { + rotate: 270deg; + } + +[dir="ltr"] .annotationEditorLayer + :is( + [data-main-rotation="0"] [data-editor-rotation="90"], + [data-main-rotation="90"] [data-editor-rotation="0"], + [data-main-rotation="180"] [data-editor-rotation="270"], + [data-main-rotation="270"] [data-editor-rotation="180"] + ) .altText { + inset-inline-start: calc(100% - 8px); + } + +[dir="ltr"] .annotationEditorLayer + :is( + [data-main-rotation="0"] [data-editor-rotation="90"], + [data-main-rotation="90"] [data-editor-rotation="0"], + [data-main-rotation="180"] [data-editor-rotation="270"], + [data-main-rotation="270"] [data-editor-rotation="180"] + ) .altText.small { + inset-inline-start: calc(100% + 8px); + inset-block-start: 100%; + } + +[dir="rtl"] .annotationEditorLayer + :is( + [data-main-rotation="0"] [data-editor-rotation="90"], + [data-main-rotation="90"] [data-editor-rotation="0"], + [data-main-rotation="180"] [data-editor-rotation="270"], + [data-main-rotation="270"] [data-editor-rotation="180"] + ) .altText { + inset-block-end: calc(100% - 8px); + } + +[dir="rtl"] .annotationEditorLayer + :is( + [data-main-rotation="0"] [data-editor-rotation="90"], + [data-main-rotation="90"] [data-editor-rotation="0"], + [data-main-rotation="180"] [data-editor-rotation="270"], + [data-main-rotation="270"] [data-editor-rotation="180"] + ) .altText.small { + inset-inline-start: -8px; + inset-block-start: 0; + } + +.annotationEditorLayer + :is( + [data-main-rotation="0"] [data-editor-rotation="180"], + [data-main-rotation="90"] [data-editor-rotation="90"], + [data-main-rotation="180"] [data-editor-rotation="0"], + [data-main-rotation="270"] [data-editor-rotation="270"] + ) .altText { + rotate: 180deg; + + inset-block-end: calc(100% - 8px); + inset-inline-start: calc(100% - 8px); + } + +.annotationEditorLayer + :is( + [data-main-rotation="0"] [data-editor-rotation="180"], + [data-main-rotation="90"] [data-editor-rotation="90"], + [data-main-rotation="180"] [data-editor-rotation="0"], + [data-main-rotation="270"] [data-editor-rotation="270"] + ) .altText.small { + inset-inline-start: 100%; + inset-block-start: -8px; + } + +.annotationEditorLayer + :is( + [data-main-rotation="0"] [data-editor-rotation="270"], + [data-main-rotation="90"] [data-editor-rotation="180"], + [data-main-rotation="180"] [data-editor-rotation="90"], + [data-main-rotation="270"] [data-editor-rotation="0"] + ) .altText { + rotate: 90deg; + } + +[dir="ltr"] .annotationEditorLayer + :is( + [data-main-rotation="0"] [data-editor-rotation="270"], + [data-main-rotation="90"] [data-editor-rotation="180"], + [data-main-rotation="180"] [data-editor-rotation="90"], + [data-main-rotation="270"] [data-editor-rotation="0"] + ) .altText { + inset-block-end: calc(100% - 8px); + } + +[dir="ltr"] .annotationEditorLayer + :is( + [data-main-rotation="0"] [data-editor-rotation="270"], + [data-main-rotation="90"] [data-editor-rotation="180"], + [data-main-rotation="180"] [data-editor-rotation="90"], + [data-main-rotation="270"] [data-editor-rotation="0"] + ) .altText.small { + inset-inline-start: -8px; + inset-block-start: 0; + } + +[dir="rtl"] .annotationEditorLayer + :is( + [data-main-rotation="0"] [data-editor-rotation="270"], + [data-main-rotation="90"] [data-editor-rotation="180"], + [data-main-rotation="180"] [data-editor-rotation="90"], + [data-main-rotation="270"] [data-editor-rotation="0"] + ) .altText { + inset-inline-start: calc(100% - 8px); + } + +[dir="rtl"] .annotationEditorLayer + :is( + [data-main-rotation="0"] [data-editor-rotation="270"], + [data-main-rotation="90"] [data-editor-rotation="180"], + [data-main-rotation="180"] [data-editor-rotation="90"], + [data-main-rotation="270"] [data-editor-rotation="0"] + ) .altText.small { + inset-inline-start: calc(100% + 8px); + inset-block-start: 100%; + } + +.altText { + display: flex; + align-items: center; + justify-content: center; + padding-inline: 4px; + width: auto; + height: 24px; + min-width: 88px; + z-index: 1; + pointer-events: all; + + color: var(--alt-text-fg-color); + font: menu; + font-size: 12px; + border-radius: 4px; + border: 1px solid var(--alt-text-border-color); + background-color: var(--alt-text-bg-color); + box-shadow: var(--alt-text-shadow); + + position: absolute; + inset-block-end: 8px; + inset-inline-start: 8px; +} + +[dir="ltr"] .altText { + transform-origin: 0 100%; + } + +[dir="rtl"] .altText { + transform-origin: 100% 100%; + } + +.altText.small { + + inset-block-end: unset; + inset-inline-start: 0; + inset-block-start: calc(100% + 8px); + } + +[dir="ltr"] .altText.small { + transform-origin: 0 0; + } + +[dir="rtl"] .altText.small { + transform-origin: 100% 0; + } + +.altText:hover { + background-color: var(--alt-text-hover-bg-color); + border-color: var(--alt-text-hover-border-color); + color: var(--alt-text-hover-fg-color); + cursor: pointer; + } + +.altText:hover::before { + background-color: var(--alt-text-hover-fg-color); + } + +.altText:active { + background-color: var(--alt-text-active-bg-color); + border-color: var(--alt-text-active-border-color); + color: var(--alt-text-active-fg-color); + } + +.altText:active::before { + background-color: var(--alt-text-active-fg-color); + } + +.altText:focus-visible { + outline: 2px solid var(--alt-text-focus-outline-color); + border-color: var(--alt-text-focus-border-color); + } + +.altText::before { + content: ""; + -webkit-mask-image: var(--alt-text-add-image); + mask-image: var(--alt-text-add-image); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-position: center; + mask-position: center; + display: inline-block; + width: 12px; + height: 13px; + background-color: var(--alt-text-fg-color); + margin-inline-end: 4px; + } + +.altText.done::before { + -webkit-mask-image: var(--alt-text-done-image); + mask-image: var(--alt-text-done-image); + } + +.altText .tooltip { + display: none; + } + +.altText .tooltip.show { + --alt-text-tooltip-bg: #f0f0f4; + --alt-text-tooltip-fg: #15141a; + --alt-text-tooltip-border: #8f8f9d; + --alt-text-tooltip-shadow: 0px 2px 6px 0px rgba(58, 57, 68, 0.2); + + display: inline-flex; + flex-direction: column; + align-items: center; + justify-content: center; + position: absolute; + top: calc(100% + 2px); + inset-inline-start: 0; + padding-block: 2px 3px; + padding-inline: 3px; + max-width: 300px; + width: -moz-max-content; + width: max-content; + height: auto; + font-size: 12px; + + border: 0.5px solid var(--alt-text-tooltip-border); + background: var(--alt-text-tooltip-bg); + box-shadow: var(--alt-text-tooltip-shadow); + color: var(--alt-text-tooltip-fg); + + pointer-events: none; + } + +@media (prefers-color-scheme: dark) { + +.altText .tooltip.show { + --alt-text-tooltip-bg: #1c1b22; + --alt-text-tooltip-fg: #fbfbfe; + --alt-text-tooltip-shadow: 0px 2px 6px 0px #15141a; + } + } + +@media screen and (forced-colors: active) { + +.altText .tooltip.show { + --alt-text-tooltip-bg: Canvas; + --alt-text-tooltip-fg: CanvasText; + --alt-text-tooltip-border: CanvasText; + --alt-text-tooltip-shadow: none; + } + } + +#altTextDialog { + --dialog-bg-color: white; + --dialog-border-color: white; + --dialog-shadow: 0 2px 14px 0 rgba(58, 57, 68, 0.2); + --text-primary-color: #15141a; + --text-secondary-color: #5b5b66; + --hover-filter: brightness(0.9); + --focus-ring-color: #0060df; + --focus-ring-outline: 2px solid var(--focus-ring-color); + + --textarea-border-color: #8f8f9d; + --textarea-bg-color: white; + --textarea-fg-color: var(--text-secondary-color); + + --radio-bg-color: #f0f0f4; + --radio-checked-bg-color: #fbfbfe; + --radio-border-color: #8f8f9d; + --radio-checked-border-color: #0060df; + + --button-cancel-bg-color: #f0f0f4; + --button-cancel-fg-color: var(--text-primary-color); + --button-cancel-border-color: var(--button-cancel-bg-color); + --button-cancel-hover-bg-color: var(--button-cancel-bg-color); + --button-cancel-hover-fg-color: var(--button-cancel-fg-color); + --button-cancel-hover-border-color: var(--button-cancel-hover-bg-color); + + --button-save-bg-color: #0060df; + --button-save-fg-color: #fbfbfe; + --button-save-hover-bg-color: var(--button-save-bg-color); + --button-save-hover-fg-color: var(--button-save-fg-color); + --button-save-hover-border-color: var(--button-save-hover-bg-color); + --button-save-disabled-bg-color: var(--button-save-bg-color); + --button-save-disabled-fg-color: var(--button-save-fg-color); + --button-save-disabled-opacity: 0.4; + + font: message-box; + font-size: 13px; + font-weight: 400; + line-height: 150%; + border-radius: 4px; + padding: 12px 16px; + border: 1px solid var(--dialog-border-color); + background: var(--dialog-bg-color); + color: var(--text-primary-color); + box-shadow: var(--dialog-shadow); +} + +@media (prefers-color-scheme: dark) { + +#altTextDialog { + --dialog-bg-color: #1c1b22; + --dialog-border-color: #1c1b22; + --dialog-shadow: 0 2px 14px 0 #15141a; + --text-primary-color: #fbfbfe; + --text-secondary-color: #cfcfd8; + --focus-ring-color: #00ddff; + --hover-filter: brightness(1.4); + + --textarea-bg-color: #42414d; + + --radio-bg-color: #2b2a33; + --radio-checked-bg-color: #15141a; + --radio-checked-border-color: #00ddff; + + --button-cancel-bg-color: #2b2a33; + --button-save-bg-color: #00ddff; + --button-save-fg-color: #15141a; +} + } + +@media screen and (forced-colors: active) { + +#altTextDialog { + --dialog-bg-color: Canvas; + --dialog-border-color: CanvasText; + --dialog-shadow: none; + --text-primary-color: CanvasText; + --text-secondary-color: CanvasText; + --hover-filter: none; + --focus-ring-color: ButtonBorder; + + --textarea-border-color: ButtonBorder; + --textarea-bg-color: Field; + --textarea-fg-color: ButtonText; + + --radio-bg-color: ButtonFace; + --radio-checked-bg-color: ButtonFace; + --radio-border-color: ButtonText; + --radio-checked-border-color: ButtonText; + + --button-cancel-bg-color: ButtonFace; + --button-cancel-fg-color: ButtonText; + --button-cancel-border-color: ButtonText; + --button-cancel-hover-bg-color: AccentColor; + --button-cancel-hover-fg-color: AccentColorText; + + --button-save-bg-color: ButtonText; + --button-save-fg-color: ButtonFace; + --button-save-hover-bg-color: AccentColor; + --button-save-hover-fg-color: AccentColorText; + --button-save-disabled-bg-color: GrayText; + --button-save-disabled-fg-color: Canvas; + --button-save-disabled-opacity: 1; +} + } + +#altTextDialog::backdrop { + /* This is needed to avoid to darken the image the user want to describe. */ + -webkit-mask: url(#alttext-manager-mask); + mask: url(#alttext-manager-mask); + } + +#altTextDialog.positioned { + margin: 0; + } + +#altTextDialog #altTextContainer { + width: 300px; + height: -moz-fit-content; + height: fit-content; + display: inline-flex; + flex-direction: column; + align-items: flex-start; + gap: 16px; + } + +#altTextDialog #altTextContainer *:focus-visible { + outline: var(--focus-ring-outline); + outline-offset: 2px; + } + +#altTextDialog #altTextContainer .radio { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 4px; + } + +#altTextDialog #altTextContainer .radio .radioButton { + display: flex; + gap: 8px; + align-self: stretch; + align-items: center; + } + +#altTextDialog #altTextContainer .radio .radioButton input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + box-sizing: border-box; + width: 16px; + height: 16px; + border-radius: 50%; + background-color: var(--radio-bg-color); + border: 1px solid var(--radio-border-color); + } + +#altTextDialog #altTextContainer .radio .radioButton input:hover { + filter: var(--hover-filter); + } + +#altTextDialog #altTextContainer .radio .radioButton input:checked { + background-color: var(--radio-checked-bg-color); + border: 4px solid var(--radio-checked-border-color); + } + +#altTextDialog #altTextContainer .radio .radioLabel { + display: flex; + padding-inline-start: 24px; + align-items: flex-start; + gap: 10px; + align-self: stretch; + } + +#altTextDialog #altTextContainer .radio .radioLabel span { + flex: 1 0 0; + font-size: 11px; + color: var(--text-secondary-color); + } + +#altTextDialog #altTextContainer #overallDescription { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 4px; + align-self: stretch; + } + +#altTextDialog #altTextContainer #overallDescription span { + align-self: stretch; + } + +#altTextDialog #altTextContainer #overallDescription .title { + font-size: 13px; + font-style: normal; + font-weight: 590; + } + +#altTextDialog #altTextContainer #addDescription { + display: flex; + flex-direction: column; + align-items: stretch; + gap: 8px; + } + +#altTextDialog #altTextContainer #addDescription .descriptionArea { + flex: 1; + padding-inline: 24px 10px; + } + +#altTextDialog #altTextContainer #addDescription .descriptionArea textarea { + font: inherit; + width: 100%; + min-height: 75px; + padding: 8px; + resize: none; + margin: 0; + box-sizing: border-box; + border-radius: 4px; + border: 1px solid var(--textarea-border-color); + background: var(--textarea-bg-color); + color: var(--textarea-fg-color); + } + +#altTextDialog #altTextContainer #addDescription .descriptionArea textarea:focus { + outline-offset: 0; + border-color: transparent; + } + +#altTextDialog #altTextContainer #addDescription .descriptionArea textarea:disabled { + pointer-events: none; + opacity: 0.4; + } + +#altTextDialog #altTextContainer #buttons { + display: flex; + justify-content: flex-end; + align-items: flex-start; + gap: 8px; + align-self: stretch; + } + +#altTextDialog #altTextContainer #buttons button { + border-radius: 4px; + border: 1px solid; + font: menu; + font-weight: 600; + padding: 4px 16px; + width: auto; + height: 32px; + } + +#altTextDialog #altTextContainer #buttons button:hover { + cursor: pointer; + filter: var(--hover-filter); + } + +#altTextDialog #altTextContainer #buttons button#altTextCancel { + color: var(--button-cancel-fg-color); + background-color: var(--button-cancel-bg-color); + border-color: var(--button-cancel-border-color); + } + +#altTextDialog #altTextContainer #buttons button#altTextCancel:hover { + color: var(--button-cancel-hover-fg-color); + background-color: var(--button-cancel-hover-bg-color); + border-color: var(--button-cancel-hover-border-color); + } + +#altTextDialog #altTextContainer #buttons button#altTextSave { + color: var(--button-save-hover-fg-color); + background-color: var(--button-save-hover-bg-color); + border-color: var(--button-save-hover-border-color); + opacity: 1; + } + +#altTextDialog #altTextContainer #buttons button#altTextSave:hover { + color: var(--button-save-hover-fg-color); + background-color: var(--button-save-hover-bg-color); + border-color: var(--button-save-hover-border-color); + } + +#altTextDialog #altTextContainer #buttons button#altTextSave:disabled { + color: var(--button-save-disabled-fg-color); + background-color: var(--button-save-disabled-bg-color); + opacity: var(--button-save-disabled-opacity); + pointer-events: none; + } + :root { --viewer-container-height: 0; --pdfViewer-padding-bottom: 0; @@ -2778,6 +3398,8 @@ dialog :link { .grab-to-pan-grab:active, .grab-to-pan-grabbing { cursor: grabbing !important; +} +.grab-to-pan-grabbing { position: fixed; background: rgba(0, 0, 0, 0); display: block; diff --git a/viewer/viewer.html b/viewer/viewer.html index 104ca2e0..a4d9388e 100644 --- a/viewer/viewer.html +++ b/viewer/viewer.html @@ -453,6 +453,49 @@ Close + + + + Choose an option + + Alt text (alternative text) helps when people can’t see the image or when it doesn’t load. + + + + + + + Add a description + + + + Aim for 1-2 sentences that describe the subject, setting, or actions. + + + + + + + + + + + + Mark as decorative + + + + This is used for ornamental images, like borders or watermarks. + + + + + + Cancel + Save + + + Preparing document for printing… diff --git a/viewer/viewer.js b/viewer/viewer.js index 61c9eea8..4642dc95 100644 --- a/viewer/viewer.js +++ b/viewer/viewer.js @@ -34,10 +34,10 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.GenericCom = void 0; var _app = __webpack_require__(2); -var _preferences = __webpack_require__(41); -var _download_manager = __webpack_require__(42); -var _genericl10n = __webpack_require__(43); -var _generic_scripting = __webpack_require__(45); +var _preferences = __webpack_require__(42); +var _download_manager = __webpack_require__(43); +var _genericl10n = __webpack_require__(44); +var _generic_scripting = __webpack_require__(46); ; const GenericCom = {}; exports.GenericCom = GenericCom; @@ -84,26 +84,27 @@ var _pdfjsLib = __webpack_require__(4); var _app_options = __webpack_require__(5); var _event_utils = __webpack_require__(6); var _pdf_link_service = __webpack_require__(7); -var _webAnnotation_editor_params = __webpack_require__(8); -var _overlay_manager = __webpack_require__(9); -var _password_prompt = __webpack_require__(10); -var _webPdf_attachment_viewer = __webpack_require__(11); -var _webPdf_cursor_tools = __webpack_require__(13); -var _webPdf_document_properties = __webpack_require__(15); -var _webPdf_find_bar = __webpack_require__(16); -var _pdf_find_controller = __webpack_require__(17); -var _pdf_history = __webpack_require__(19); -var _webPdf_layer_viewer = __webpack_require__(20); -var _webPdf_outline_viewer = __webpack_require__(21); -var _webPdf_presentation_mode = __webpack_require__(22); -var _pdf_rendering_queue = __webpack_require__(23); -var _pdf_scripting_manager = __webpack_require__(24); -var _webPdf_sidebar = __webpack_require__(25); -var _webPdf_thumbnail_viewer = __webpack_require__(26); -var _pdf_viewer = __webpack_require__(28); -var _webSecondary_toolbar = __webpack_require__(38); -var _webToolbar = __webpack_require__(39); -var _view_history = __webpack_require__(40); +var _webAlt_text_manager = __webpack_require__(8); +var _webAnnotation_editor_params = __webpack_require__(9); +var _overlay_manager = __webpack_require__(10); +var _password_prompt = __webpack_require__(11); +var _webPdf_attachment_viewer = __webpack_require__(12); +var _webPdf_cursor_tools = __webpack_require__(14); +var _webPdf_document_properties = __webpack_require__(16); +var _webPdf_find_bar = __webpack_require__(17); +var _pdf_find_controller = __webpack_require__(18); +var _pdf_history = __webpack_require__(20); +var _webPdf_layer_viewer = __webpack_require__(21); +var _webPdf_outline_viewer = __webpack_require__(22); +var _webPdf_presentation_mode = __webpack_require__(23); +var _pdf_rendering_queue = __webpack_require__(24); +var _pdf_scripting_manager = __webpack_require__(25); +var _webPdf_sidebar = __webpack_require__(26); +var _webPdf_thumbnail_viewer = __webpack_require__(27); +var _pdf_viewer = __webpack_require__(29); +var _webSecondary_toolbar = __webpack_require__(39); +var _webToolbar = __webpack_require__(40); +var _view_history = __webpack_require__(41); const FORCE_PAGES_LOADED_TIMEOUT = 10000; const WHEEL_ZOOM_DISABLED_TIMEOUT = 1000; const ViewOnLoad = { @@ -401,6 +402,7 @@ const PDFViewerApplication = { background: _app_options.AppOptions.get("pageColorsBackground"), foreground: _app_options.AppOptions.get("pageColorsForeground") } : null; + const altTextManager = appConfig.altTextDialog ? new _webAlt_text_manager.AltTextManager(appConfig.altTextDialog, container, this.overlayManager, eventBus) : null; const pdfViewer = new _pdf_viewer.PDFViewer({ container, viewer, @@ -408,6 +410,7 @@ const PDFViewerApplication = { renderingQueue: pdfRenderingQueue, linkService: pdfLinkService, downloadManager, + altTextManager, findController, scriptingManager: _app_options.AppOptions.get("enableScripting") && pdfScriptingManager, l10n, @@ -472,7 +475,7 @@ const PDFViewerApplication = { this.toolbar = new _webToolbar.Toolbar(appConfig.toolbar, eventBus, l10n); } if (appConfig.secondaryToolbar) { - this.secondaryToolbar = new _webSecondary_toolbar.SecondaryToolbar(appConfig.secondaryToolbar, eventBus, externalServices); + this.secondaryToolbar = new _webSecondary_toolbar.SecondaryToolbar(appConfig.secondaryToolbar, eventBus); } if (this.supportsFullscreen && appConfig.secondaryToolbar?.presentationModeButton) { this.pdfPresentationMode = new _webPdf_presentation_mode.PDFPresentationMode({ @@ -1991,7 +1994,7 @@ function webViewerWheel(evt) { const isPinchToZoom = evt.ctrlKey && !PDFViewerApplication._isCtrlKeyDown && deltaMode === WheelEvent.DOM_DELTA_PIXEL && evt.deltaX === 0 && (Math.abs(scaleFactor - 1) < 0.05 || isBuiltInMac) && evt.deltaZ === 0; if (isPinchToZoom || evt.ctrlKey && supportedMouseWheelZoomModifierKeys.ctrlKey || evt.metaKey && supportedMouseWheelZoomModifierKeys.metaKey) { evt.preventDefault(); - if (zoomDisabledTimeout || document.visibilityState === "hidden") { + if (zoomDisabledTimeout || document.visibilityState === "hidden" || PDFViewerApplication.overlayManager.active) { return; } const previousScale = pdfViewer.currentScale; @@ -2035,7 +2038,7 @@ function webViewerTouchStart(evt) { return; } evt.preventDefault(); - if (evt.touches.length !== 2) { + if (evt.touches.length !== 2 || PDFViewerApplication.overlayManager.active) { PDFViewerApplication._touchInfo = null; return; } @@ -2419,6 +2422,11 @@ function beforeUnload(evt) { function webViewerAnnotationEditorStatesChanged(data) { PDFViewerApplication.externalServices.updateEditorStates(data); } +function webViewerReportTelemetry({ + details +}) { + PDFViewerApplication.externalServices.reportTelemetry(details); +} const PDFPrintServiceFactory = { instance: { supportsPrinting: false, @@ -2452,7 +2460,6 @@ exports.isPortraitOrientation = isPortraitOrientation; exports.isValidRotation = isValidRotation; exports.isValidScrollMode = isValidScrollMode; exports.isValidSpreadMode = isValidSpreadMode; -exports.noContextMenuHandler = noContextMenuHandler; exports.normalizeWheelEventDelta = normalizeWheelEventDelta; exports.normalizeWheelEventDirection = normalizeWheelEventDirection; exports.parseQueryString = parseQueryString; @@ -2798,9 +2805,6 @@ function getVisibleElements({ ids }; } -function noContextMenuHandler(evt) { - evt.preventDefault(); -} function normalizeWheelEventDirection(evt) { let delta = Math.hypot(evt.deltaX, evt.deltaY); const angle = Math.atan2(evt.deltaY, evt.deltaX); @@ -3405,12 +3409,11 @@ function addLinkAttributes(link, { if (!url || typeof url !== "string") { throw new Error('A valid "url" parameter must provided.'); } - const urlNullRemoved = (0, _ui_utils.removeNullCharacters)(url); if (enabled) { - link.href = link.title = urlNullRemoved; + link.href = link.title = url; } else { link.href = ""; - link.title = `Disabled: ${urlNullRemoved}`; + link.title = `Disabled: ${url}`; link.onclick = () => { return false; }; @@ -3830,6 +3833,269 @@ exports.SimpleLinkService = SimpleLinkService; +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.AltTextManager = void 0; +var _pdfjsLib = __webpack_require__(4); +class AltTextManager { + #boundUpdateUIState = this.#updateUIState.bind(this); + #boundSetPosition = this.#setPosition.bind(this); + #boundOnClick = this.#onClick.bind(this); + #currentEditor = null; + #cancelButton; + #dialog; + #eventBus; + #hasUsedPointer = false; + #optionDescription; + #optionDecorative; + #overlayManager; + #saveButton; + #textarea; + #uiManager; + #previousAltText = null; + #svgElement = null; + #rectElement = null; + #container; + #telemetryData = null; + constructor({ + dialog, + optionDescription, + optionDecorative, + textarea, + cancelButton, + saveButton + }, container, overlayManager, eventBus) { + this.#dialog = dialog; + this.#optionDescription = optionDescription; + this.#optionDecorative = optionDecorative; + this.#textarea = textarea; + this.#cancelButton = cancelButton; + this.#saveButton = saveButton; + this.#overlayManager = overlayManager; + this.#eventBus = eventBus; + this.#container = container; + dialog.addEventListener("close", this.#close.bind(this)); + dialog.addEventListener("contextmenu", event => { + if (event.target !== this.#textarea) { + event.preventDefault(); + } + }); + cancelButton.addEventListener("click", this.#finish.bind(this)); + saveButton.addEventListener("click", this.#save.bind(this)); + optionDescription.addEventListener("change", this.#boundUpdateUIState); + optionDecorative.addEventListener("change", this.#boundUpdateUIState); + this.#overlayManager.register(dialog); + } + get _elements() { + return (0, _pdfjsLib.shadow)(this, "_elements", [this.#optionDescription, this.#optionDecorative, this.#textarea, this.#saveButton, this.#cancelButton]); + } + #createSVGElement() { + if (this.#svgElement) { + return; + } + const svgFactory = new _pdfjsLib.DOMSVGFactory(); + const svg = this.#svgElement = svgFactory.createElement("svg"); + svg.setAttribute("width", "0"); + svg.setAttribute("height", "0"); + const defs = svgFactory.createElement("defs"); + svg.append(defs); + const mask = svgFactory.createElement("mask"); + defs.append(mask); + mask.setAttribute("id", "alttext-manager-mask"); + mask.setAttribute("maskContentUnits", "objectBoundingBox"); + let rect = svgFactory.createElement("rect"); + mask.append(rect); + rect.setAttribute("fill", "white"); + rect.setAttribute("width", "1"); + rect.setAttribute("height", "1"); + rect.setAttribute("x", "0"); + rect.setAttribute("y", "0"); + rect = this.#rectElement = svgFactory.createElement("rect"); + mask.append(rect); + rect.setAttribute("fill", "black"); + this.#dialog.append(svg); + } + async editAltText(uiManager, editor) { + if (this.#currentEditor || !editor) { + return; + } + this.#createSVGElement(); + this.#hasUsedPointer = false; + for (const element of this._elements) { + element.addEventListener("click", this.#boundOnClick); + } + const { + altText, + decorative + } = editor.altTextData; + if (decorative === true) { + this.#optionDecorative.checked = true; + this.#optionDescription.checked = false; + } else { + this.#optionDecorative.checked = false; + this.#optionDescription.checked = true; + } + this.#previousAltText = this.#textarea.value = altText?.trim() || ""; + this.#updateUIState(); + this.#currentEditor = editor; + this.#uiManager = uiManager; + this.#uiManager.removeEditListeners(); + this.#eventBus._on("resize", this.#boundSetPosition); + try { + await this.#overlayManager.open(this.#dialog); + this.#setPosition(); + } catch (ex) { + this.#close(); + throw ex; + } + } + #setPosition() { + if (!this.#currentEditor) { + return; + } + const dialog = this.#dialog; + const { + style + } = dialog; + const { + x: containerX, + y: containerY, + width: containerW, + height: containerH + } = this.#container.getBoundingClientRect(); + const { + innerWidth: windowW, + innerHeight: windowH + } = window; + const { + width: dialogW, + height: dialogH + } = dialog.getBoundingClientRect(); + const { + x, + y, + width, + height + } = this.#currentEditor.getClientDimensions(); + const MARGIN = 10; + const isLTR = this.#uiManager.direction === "ltr"; + const xs = Math.max(x, containerX); + const xe = Math.min(x + width, containerX + containerW); + const ys = Math.max(y, containerY); + const ye = Math.min(y + height, containerY + containerH); + this.#rectElement.setAttribute("width", `${(xe - xs) / windowW}`); + this.#rectElement.setAttribute("height", `${(ye - ys) / windowH}`); + this.#rectElement.setAttribute("x", `${xs / windowW}`); + this.#rectElement.setAttribute("y", `${ys / windowH}`); + let left = null; + let top = Math.max(y, 0); + top += Math.min(windowH - (top + dialogH), 0); + if (isLTR) { + if (x + width + MARGIN + dialogW < windowW) { + left = x + width + MARGIN; + } else if (x > dialogW + MARGIN) { + left = x - dialogW - MARGIN; + } + } else if (x > dialogW + MARGIN) { + left = x - dialogW - MARGIN; + } else if (x + width + MARGIN + dialogW < windowW) { + left = x + width + MARGIN; + } + if (left === null) { + top = null; + left = Math.max(x, 0); + left += Math.min(windowW - (left + dialogW), 0); + if (y > dialogH + MARGIN) { + top = y - dialogH - MARGIN; + } else if (y + height + MARGIN + dialogH < windowH) { + top = y + height + MARGIN; + } + } + if (top !== null) { + dialog.classList.add("positioned"); + if (isLTR) { + style.left = `${left}px`; + } else { + style.right = `${windowW - left - dialogW}px`; + } + style.top = `${top}px`; + } else { + dialog.classList.remove("positioned"); + style.left = ""; + style.top = ""; + } + } + #finish() { + if (this.#overlayManager.active === this.#dialog) { + this.#overlayManager.close(this.#dialog); + } + } + #close() { + this.#eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + subtype: this.#currentEditor.editorType, + data: this.#telemetryData || { + action: "alt_text_cancel", + alt_text_keyboard: !this.#hasUsedPointer + } + } + }); + this.#telemetryData = null; + this.#removeOnClickListeners(); + this.#uiManager?.addEditListeners(); + this.#eventBus._off("resize", this.#boundSetPosition); + this.#currentEditor = null; + this.#uiManager = null; + } + #updateUIState() { + this.#textarea.disabled = this.#optionDecorative.checked; + } + #save() { + const altText = this.#textarea.value.trim(); + const decorative = this.#optionDecorative.checked; + this.#currentEditor.altTextData = { + altText, + decorative + }; + this.#telemetryData = { + action: "alt_text_save", + alt_text_description: !!altText, + alt_text_edit: !!this.#previousAltText && this.#previousAltText !== altText, + alt_text_decorative: decorative, + alt_text_keyboard: !this.#hasUsedPointer + }; + this.#finish(); + } + #onClick(evt) { + if (evt.detail === 0) { + return; + } + this.#hasUsedPointer = true; + this.#removeOnClickListeners(); + } + #removeOnClickListeners() { + for (const element of this._elements) { + element.removeEventListener("click", this.#boundOnClick); + } + } + destroy() { + this.#uiManager = null; + this.#finish(); + this.#svgElement?.remove(); + this.#svgElement = this.#rectElement = null; + } +} +exports.AltTextManager = AltTextManager; + +/***/ }), +/* 9 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ value: true })); @@ -3899,7 +4165,7 @@ class AnnotationEditorParams { exports.AnnotationEditorParams = AnnotationEditorParams; /***/ }), -/* 9 */ +/* 10 */ /***/ ((__unused_webpack_module, exports) => { @@ -3957,7 +4223,7 @@ class OverlayManager { exports.OverlayManager = OverlayManager; /***/ }), -/* 10 */ +/* 11 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -4042,7 +4308,7 @@ class PasswordPrompt { exports.PasswordPrompt = PasswordPrompt; /***/ }), -/* 11 */ +/* 12 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -4052,7 +4318,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.PDFAttachmentViewer = void 0; var _pdfjsLib = __webpack_require__(4); -var _base_tree_viewer = __webpack_require__(12); +var _base_tree_viewer = __webpack_require__(13); var _event_utils = __webpack_require__(6); class PDFAttachmentViewer extends _base_tree_viewer.BaseTreeViewer { constructor(options) { @@ -4157,7 +4423,7 @@ class PDFAttachmentViewer extends _base_tree_viewer.BaseTreeViewer { exports.PDFAttachmentViewer = PDFAttachmentViewer; /***/ }), -/* 12 */ +/* 13 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -4259,7 +4525,7 @@ class BaseTreeViewer { exports.BaseTreeViewer = BaseTreeViewer; /***/ }), -/* 13 */ +/* 14 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -4270,7 +4536,7 @@ Object.defineProperty(exports, "__esModule", ({ exports.PDFCursorTools = void 0; var _pdfjsLib = __webpack_require__(4); var _ui_utils = __webpack_require__(3); -var _grab_to_pan = __webpack_require__(14); +var _grab_to_pan = __webpack_require__(15); class PDFCursorTools { #active = _ui_utils.CursorTool.SELECT; #prevActive = null; @@ -4380,7 +4646,7 @@ class PDFCursorTools { exports.PDFCursorTools = PDFCursorTools; /***/ }), -/* 14 */ +/* 15 */ /***/ ((__unused_webpack_module, exports) => { @@ -4482,7 +4748,7 @@ class GrabToPan { exports.GrabToPan = GrabToPan; /***/ }), -/* 15 */ +/* 16 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -4696,7 +4962,7 @@ class PDFDocumentProperties { exports.PDFDocumentProperties = PDFDocumentProperties; /***/ }), -/* 16 */ +/* 17 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -4705,7 +4971,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFFindBar = void 0; -var _pdf_find_controller = __webpack_require__(17); +var _pdf_find_controller = __webpack_require__(18); var _ui_utils = __webpack_require__(3); const MATCHES_COUNT_LIMIT = 1000; class PDFFindBar { @@ -4869,7 +5135,7 @@ class PDFFindBar { exports.PDFFindBar = PDFFindBar; /***/ }), -/* 17 */ +/* 18 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -4879,7 +5145,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.PDFFindController = exports.FindState = void 0; var _ui_utils = __webpack_require__(3); -var _pdf_find_utils = __webpack_require__(18); +var _pdf_find_utils = __webpack_require__(19); var _pdfjsLib = __webpack_require__(4); const FindState = { FOUND: 0, @@ -5607,7 +5873,7 @@ class PDFFindController { exports.PDFFindController = PDFFindController; /***/ }), -/* 18 */ +/* 19 */ /***/ ((__unused_webpack_module, exports) => { @@ -5693,7 +5959,7 @@ function getNormalizeWithNFKC() { } /***/ }), -/* 19 */ +/* 20 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -6172,7 +6438,7 @@ function isDestArraysEqual(firstDest, secondDest) { } /***/ }), -/* 20 */ +/* 21 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -6181,7 +6447,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFLayerViewer = void 0; -var _base_tree_viewer = __webpack_require__(12); +var _base_tree_viewer = __webpack_require__(13); class PDFLayerViewer extends _base_tree_viewer.BaseTreeViewer { constructor(options) { super(options); @@ -6338,7 +6604,7 @@ class PDFLayerViewer extends _base_tree_viewer.BaseTreeViewer { exports.PDFLayerViewer = PDFLayerViewer; /***/ }), -/* 21 */ +/* 22 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -6347,7 +6613,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFOutlineViewer = void 0; -var _base_tree_viewer = __webpack_require__(12); +var _base_tree_viewer = __webpack_require__(13); var _pdfjsLib = __webpack_require__(4); var _ui_utils = __webpack_require__(3); class PDFOutlineViewer extends _base_tree_viewer.BaseTreeViewer { @@ -6624,7 +6890,7 @@ class PDFOutlineViewer extends _base_tree_viewer.BaseTreeViewer { exports.PDFOutlineViewer = PDFOutlineViewer; /***/ }), -/* 22 */ +/* 23 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -6918,7 +7184,7 @@ class PDFPresentationMode { exports.PDFPresentationMode = PDFPresentationMode; /***/ }), -/* 23 */ +/* 24 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -7043,7 +7309,7 @@ class PDFRenderingQueue { exports.PDFRenderingQueue = PDFRenderingQueue; /***/ }), -/* 24 */ +/* 25 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -7415,7 +7681,7 @@ class PDFScriptingManager { exports.PDFScriptingManager = PDFScriptingManager; /***/ }), -/* 25 */ +/* 26 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -7735,7 +8001,7 @@ class PDFSidebar { exports.PDFSidebar = PDFSidebar; /***/ }), -/* 26 */ +/* 27 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -7745,7 +8011,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.PDFThumbnailViewer = void 0; var _ui_utils = __webpack_require__(3); -var _pdf_thumbnail_view = __webpack_require__(27); +var _pdf_thumbnail_view = __webpack_require__(28); const THUMBNAIL_SCROLL_MARGIN = -19; const THUMBNAIL_SELECTED_CLASS = "selected"; class PDFThumbnailViewer { @@ -7954,7 +8220,7 @@ class PDFThumbnailViewer { exports.PDFThumbnailViewer = PDFThumbnailViewer; /***/ }), -/* 27 */ +/* 28 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -8269,7 +8535,7 @@ class PDFThumbnailView { exports.PDFThumbnailView = PDFThumbnailView; /***/ }), -/* 28 */ +/* 29 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -8280,9 +8546,9 @@ Object.defineProperty(exports, "__esModule", ({ exports.PagesCountLimit = exports.PDFViewer = exports.PDFPageViewBuffer = void 0; var _pdfjsLib = __webpack_require__(4); var _ui_utils = __webpack_require__(3); -var _l10n_utils = __webpack_require__(29); -var _pdf_page_view = __webpack_require__(30); -var _pdf_rendering_queue = __webpack_require__(23); +var _l10n_utils = __webpack_require__(30); +var _pdf_page_view = __webpack_require__(31); +var _pdf_rendering_queue = __webpack_require__(24); var _pdf_link_service = __webpack_require__(7); const DEFAULT_CACHE_SIZE = 10; const PagesCountLimit = { @@ -8345,6 +8611,7 @@ class PDFPageViewBuffer { exports.PDFPageViewBuffer = PDFPageViewBuffer; class PDFViewer { #buffer = null; + #altTextManager = null; #annotationEditorMode = _pdfjsLib.AnnotationEditorType.NONE; #annotationEditorUIManager = null; #annotationMode = _pdfjsLib.AnnotationMode.ENABLE_FORMS; @@ -8361,7 +8628,7 @@ class PDFViewer { #scaleTimeoutId = null; #textLayerMode = _ui_utils.TextLayerMode.ENABLE; constructor(options) { - const viewerVersion = '3.10.111'; + const viewerVersion = '3.11.174'; if (_pdfjsLib.version !== viewerVersion) { throw new Error(`The API version "${_pdfjsLib.version}" does not match the Viewer version "${viewerVersion}".`); } @@ -8378,6 +8645,7 @@ class PDFViewer { this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService(); this.downloadManager = options.downloadManager || null; this.findController = options.findController || null; + this.#altTextManager = options.altTextManager || null; if (this.findController) { this.findController.onIsPageVisible = pageNumber => this._getVisiblePages().ids.has(pageNumber); } @@ -8768,7 +9036,7 @@ class PDFViewer { if (pdfDocument.isPureXfa) { console.warn("Warning: XFA-editing is not implemented."); } else if (isValidAnnotationEditorMode(mode)) { - this.#annotationEditorUIManager = new _pdfjsLib.AnnotationEditorUIManager(this.container, this.viewer, this.eventBus, pdfDocument, this.pageColors); + this.#annotationEditorUIManager = new _pdfjsLib.AnnotationEditorUIManager(this.container, this.viewer, this.#altTextManager, this.eventBus, pdfDocument, this.pageColors); if (mode !== _pdfjsLib.AnnotationEditorType.NONE) { this.#annotationEditorUIManager.updateMode(mode); } @@ -9791,7 +10059,7 @@ class PDFViewer { exports.PDFViewer = PDFViewer; /***/ }), -/* 29 */ +/* 30 */ /***/ ((__unused_webpack_module, exports) => { @@ -9847,7 +10115,10 @@ const DEFAULT_L10N_STRINGS = { 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_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}}%"; @@ -9886,7 +10157,7 @@ const NullL10n = { exports.NullL10n = NullL10n; /***/ }), -/* 30 */ +/* 31 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -9897,16 +10168,16 @@ Object.defineProperty(exports, "__esModule", ({ exports.PDFPageView = void 0; var _pdfjsLib = __webpack_require__(4); var _ui_utils = __webpack_require__(3); -var _annotation_editor_layer_builder = __webpack_require__(31); -var _annotation_layer_builder = __webpack_require__(32); +var _annotation_editor_layer_builder = __webpack_require__(32); +var _annotation_layer_builder = __webpack_require__(33); var _app_options = __webpack_require__(5); -var _l10n_utils = __webpack_require__(29); +var _l10n_utils = __webpack_require__(30); var _pdf_link_service = __webpack_require__(7); -var _struct_tree_layer_builder = __webpack_require__(33); -var _text_accessibility = __webpack_require__(34); -var _text_highlighter = __webpack_require__(35); -var _text_layer_builder = __webpack_require__(36); -var _xfa_layer_builder = __webpack_require__(37); +var _struct_tree_layer_builder = __webpack_require__(34); +var _text_accessibility = __webpack_require__(35); +var _text_highlighter = __webpack_require__(36); +var _text_layer_builder = __webpack_require__(37); +var _xfa_layer_builder = __webpack_require__(38); const MAX_CANVAS_PIXELS = _app_options.compatibilityParams.maxCanvasPixels || 16777216; const DEFAULT_LAYER_PROPERTIES = () => { return null; @@ -10642,7 +10913,7 @@ class PDFPageView { exports.PDFPageView = PDFPageView; /***/ }), -/* 31 */ +/* 32 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -10652,7 +10923,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.AnnotationEditorLayerBuilder = void 0; var _pdfjsLib = __webpack_require__(4); -var _l10n_utils = __webpack_require__(29); +var _l10n_utils = __webpack_require__(30); class AnnotationEditorLayerBuilder { #annotationLayer = null; #uiManager; @@ -10688,6 +10959,7 @@ class AnnotationEditorLayerBuilder { div.className = "annotationEditorLayer"; div.tabIndex = 0; div.hidden = true; + div.dir = this.#uiManager.direction; this.pageDiv.append(div); this.annotationEditorLayer = new _pdfjsLib.AnnotationEditorLayer({ uiManager: this.#uiManager, @@ -10732,7 +11004,7 @@ class AnnotationEditorLayerBuilder { exports.AnnotationEditorLayerBuilder = AnnotationEditorLayerBuilder; /***/ }), -/* 32 */ +/* 33 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -10742,7 +11014,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.AnnotationLayerBuilder = void 0; var _pdfjsLib = __webpack_require__(4); -var _l10n_utils = __webpack_require__(29); +var _l10n_utils = __webpack_require__(30); var _ui_utils = __webpack_require__(3); class AnnotationLayerBuilder { #onPresentationModeChanged = null; @@ -10873,8 +11145,8 @@ class AnnotationLayerBuilder { exports.AnnotationLayerBuilder = AnnotationLayerBuilder; /***/ }), -/* 33 */ -/***/ ((__unused_webpack_module, exports) => { +/* 34 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -10882,6 +11154,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.StructTreeLayerBuilder = void 0; +var _ui_utils = __webpack_require__(3); const PDF_ROLE_TO_HTML_ROLE = { Document: null, DocumentFragment: null, @@ -10949,14 +11222,19 @@ class StructTreeLayerBuilder { } } #setAttributes(structElement, htmlElement) { - if (structElement.alt !== undefined) { - htmlElement.setAttribute("aria-label", structElement.alt); + const { + alt, + id, + lang + } = structElement; + if (alt !== undefined) { + htmlElement.setAttribute("aria-label", (0, _ui_utils.removeNullCharacters)(alt)); } - if (structElement.id !== undefined) { - htmlElement.setAttribute("aria-owns", structElement.id); + if (id !== undefined) { + htmlElement.setAttribute("aria-owns", id); } - if (structElement.lang !== undefined) { - htmlElement.setAttribute("lang", structElement.lang); + if (lang !== undefined) { + htmlElement.setAttribute("lang", (0, _ui_utils.removeNullCharacters)(lang, true)); } } #walk(node) { @@ -10992,7 +11270,7 @@ class StructTreeLayerBuilder { exports.StructTreeLayerBuilder = StructTreeLayerBuilder; /***/ }), -/* 34 */ +/* 35 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -11110,33 +11388,36 @@ class TextAccessibilityManager { id } = element; if (!id) { - return; + return null; } if (!this.#enabled) { this.#waitingElements.set(element, isRemovable); - return; + return null; } if (isRemovable) { this.removePointerInTextLayer(element); } const children = this.#textChildren; if (!children || children.length === 0) { - return; + return null; } const index = (0, _ui_utils.binarySearchFirstItem)(children, node => TextAccessibilityManager.#compareElementPositions(element, node) < 0); const nodeIndex = Math.max(0, index - 1); - this.#addIdToAriaOwns(id, children[nodeIndex]); + const child = children[nodeIndex]; + this.#addIdToAriaOwns(id, child); this.#textNodes.set(id, nodeIndex); + const parent = child.parentNode; + return parent?.classList.contains("markedContent") ? parent.id : null; } moveElementInDOM(container, element, contentElement, isRemovable) { - this.addPointerInTextLayer(contentElement, isRemovable); + const id = this.addPointerInTextLayer(contentElement, isRemovable); if (!container.hasChildNodes()) { container.append(element); - return; + return id; } const children = Array.from(container.childNodes).filter(node => node !== element); if (children.length === 0) { - return; + return id; } const elementToCompare = contentElement || element; const index = (0, _ui_utils.binarySearchFirstItem)(children, node => TextAccessibilityManager.#compareElementPositions(elementToCompare, node) < 0); @@ -11145,12 +11426,13 @@ class TextAccessibilityManager { } else { children[index - 1].after(element); } + return id; } } exports.TextAccessibilityManager = TextAccessibilityManager; /***/ }), -/* 35 */ +/* 36 */ /***/ ((__unused_webpack_module, exports) => { @@ -11380,7 +11662,7 @@ class TextHighlighter { exports.TextHighlighter = TextHighlighter; /***/ }), -/* 36 */ +/* 37 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -11538,7 +11820,7 @@ class TextLayerBuilder { exports.TextLayerBuilder = TextLayerBuilder; /***/ }), -/* 37 */ +/* 38 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -11618,7 +11900,7 @@ class XfaLayerBuilder { exports.XfaLayerBuilder = XfaLayerBuilder; /***/ }), -/* 38 */ +/* 39 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -11628,9 +11910,9 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.SecondaryToolbar = void 0; var _ui_utils = __webpack_require__(3); -var _pdf_viewer = __webpack_require__(28); +var _pdf_viewer = __webpack_require__(29); class SecondaryToolbar { - constructor(options, eventBus, externalServices) { + constructor(options, eventBus) { this.toolbar = options.toolbar; this.toggleButton = options.toggleButton; this.buttons = [{ @@ -11745,7 +12027,6 @@ class SecondaryToolbar { pageRotateCcw: options.pageRotateCcwButton }; this.eventBus = eventBus; - this.externalServices = externalServices; this.opened = false; this.#bindClickListeners(); this.#bindCursorToolsListener(options); @@ -11796,10 +12077,13 @@ class SecondaryToolbar { if (close) { this.close(); } - this.externalServices.reportTelemetry({ - type: "buttons", - data: { - id: element.id + this.eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "buttons", + data: { + id: element.id + } } }); }); @@ -11897,7 +12181,7 @@ class SecondaryToolbar { exports.SecondaryToolbar = SecondaryToolbar; /***/ }), -/* 39 */ +/* 40 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -12056,7 +12340,7 @@ class Toolbar { this.blur(); } }); - scaleSelect.oncontextmenu = _ui_utils.noContextMenuHandler; + scaleSelect.oncontextmenu = _pdfjsLib.noContextMenu; this.eventBus._on("localized", () => { this.#wasLocalized = true; this.#adjustScaleWidth(); @@ -12190,7 +12474,7 @@ class Toolbar { exports.Toolbar = Toolbar; /***/ }), -/* 40 */ +/* 41 */ /***/ ((__unused_webpack_module, exports) => { @@ -12267,7 +12551,7 @@ class ViewHistory { exports.ViewHistory = ViewHistory; /***/ }), -/* 41 */ +/* 42 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -12384,7 +12668,7 @@ class BasePreferences { exports.BasePreferences = BasePreferences; /***/ }), -/* 42 */ +/* 43 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -12457,7 +12741,7 @@ class DownloadManager { exports.DownloadManager = DownloadManager; /***/ }), -/* 43 */ +/* 44 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -12466,8 +12750,8 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.GenericL10n = void 0; -__webpack_require__(44); -var _l10n_utils = __webpack_require__(29); +__webpack_require__(45); +var _l10n_utils = __webpack_require__(30); const PARTIAL_LANG_CODES = { en: "en-US", es: "es-ES", @@ -12519,7 +12803,7 @@ class GenericL10n { exports.GenericL10n = GenericL10n; /***/ }), -/* 44 */ +/* 45 */ /***/ (() => { @@ -13244,7 +13528,7 @@ document.webL10n = function (window, document) { }(window, document); /***/ }), -/* 45 */ +/* 46 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -13303,7 +13587,7 @@ class GenericScripting { exports.GenericScripting = GenericScripting; /***/ }), -/* 46 */ +/* 47 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -13314,7 +13598,7 @@ Object.defineProperty(exports, "__esModule", ({ exports.PDFPrintService = void 0; var _pdfjsLib = __webpack_require__(4); var _app = __webpack_require__(2); -var _print_utils = __webpack_require__(47); +var _print_utils = __webpack_require__(48); let activeService = null; let dialog = null; let overlayManager = null; @@ -13560,7 +13844,7 @@ _app.PDFPrintServiceFactory.instance = { }; /***/ }), -/* 47 */ +/* 48 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -13571,7 +13855,7 @@ Object.defineProperty(exports, "__esModule", ({ exports.getXfaHtmlForPrinting = getXfaHtmlForPrinting; var _pdfjsLib = __webpack_require__(4); var _pdf_link_service = __webpack_require__(7); -var _xfa_layer_builder = __webpack_require__(37); +var _xfa_layer_builder = __webpack_require__(38); function getXfaHtmlForPrinting(printContainer, pdfDocument) { const xfaHtml = pdfDocument.allXfaHtml; const linkService = new _pdf_link_service.SimpleLinkService(); @@ -13645,13 +13929,13 @@ Object.defineProperty(exports, "PDFViewerApplicationOptions", ({ } })); __webpack_require__(1); -__webpack_require__(46); +__webpack_require__(47); var _ui_utils = __webpack_require__(3); var _app_options = __webpack_require__(5); var _pdf_link_service = __webpack_require__(7); var _app = __webpack_require__(2); -const pdfjsVersion = '3.10.111'; -const pdfjsBuild = 'e142baecb'; +const pdfjsVersion = '3.11.174'; +const pdfjsBuild = 'ce8716743'; const AppConstants = { LinkTarget: _pdf_link_service.LinkTarget, RenderingStates: _ui_utils.RenderingStates, @@ -13767,6 +14051,14 @@ function getViewerConfiguration() { linearized: document.getElementById("linearizedField") } }, + altTextDialog: { + dialog: document.getElementById("altTextDialog"), + optionDescription: document.getElementById("descriptionButton"), + optionDecorative: document.getElementById("decorativeButton"), + textarea: document.getElementById("descriptionTextarea"), + cancelButton: document.getElementById("altTextCancel"), + saveButton: document.getElementById("altTextSave") + }, annotationEditorParams: { editorFreeTextFontSize: document.getElementById("editorFreeTextFontSize"), editorFreeTextColor: document.getElementById("editorFreeTextColor"),