Plugin Directory

Changeset 3480712


Ignore:
Timestamp:
03/11/2026 11:59:26 PM (2 weeks ago)
Author:
wrcisco
Message:

Update to version 1.0.0

Location:
simple-ebook-viewer
Files:
111 added
43 deleted
11 edited

Legend:

Unmodified
Added
Removed
  • simple-ebook-viewer/trunk/README.md

    r3301587 r3480712  
    6565* **`default-font-size`**
    6666  - accepted values: "**small**", "**medium**", "**large**", "**x-large**" (default: **medium**)
     67* **`font-family`**
     68  - accepted_values: "**auto**", "**serif**", "**sans-serif**", "**monospace**", "**opendyslexic**" (default: **auto**)
    6769* **`page-margins`**
    6870  - accepted values: "**small**", "**medium**", "**large**" (default: **medium**)
     71* **`show-annotations`**
     72  - accepted values: "**true**", "**false**" (default: **false**)
     73* **`show-page-delimiters`**
     74  - accepted values: "**true**", "**false**" (default: **false**)
    6975* **`zoom`**
    7076  - accepted values: "**fit-page**", "**fit-width**" or a number in the range **10 - 400** (default: **fit-page**)
     
    7278  - accepted values: "**auto**", "**sepia**", "**light**", "**dark**" (default: **auto**)
    7379
    74 Layout, max-pages, default-font-size and page-margins are only available for reflowable ebooks, while zoom is only available for fixed layout ones.
     80`Layout`, `max-pages`, `default-font-size` and `page-margins` are only available for reflowable ebooks, while `zoom` is only available for fixed layout ones.
    7581
    76 Max-pages is the maximum number of pages (in the "paginated" layout) that the user will be able to see in a single view (if there is enough screen space).
     82`Max-pages` is the maximum number of pages (in the "paginated" layout) that the user will be able to see in a single view (if there is enough screen space).
    7783
    78 Color-scheme: "auto" means that the Viewer will adapt to the preferred color-scheme set by the user in their device or browser (light or dark).
     84`Show-annotations` and `show-page-delimiters` let the user see on the pages the Calibre annotations (as highlighted text, if there are Calibre annotations in the ebook) and the page delimiters (as short vertical bars, if the ebook contains a page list).
     85
     86`Color-scheme`: "auto" means that the Viewer will adapt to the preferred color-scheme set by the user in their device or browser (light or dark).
    7987
    8088For most ebooks these preferences should be enough, but sometimes there are ebooks with style rules that don't play well with the styles set by the Viewer, so the users have also the option to apply some filters to the Viewer's colors (with the menu entry "Color filter...").
     
    92100  - accepted values: a valid CSS hex color code (default: **#FFFFFF**)
    93101
    94 Set activate-color-filter to "true" is necessary to enable all the other filters, and set bg-transparent-filter to false is necessary to enable bg-color-filter.
     102Set `activate-color-filter` to "true" is necessary to enable all the other filters, and set `bg-transparent-filter` to false is necessary to enable `bg-color-filter`.
    95103
    96 Bg-transparent-filter and bg-color-filter are available for reflowable ebooks only.
     104`Bg-transparent-filter` and `bg-color-filter` are available for reflowable ebooks only.
    97105
    98 Invert-color-filter inverts the lightness of the colors. With a value of 0 it has no effect, with a value of 1, the white will become black and the black will become white.
     106`Invert-color-filter` inverts the lightness of the colors. With a value of 0 it has no effect, with a value of 1, the white will become black and the black will become white.
    99107
    100 Rotate-color-filter rotates the hues of all the colors in the ebook, like in a [Color Wheel](https://developer.mozilla.org/en-US/docs/Glossary/Color_wheel) (so, no effect on black and white).
     108`Rotate-color-filter` rotates the hues of all the colors in the ebook, like in a [Color Wheel](https://developer.mozilla.org/en-US/docs/Glossary/Color_wheel) (so, no effect on black and white).
     109
     110There are some other settings that the users won't be able to change by themselves. These are:
     111* **`always-full-viewport`**
     112  - accepted values: "**true**", "**false**" (default: **false**. If **true**, **return-to-url** is also required)
     113* **`return-to-url`**
     114  - accepted values: a URL with the same hostname than the page that contains the ebook viewer (default: '')
     115* **`real-fullscreen`**
     116  - accepted values: "**true**", "**false**" (default: **false**)
     117* **`allow-js`**
     118  - accepted values: "**true**", "**false**" (default: **false**)
     119* **`math-styles`**
     120  - accepted values: "**fonts**", "**styles**", "**all**" (default: '')
     121* **`ebook-author`**
     122  - accepted values: any string, max 260 characters (default: '')
     123* **`ebook-title`**
     124  - accepted values: any string, max 260 characters (default: '')
     125* **`popup-notes`**
     126  - accepted values: "**true**", "**false**" (default: **true**)
     127
     128With `always-full-viewport` set to "true", the ebook viewer will automatically cover the entire webpage when it is opened, and the "full screen" icon will be replaced by a "close viewer" icon. `always-full-viewport="true"` requires that also `return-to-url` is present, with a valid URL that indicates the destination of the user when they choose to close the viewer. The URL can be relative, like "/" or "/books-gallery", or it can be absolute, but it needs to have the same hostname of the webpage that contains the ebook viewer (e.g. if the ebook viewer is opened in https://www.example.com/ebook-viewer, the URL in `return-to-url` needs to start with https://www.example.com).
     129
     130If `real-fullscreen` is set to "true", the ebook viewer will cover the entire screen instead of only the viewport of the webpage when the user clicks on the "full screen" icon. With `real-fullscreen` set to true, `always-full-viewport` is ignored, since the full screen requires an explicit action by the user.
     131
     132`Allow-js`: normally, the plugin forbids, as far as possible, script execution from inside the ebooks. If you set `allow-js` to true, this restriction is relaxed, and scripts within the ebook can be executed.
     133**Caveat 1**: you need to be absolutely certain that the code inside the ebook is not malicious, since it can harm your entire webpage.
     134**Caveat 2**: the ebook viewer is not strongly equipped to deal with dynamic content created or removed after the ebook opening, so you might encounter errors or inaccuracies when jumping from one ebook location to another in such a circumstance.
     135
     136`Math-styles`: in recent years all the major browser have implemented a good deal of the MathML Core specification, so it is now possible to represent natively many mathematical expression without the use of third party libraries. However, not all browsers and systems load automatically appropriate fonts. With math-styles set to "fonts" or "all", all the contents of MathML expression will use the Latin Modern font.
     137Another shortcoming in the current support of MathML, is that only Gecko based browsers (i.e. Firefox) implement a breaking lines algorithm, so long math expressions within small screens usually don't fit entirely. With math-styles set to "styles" or "all", the plugin will use some html+css tricks to try to allow either line breaks or horizontal scrolling.
     138
     139`Ebook-author` and `ebook-title`: you can use these optional values to override the ones that the ebook viewer retrieves from the ebook metadata in order to display them to the users.
     140
     141`Popup-notes`: show footnotes and endnotes as popup instead of just links. The notes (and their references) need to be marked with the appropriate epub:type attributes to ensure that they are displayed as popups (the ebook viewer will try to recognize them anyway, but without guarantees).
    101142
    102143### Development
     
    126167This plugin does not track in any way its users. It uses the WordPress REST API to retrieve the url of the ebooks to display, so it uses the technical cookies setup by WordPress to assure the correctness and the security of the communication.
    127168It also stores in the local storage of the user's browser the last viewed page of the displayed ebook and the preferences about the appearance of the ebooks in the Viewer, as detailed in the previous section, with the only purpose to provide the best experience to the user.
     169If the user activates the Text-To-Speech functionality and the chosen voice is a remote voice, the browser will send to the remote service the text to be synthesized, the voice and language parameters and, as with any network request, the IP address and the browser identifiers.
    128170
    129171### Warning
     
    137179which is distributed under the MIT license.
    138180
    139 The foliate-js library embeds other three libraries:
     181As secondary dependencies of the foliate-js library, the plugin embeds other three libraries:
    140182* zip.js (https://github.com/gildas-lormeau/zip.js), licensed under the BSD-3-Clause;
    141 * fflate (https://github.com/101arrowz/fflate), MIT licensed;
     183* fflate (https://github.com/101arrowz/fflate), MIT licensed.
    142184* PDF.js (https://github.com/mozilla/pdf.js), licensed under the Apache v2.0 license.
    143185
    144 This plugin also embeds vite-for-wp by Dzikri Aziz (https://github.com/kucrut/vite-for-wp),
    145 licensed under the GPL v2.0 license.
     186PDF.js is present in the repository's source code, but is not included in the distribution of the current version of the plugin.
     187
     188Other libraries embedded by the plugin are:
     189* vite-for-wp by Dzikri Aziz (https://github.com/kucrut/vite-for-wp),
     190licensed under the GPL v2.0 license
     191* Speech Rule Engine (https://github.com/Speech-Rule-Engine/speech-rule-engine),
     192licensed under the Apache v2.0 license
     193
     194Embedded fonts:
     195* OpenDyslexic (https://opendyslexic.org/) by Abbie Gonzales, licensed under the SIL Open Font License v1.1;
     196* Manrope (https://github.com/sharanda/manrope) by The Manrope Project Authors, licensed under the SIL Open Font License v1.1;
     197* Latin Modern (https://www.gust.org.pl/projects/e-foundry) by the Polish TeX Users Group, licensed under the GUST Font License.
     198
     199OpenDyslexic and Latin Modern fonts have been converted from their original OpenType format to the woff2 format for use on the web, without, at the best of my knowledge, modifying their internal parameters and metadata.
  • simple-ebook-viewer/trunk/dist/manifest.json

    r3301587 r3480712  
    11{
    2   "C:/Users/franc/gits/embedebooks/wordpress/wp-content/plugins/simple-ebook-viewer/vendor/foliate-js/vendor/pdfjs/annotation_layer_builder.css": {
    3     "file": "assets/annotation_layer_builder-LCdmLuw8.css",
    4     "src": "C:/Users/franc/gits/embedebooks/wordpress/wp-content/plugins/simple-ebook-viewer/vendor/foliate-js/vendor/pdfjs/annotation_layer_builder.css"
     2  "_simebv-viewer-DDj33M1Y.css": {
     3    "file": "assets/simebv-viewer-DDj33M1Y.css",
     4    "src": "_simebv-viewer-DDj33M1Y.css"
    55  },
    6   "C:/Users/franc/gits/embedebooks/wordpress/wp-content/plugins/simple-ebook-viewer/vendor/foliate-js/vendor/pdfjs/text_layer_builder.css": {
    7     "file": "assets/text_layer_builder-CK6eTUxR.css",
    8     "src": "C:/Users/franc/gits/embedebooks/wordpress/wp-content/plugins/simple-ebook-viewer/vendor/foliate-js/vendor/pdfjs/text_layer_builder.css"
    9   },
    10   "_index-BE0jtfAT.js": {
    11     "file": "assets/index-BE0jtfAT.js",
    12     "name": "index",
    13     "imports": [
    14       "_url-Wrlwsv9T.js",
    15       "_pdf-Z5ZBySEz.js"
    16     ]
    17   },
    18   "_index-CuYyqOcS.js": {
    19     "file": "assets/index-CuYyqOcS.js",
    20     "name": "index",
    21     "isDynamicEntry": true,
    22     "imports": [
    23       "_url-Wrlwsv9T.js",
    24       "_index-BE0jtfAT.js"
    25     ]
    26   },
    27   "_index-D4gP0cnb.js": {
    28     "file": "assets/index-D4gP0cnb.js",
    29     "name": "index",
    30     "isDynamicEntry": true,
    31     "imports": [
    32       "_url-Wrlwsv9T.js",
    33       "_index-BE0jtfAT.js"
    34     ]
    35   },
    36   "_pdf-Z5ZBySEz.js": {
    37     "file": "assets/pdf-Z5ZBySEz.js",
    38     "name": "pdf",
    39     "isDynamicEntry": true,
    40     "imports": [
    41       "src/js/simebv-viewer.js"
    42     ],
    43     "dynamicImports": [
    44       "node_modules/node-stdlib-browser/esm/mock/empty.js",
    45       "_index-D4gP0cnb.js",
    46       "_index-CuYyqOcS.js",
    47       "_url-B8ma4Nbk.js"
    48     ],
    49     "assets": [
    50       "assets/pdf-et8PL5bm.mjs",
    51       "assets/pdf.mjs-Clxyfw0k.map",
    52       "assets/pdf.worker-DHaD_gt7.mjs",
    53       "assets/pdf.worker.mjs-BEagiU_I.map",
    54       "assets/annotation_layer_builder-LCdmLuw8.css",
    55       "assets/text_layer_builder-CK6eTUxR.css"
    56     ]
    57   },
    58   "_url-B8ma4Nbk.js": {
    59     "file": "assets/url-B8ma4Nbk.js",
    60     "name": "url",
    61     "isDynamicEntry": true,
    62     "imports": [
    63       "_url-Wrlwsv9T.js"
    64     ]
    65   },
    66   "_url-Wrlwsv9T.js": {
    67     "file": "assets/url-Wrlwsv9T.js",
    68     "name": "url"
    69   },
    70   "node_modules/node-stdlib-browser/esm/mock/empty.js": {
    71     "file": "assets/empty-CRMO4_-l.js",
    72     "name": "empty",
    73     "src": "node_modules/node-stdlib-browser/esm/mock/empty.js",
    74     "isDynamicEntry": true
    75   },
    76   "resources/fonts/manrope/Manrope-VariableFont_wght.woff2": {
    77     "file": "assets/Manrope-VariableFont_wght-DFQ-JMC6.woff2",
    78     "src": "resources/fonts/manrope/Manrope-VariableFont_wght.woff2"
    79   },
    80   "src/js/simebv-viewer.js": {
    81     "file": "assets/simebv-viewer-lib-DwWpJfpU.js",
    82     "name": "simebv-viewer-lib",
    83     "src": "src/js/simebv-viewer.js",
    84     "isEntry": true,
     6  "_simebv-viewer-DrOW_OfM.js": {
     7    "file": "assets/simebv-viewer-DrOW_OfM.js",
     8    "name": "simebv-viewer",
    859    "dynamicImports": [
    8610      "vendor/foliate-js/vendor/zip.js",
     
    8913      "vendor/foliate-js/fb2.js",
    9014      "vendor/foliate-js/epub.js",
    91       "_pdf-Z5ZBySEz.js",
    9215      "vendor/foliate-js/mobi.js",
    9316      "vendor/foliate-js/vendor/fflate.js",
     
    9619      "vendor/foliate-js/paginator.js",
    9720      "vendor/foliate-js/search.js",
    98       "vendor/foliate-js/tts.js"
     21      "vendor/foliate-js/tts.js",
     22      "_sre-OB9-ZODU.js",
     23      "vendor/foliate-js/mobi.js"
    9924    ],
    10025    "css": [
    101       "assets/simebv-viewer-lib-Di7Vv8I8.css"
     26      "assets/simebv-viewer-DDj33M1Y.css"
    10227    ],
    10328    "assets": [
     29      "assets/latinmodern-math-D8vU1ynp.woff2",
     30      "assets/lmroman10-regular-MgNYzB3C.woff2",
     31      "assets/lmroman10-bold-Bt2TjdBf.woff2",
     32      "assets/lmroman10-italic-2lV75sgr.woff2",
     33      "assets/lmroman10-bolditalic-BTV195Vo.woff2",
     34      "assets/OpenDyslexic-Regular-mq3eNZ-9.woff2",
     35      "assets/OpenDyslexic-Bold-asFfTek6.woff2",
     36      "assets/OpenDyslexic-Italic-7X3nXTrH.woff2",
     37      "assets/OpenDyslexic-BoldItalic-olh_H-lW.woff2",
    10438      "assets/Manrope-VariableFont_wght-DFQ-JMC6.woff2"
    10539    ]
    10640  },
     41  "_sre-OB9-ZODU.js": {
     42    "file": "assets/sre-OB9-ZODU.js",
     43    "name": "sre",
     44    "isDynamicEntry": true
     45  },
     46  "resources/fonts/latinmodern/latinmodern-math.woff2": {
     47    "file": "assets/latinmodern-math-D8vU1ynp.woff2",
     48    "src": "resources/fonts/latinmodern/latinmodern-math.woff2"
     49  },
     50  "resources/fonts/latinmodern/lmroman10-bold.woff2": {
     51    "file": "assets/lmroman10-bold-Bt2TjdBf.woff2",
     52    "src": "resources/fonts/latinmodern/lmroman10-bold.woff2"
     53  },
     54  "resources/fonts/latinmodern/lmroman10-bolditalic.woff2": {
     55    "file": "assets/lmroman10-bolditalic-BTV195Vo.woff2",
     56    "src": "resources/fonts/latinmodern/lmroman10-bolditalic.woff2"
     57  },
     58  "resources/fonts/latinmodern/lmroman10-italic.woff2": {
     59    "file": "assets/lmroman10-italic-2lV75sgr.woff2",
     60    "src": "resources/fonts/latinmodern/lmroman10-italic.woff2"
     61  },
     62  "resources/fonts/latinmodern/lmroman10-regular.woff2": {
     63    "file": "assets/lmroman10-regular-MgNYzB3C.woff2",
     64    "src": "resources/fonts/latinmodern/lmroman10-regular.woff2"
     65  },
     66  "resources/fonts/manrope/Manrope-VariableFont_wght.woff2": {
     67    "file": "assets/Manrope-VariableFont_wght-DFQ-JMC6.woff2",
     68    "src": "resources/fonts/manrope/Manrope-VariableFont_wght.woff2"
     69  },
     70  "resources/fonts/opendyslexic/OpenDyslexic-Bold.woff2": {
     71    "file": "assets/OpenDyslexic-Bold-asFfTek6.woff2",
     72    "src": "resources/fonts/opendyslexic/OpenDyslexic-Bold.woff2"
     73  },
     74  "resources/fonts/opendyslexic/OpenDyslexic-BoldItalic.woff2": {
     75    "file": "assets/OpenDyslexic-BoldItalic-olh_H-lW.woff2",
     76    "src": "resources/fonts/opendyslexic/OpenDyslexic-BoldItalic.woff2"
     77  },
     78  "resources/fonts/opendyslexic/OpenDyslexic-Italic.woff2": {
     79    "file": "assets/OpenDyslexic-Italic-7X3nXTrH.woff2",
     80    "src": "resources/fonts/opendyslexic/OpenDyslexic-Italic.woff2"
     81  },
     82  "resources/fonts/opendyslexic/OpenDyslexic-Regular.woff2": {
     83    "file": "assets/OpenDyslexic-Regular-mq3eNZ-9.woff2",
     84    "src": "resources/fonts/opendyslexic/OpenDyslexic-Regular.woff2"
     85  },
     86  "src/js/simebv-init.js": {
     87    "file": "simebv-viewer-init.js",
     88    "name": "simebv-viewer-init",
     89    "src": "src/js/simebv-init.js",
     90    "isEntry": true,
     91    "imports": [
     92      "_simebv-viewer-DrOW_OfM.js"
     93    ]
     94  },
     95  "src/js/simebv-viewer.js": {
     96    "file": "simebv-viewer-lib.js",
     97    "name": "simebv-viewer-lib",
     98    "src": "src/js/simebv-viewer.js",
     99    "isEntry": true,
     100    "imports": [
     101      "_simebv-viewer-DrOW_OfM.js"
     102    ]
     103  },
    107104  "vendor/foliate-js/comic-book.js": {
    108     "file": "assets/comic-book-CNy7_Hja.js",
     105    "file": "assets/comic-book-lfvJFMj-.js",
    109106    "name": "comic-book",
    110107    "src": "vendor/foliate-js/comic-book.js",
     
    112109  },
    113110  "vendor/foliate-js/epub.js": {
    114     "file": "assets/epub-BQqBxsAu.js",
     111    "file": "assets/epub-KvD48Q4-.js",
    115112    "name": "epub",
    116113    "src": "vendor/foliate-js/epub.js",
    117114    "isDynamicEntry": true,
    118115    "imports": [
    119       "src/js/simebv-viewer.js"
     116      "_simebv-viewer-DrOW_OfM.js"
    120117    ]
    121118  },
    122119  "vendor/foliate-js/fb2.js": {
    123     "file": "assets/fb2-DoA4UCCO.js",
     120    "file": "assets/fb2-ClJpypHw.js",
    124121    "name": "fb2",
    125122    "src": "vendor/foliate-js/fb2.js",
     
    127124  },
    128125  "vendor/foliate-js/fixed-layout.js": {
    129     "file": "assets/fixed-layout-CEdlqyLS.js",
     126    "file": "assets/fixed-layout-jzZkXagm.js",
    130127    "name": "fixed-layout",
    131128    "src": "vendor/foliate-js/fixed-layout.js",
     
    133130  },
    134131  "vendor/foliate-js/mobi.js": {
    135     "file": "assets/mobi-CUP3Mkj_.js",
     132    "file": "assets/mobi-D3_qgME0.js",
    136133    "name": "mobi",
    137134    "src": "vendor/foliate-js/mobi.js",
     
    139136  },
    140137  "vendor/foliate-js/paginator.js": {
    141     "file": "assets/paginator-DQoPXZqM.js",
     138    "file": "assets/paginator-Q5xludiF.js",
    142139    "name": "paginator",
    143140    "src": "vendor/foliate-js/paginator.js",
     
    145142  },
    146143  "vendor/foliate-js/search.js": {
    147     "file": "assets/search-CeeluKVp.js",
     144    "file": "assets/search-BpcFCD71.js",
    148145    "name": "search",
    149146    "src": "vendor/foliate-js/search.js",
     
    151148  },
    152149  "vendor/foliate-js/tts.js": {
    153     "file": "assets/tts-DmfHnK0f.js",
     150    "file": "assets/tts-BWVnA2PP.js",
    154151    "name": "tts",
    155152    "src": "vendor/foliate-js/tts.js",
     
    157154  },
    158155  "vendor/foliate-js/vendor/fflate.js": {
    159     "file": "assets/fflate-Bye76UFF.js",
     156    "file": "assets/fflate-ChZ5a79y.js",
    160157    "name": "fflate",
    161158    "src": "vendor/foliate-js/vendor/fflate.js",
    162159    "isDynamicEntry": true
    163160  },
    164   "vendor/foliate-js/vendor/pdfjs/pdf.mjs": {
    165     "file": "assets/pdf-et8PL5bm.mjs",
    166     "src": "vendor/foliate-js/vendor/pdfjs/pdf.mjs"
    167   },
    168   "vendor/foliate-js/vendor/pdfjs/pdf.mjs.map": {
    169     "file": "assets/pdf.mjs-Clxyfw0k.map",
    170     "src": "vendor/foliate-js/vendor/pdfjs/pdf.mjs.map"
    171   },
    172   "vendor/foliate-js/vendor/pdfjs/pdf.worker.mjs": {
    173     "file": "assets/pdf.worker-DHaD_gt7.mjs",
    174     "src": "vendor/foliate-js/vendor/pdfjs/pdf.worker.mjs"
    175   },
    176   "vendor/foliate-js/vendor/pdfjs/pdf.worker.mjs.map": {
    177     "file": "assets/pdf.worker.mjs-BEagiU_I.map",
    178     "src": "vendor/foliate-js/vendor/pdfjs/pdf.worker.mjs.map"
    179   },
    180161  "vendor/foliate-js/vendor/zip.js": {
    181     "file": "assets/zip-w4eY6XnM.js",
     162    "file": "assets/zip-CqQxo32y.js",
    182163    "name": "zip",
    183164    "src": "vendor/foliate-js/vendor/zip.js",
  • simple-ebook-viewer/trunk/includes/simebv-admin.php

    r3301587 r3480712  
    55
    66
    7 class SIMEBV_Admin {
    8 
    9     public static $ebook_mimetypes = [
    10         'epub' => 'application/epub+zip',
    11         'cbz' => 'application/vnd.comicbook+zip',
    12         'fb2' => 'application/x-fictionbook+xml',
    13         'fbz' => 'application/x-zip-compressed-fb2',
    14         'mobi' => 'application/x-mobipocket-ebook',
    15         'azw' => 'application/vnd.amazon.ebook',
    16         'azw3' => 'application/vnd.amazon.ebook',
    17     ];
     7class SIMEBV_Admin extends SIMEBV_Base {
    188
    199    public static function init() {
     10        do_action('simebv_admin_before_init');
     11
    2012        add_action('admin_init', [self::class, 'suggest_privacy_policy']);
    2113        add_filter('upload_mimes', [self::class, 'allow_ebook_uploads']);
     
    2416        add_filter('attachment_fields_to_save', [self::class, 'save_media_custom_field'], 10, 2);
    2517        add_filter('wp_check_filetype_and_ext', [self::class, 'allow_azw_uploads'], 100, 5);
     18
     19        do_action('simebv_admin_after_init');
    2620    }
    2721
     
    3226                __(
    3327"<h3>Use of %s plugin</h3>
    34 <p>Our website uses a plugin to enhance your experience when reading ebooks directly on our site. This plugin does <strong>not</strong> collect, transmit, or share any personal data. It does <strong>not</strong> set cookies or track your activity across websites.</p>
     28<p>Our website uses a plugin to enhance your experience when reading ebooks directly on our site. This plugin does <strong>not</strong> collect any personal data. It does <strong>not</strong> set cookies or track your activity across websites.</p>
    3529<p>When you interact with the ebook viewer, the plugin may store certain <strong>preferences locally in your browser</strong> using local storage technology. This information is saved solely to remember your settings and improve your user experience during future visits. These preferences include:</p>
    3630<ul>
    3731<li>The last page you viewed</li>
    38 <li>Your selected font size</li>
     32<li>Your selected font size and style</li>
     33<li>Show or hide annotations and page delimiters</li>
    3934<li>Page margin settings</li>
    4035<li>Maximum pages displayed per view</li>
     
    4237<li>Chosen color theme and any color filters</li>
    4338<li>Zoom level</li>
     39<li>Speech synthesis preferences</li>
    4440</ul>
    45 <p>This information is stored <strong>only on your device</strong>, is not accessible by us or any third party, and is used exclusively to personalize your ebook reading experience on this website.</p>
     41<p>This information is stored <strong>only on your device</strong> and is never transmitted to our servers. It is used exclusively to personalize your ebook reading experience on this website.</p>
     42<p>If you use the Text-to-Speech functionality offered by the ebook viewer with a remote voice (the available voices depend on the browser and the operating system: Chrome offers Google remote voices, Edge offers Microsoft remote ones, for example), the text to be synthesized and the voice and language parameters will be transmitted to these remote services. As with any network request, your IP address and browser identifiers are also transmitted. You can avoid this by selecting a local voice, if available in your system.</p>
    4643<p><strong>Note:</strong> To retrieve and display the ebook content, the plugin interacts with the WordPress REST API. This process may involve the use of <strong>technical cookies</strong> that are set by WordPress itself to ensure secure and correct data transmission. These cookies do not track you and are essential for the proper functioning of the website.</p>
    4744<p>You can clear your saved preferences at any time by clearing your browser’s local storage or using your browser's privacy settings.</p>",
     
    115112            $html .= '</p>';
    116113            $html .= '</div>';
    117             $form_fields['simebv_ebook_slug'] = array(
     114            $fields['simebv_ebook_slug'] = array(
    118115                'label' => 'Ebook slug',
    119116                'input' => 'html',
     
    123120            );
    124121        }
    125         return $form_fields;
     122        return $fields;
    126123    }
    127124
     
    146143            'post_type' => 'attachment',
    147144            'post_status' => 'inherit',
     145            'posts_per_page' => -1,
    148146        );
    149147        $query = new WP_Query($args);
     
    157155            $metadata = get_post_meta($attachment_ID);
    158156            if (!isset($metadata['simebv_ebook_slug'])) {
    159                 $slug = sanitize_text_field($metadata['post_name']);
     157                $post = get_post($attachment_ID);
     158                $slug = sanitize_text_field($post->post_name);
    160159                if (!empty($slug)) {
    161160                    update_post_meta(
  • simple-ebook-viewer/trunk/includes/simebv-viewer.php

    r3301587 r3480712  
    66use Kucrut\Vite;
    77
    8 class SIMEBV_Viewer {
     8class SIMEBV_Viewer extends SIMEBV_Base {
     9
    910    public static function init() {
     11        do_action('simebv_viewer_before_init');
     12
    1013        add_shortcode('simebv_viewer', [self::class, 'render_ebook_viewer']);
    1114        add_action('wp_enqueue_scripts', [self::class, 'conditionally_enqueue_assets']);
    1215        add_action('wp_enqueue_scripts', [self::class, 'register_javascript_translations'], 100);
    1316        // add_action('enqueue_block_editor_assets', [self::class, 'enqueue_block_editor_assets']);
     17
     18        do_action('simebv_viewer_after_init');
     19    }
     20
     21    private static $js_core_script_handle = 'simebv-viewer-lib';
     22    private static $js_core_script_path = 'src/js/simebv-viewer.js';
     23
     24    public static function get_js_core_script_handle() {
     25        return self::$js_core_script_handle;
     26    }
     27
     28    private static $js_init_script_handle = 'simebv-viewer-init';
     29    private static $js_init_script_path = 'src/js/simebv-init.js';
     30
     31    public static function get_js_init_script_handle() {
     32        return self::$js_init_script_handle;
    1433    }
    1534
     
    2443    public static function register_javascript_translations() {
    2544        wp_set_script_translations(
    26             'simebv-viewer-lib', 'simple-ebook-viewer', SIMEBV_PLUGIN_DIR . 'languages/'
    27         );
     45            self::$js_core_script_handle, 'simple-ebook-viewer', SIMEBV_PLUGIN_DIR . 'languages/'
     46        );
     47    }
     48
     49    private static function enqueue_assets($handle, $path, $dependencies, $in_footer = true) {
     50        return Vite\enqueue_asset(
     51            SIMEBV_PLUGIN_DIR . '/dist',
     52            $path,
     53            [
     54                'handle' => $handle,
     55                'dependencies' => $dependencies,
     56                'in-footer' => $in_footer,
     57            ]
     58        );
     59    }
     60
     61    public static function enqueue_core_js() {
     62        self::enqueue_assets(
     63            self::$js_core_script_handle,
     64            self::$js_core_script_path,
     65            ['wp-i18n', 'wp-api'],
     66        );
     67        do_action('simebv_enqueued_core_js');
     68    }
     69
     70    public static function enqueue_init_js() {
     71        self::enqueue_assets(
     72            self::$js_init_script_handle,
     73            self::$js_init_script_path,
     74            [self::$js_core_script_handle],
     75        );
     76        do_action('simebv_enqueued_init_js');
    2877    }
    2978
     
    3584        global $post;
    3685        if (has_shortcode($post->post_content, 'simebv_viewer')) {
    37             Vite\enqueue_asset(
    38                 SIMEBV_PLUGIN_DIR . '/dist',
    39                 'src/js/simebv-viewer.js',
    40                 [
    41                     'handle' => 'simebv-viewer-lib',
    42                     'dependencies' => ['wp-i18n', 'wp-api'],
    43                     'in-footer' => true,
    44                 ]
    45             );
    46         }
    47 
    48     }
    49 
    50     public static function render_ebook_viewer($atts) {
    51         // add default value for attributes in the shortcode
    52         $atts = shortcode_atts(
    53             [
    54                 'book' => '',
    55                 'height' => '',
    56                 'width' => '',
    57                 'max-height' => '',
    58                 'max-width' => '',
    59                 'border' => '',
    60                 'style' => '',
    61                 'class' => '',
    62                 'max-pages' => '',
    63                 'color-scheme' => '',
    64                 'zoom' => '',
    65                 'layout' => '',
    66                 'default-font-size' => '',
    67                 'page-margins' => '',
    68                 'activate-color-filter' => '',
    69                 'invert-color-filter' => '',
    70                 'rotate-color-filter' => '',
    71                 'bg-transparent-filter' => '',
    72                 'bg-color-filter' => '',
    73             ],
    74             $atts,
    75             'simebv_viewer'
    76         );
    77 
     86            self::enqueue_core_js();
     87            self::enqueue_init_js();
     88        }
     89
     90    }
     91
     92    public static function get_ebook_id($slug) {
    7893        $ebook_id = '';
    7994        $args = array(
     
    8499                [
    85100                    'key' => 'simebv_ebook_slug',
    86                     'value' => sanitize_text_field($atts['book']),
     101                    'value' => sanitize_text_field($slug),
    87102                    'compare' => '=',
    88103                ],
     
    95110            wp_reset_postdata();
    96111        }
    97         if (empty($ebook_id)) {
    98             return '<p style="color: red;">' . esc_html__("No Web Publication file provided.", 'simple-ebook-viewer') . '</p>';
    99         }
    100 
    101         $styles = self::setup_styles($atts);
    102 
     112        return $ebook_id;
     113    }
     114
     115    public static function create_viewer_markup($ebook_id, $atts, $styles) {
    103116        ob_start(); ?>
    104117<section
     
    106119    data-ebook-id="<?php echo esc_attr($ebook_id); ?>"
    107120    <?php
    108         echo strlen($styles['container']) !== 0 ? 'style="' . esc_attr($styles['container']) . '"' : '';
    109         echo strlen($atts['class']) !== 0 ? 'class="' . esc_attr($atts['class']) . '"' : '';
    110         echo strlen($atts['max-pages']) !== 0 ? 'data-simebv-maxpages="' . esc_attr($atts['max-pages']) . '"' : '';
    111         echo strlen($atts['color-scheme']) !== 0 ? 'data-simebv-colors="' . esc_attr($atts['color-scheme']) . '"' : '';
    112         echo strlen($atts['zoom']) !== 0 ? 'data-simebv-zoom="' . esc_attr($atts['zoom']) . '"' : '';
    113         echo strlen($atts['layout']) !== 0 ? 'data-simebv-layout="' . esc_attr($atts['layout']) . '"' : '';
    114         echo strlen($atts['default-font-size']) !== 0 ? 'data-simebv-fontsize="' . esc_attr($atts['default-font-size']) . '"' : '';
    115         echo strlen($atts['page-margins']) !== 0 ? 'data-simebv-margins="' . esc_attr($atts['page-margins']) . '"' : '';
    116         echo strlen($atts['activate-color-filter']) !== 0 ? 'data-simebv-activatecolorfilter="' . esc_attr($atts['activate-color-filter']) . '"' : '';
    117         echo strlen($atts['invert-color-filter']) !== 0 ? 'data-simebv-invertcolorsfilter="' . esc_attr($atts['invert-color-filter']) . '"' : '';
    118         echo strlen($atts['rotate-color-filter']) !== 0 ? 'data-simebv-rotatecolorsfilter="' . esc_attr($atts['rotate-color-filter']) . '"' : '';
    119         echo strlen($atts['bg-transparent-filter']) !== 0 ? 'data-simebv-bgfiltertransparent="' . esc_attr($atts['bg-transparent-filter']) . '"' : '';
    120         echo strlen($atts['bg-color-filter']) !== 0 ? 'data-simebv-bgcolorsfilter="' . esc_attr($atts['bg-color-filter']) . '"' : '';
     121        echo strlen($styles['container']) !== 0 ? 'style="' . esc_attr($styles['container']) . '" ' : '';
     122        foreach(self::$shortcode_viewer_atts['html_attributes'] as $name => $vals) {
     123            echo strlen($atts[$name]) !== 0 ? esc_attr($vals['html_name']) . '="' . esc_attr($atts[$name]) . '" ' : '';
     124        }
    121125    ?>
    122126    tabindex="0"
     
    128132</section>
    129133        <?php
    130         return ob_get_clean();
     134        $viewer_html_code = ob_get_clean();
     135        return $viewer_html_code;
     136    }
     137
     138    public static function render_ebook_viewer($atts) {
     139        if (!is_singular() && !apply_filters('simebv_allow_viewer', false)) {
     140            return;
     141        }
     142        // add default value for attributes in the shortcode
     143        $atts = shortcode_atts(
     144            self::shortcode_viewer_atts_with_defaults(),
     145            $atts,
     146            'simebv_viewer'
     147        );
     148        $ebook_id = self::get_ebook_id($atts['book']);
     149        if (empty($ebook_id)) {
     150            return '<p style="color: red;">' . esc_html__("No Web Publication file provided.", 'simple-ebook-viewer') . '</p>';
     151        }
     152
     153        if (!wp_script_is(self::$js_core_script_handle, 'enqueued')) {
     154            self::enqueue_core_js();
     155            self::enqueue_init_js();
     156            self::register_javascript_translations();
     157        }
     158
     159        $styles = self::setup_styles($atts);
     160
     161        $viewer_html_code = self::create_viewer_markup($ebook_id, $atts, $styles);
     162        return apply_filters('simebv_viewer_html_code', $viewer_html_code);
    131163    }
    132164
    133165    public static function setup_styles($attrs) {
    134166        $style_container = '';
    135         if (
    136             strlen($attrs['height']) !== 0
    137             || strlen($attrs['width']) !== 0
    138             || strlen($attrs['max-height']) !== 0
    139             || strlen($attrs['max-width']) !== 0
    140             || strlen($attrs['border']) !== 0
    141             || strlen($attrs['style']) !== 0
    142         ) {
    143             if (strlen($attrs['height']) !== 0) {
    144                 $style_container .= "height:" . $attrs['height'] . ";";
    145             }
    146             if (strlen($attrs['width']) !== 0) {
    147                 $style_container .= "width:" . $attrs['width'] . ";";
    148             }
    149             if (strlen($attrs['max-height']) !== 0) {
    150                 $style_container .= "max-height:" . $attrs['max-height'] . ";";
    151             }
    152             if (strlen($attrs['max-width']) !== 0) {
    153                 $style_container .= "max-width:" . $attrs['max-width'] . ";";
    154             }
    155             if (strlen($attrs['border']) !== 0) {
    156                 $style_container .= "border:" . $attrs['border'] . ";";
    157             }
    158             if (strlen($attrs['style']) !== 0) {
    159                 $style_container .= trim($attrs['style']);
     167        foreach (array_keys(self::$shortcode_viewer_atts['style_attributes']) as $name) {
     168            if (strlen($attrs[$name]) === 0) {
     169                continue;
     170            }
     171            if ($name === 'style') {
     172                $style_container .= trim($attrs[$name]);
    160173                if (!str_ends_with($style_container, ';')) {
    161174                    $style_container .= ';';
    162175                }
    163176            }
    164         }
    165         if (strlen($attrs['max-height'] === 0 && strlen($attrs['height']) === 0)) {
     177            else {
     178                $style_container .= $name . ':' . $attrs[$name] . ';';
     179            }
     180        }
     181        if (strlen($attrs['max-height']) === 0 && strlen($attrs['height']) === 0) {
    166182            $style_container .= "max-height:95vh;";
    167183        }
  • simple-ebook-viewer/trunk/languages/simple-ebook-viewer-it_IT-simebv-viewer-lib.json

    r3301587 r3480712  
    11{
    2     "translation-revision-date": "2025-05-16",
     2    "translation-revision-date": "2026-03-08",
    33    "generator": "WP-CLI\/2.12.0",
    44    "source": "src\/js\/simebv-viewer.js",
     
    1111                "plural-forms": "nplurals=2; plural=(n != 1);"
    1212            },
     13            "Page %1$s": [
     14                "Pagina %1$s"
     15            ],
     16            "Loading...": [
     17                "Caricamento..."
     18            ],
     19            "Error: I couldn't retrieve the book to display.": [
     20                "Errore: non ho potuto recuperare il libro da mostrare."
     21            ],
     22            "Resource not found on the server": [
     23                "Risorsa non trovata nel server"
     24            ],
     25            "Page list": [
     26                "Indice delle pagine"
     27            ],
     28            "Start of page ": [
     29                "Inizio della pagina "
     30            ],
     31            "Front matter": [
     32                "Pagine preliminari"
     33            ],
     34            "Location %1$s\/%2$s": [
     35                "Posizione %1$s\/%2$s"
     36            ],
     37            "Page %1$s \/ %2$s": [
     38                "Pagina %1$s \/ %2$s"
     39            ],
     40            "Ebook contents": [
     41                "Contenuti dell'ebook"
     42            ],
     43            "Error while opening the book:": [
     44                "Errore durante l'apertura del libro:"
     45            ],
     46            "Show sidebar": [
     47                "Mostra barra laterale"
     48            ],
     49            "No title": [
     50                "Senza titolo"
     51            ],
     52            "Show settings": [
     53                "Mostra impostazioni"
     54            ],
     55            "Toggle full screen": [
     56                "Attiva\/disattiva schermo intero"
     57            ],
     58            "Close Reader": [
     59                "Chiudi il lettore"
     60            ],
     61            "Activate color filters": [
     62                "Attiva i filtri colore"
     63            ],
     64            "Invert colors:": [
     65                "Inverti colori:"
     66            ],
     67            "Rotate hues:": [
     68                "Ruota tonalit\u00e0:"
     69            ],
     70            "Transparent background:": [
     71                "Sfondo trasparente:"
     72            ],
     73            "Background color:": [
     74                "Colore di sfondo:"
     75            ],
     76            "OK": [
     77                "OK"
     78            ],
     79            "Search": [
     80                "Cerca"
     81            ],
     82            "Previous result": [
     83                "Precedente"
     84            ],
     85            "Next result": [
     86                "Successivo"
     87            ],
     88            "Close": [
     89                "Chiudi"
     90            ],
     91            "Auto": [
     92                "Auto"
     93            ],
     94            "Serif": [
     95                "Serif"
     96            ],
     97            "Sans Serif": [
     98                "Sans Serif"
     99            ],
     100            "Monospace": [
     101                "Monospaziato"
     102            ],
     103            "OpenDyslexic": [
     104                "OpenDyslexic"
     105            ],
     106            "Select Font Style": [
     107                "Stile Font"
     108            ],
    13109            "Paginated": [
    14110                "Pagine"
     
    35131                "Cerca..."
    36132            ],
    37             "Page %1$s": [
    38                 "Pagina %1$s"
    39             ],
    40             "Loc %1$s\/%2$s": [
    41                 "Loc %1$s\/%2$s"
    42             ],
    43             "Loading...": [
    44                 "Caricamento..."
    45             ],
    46             "Show sidebar": [
    47                 "Mostra barra laterale"
    48             ],
    49             "No title": [
    50                 "Senza titolo"
    51             ],
    52             "Show settings": [
    53                 "Mostra impostazioni"
    54             ],
    55             "Full screen": [
    56                 "Schermo intero"
    57             ],
    58             "Go left": [
    59                 "Vai a sinistra"
    60             ],
    61             "Go right": [
    62                 "Vai a destra"
    63             ],
    64133            "Font Size\u0004Small": [
    65134                "Piccola"
     
    89158                "Seppia"
    90159            ],
     160            "History": [
     161                "Cronologia"
     162            ],
     163            "Previous": [
     164                "Precedente"
     165            ],
     166            "Next": [
     167                "Successivo"
     168            ],
     169            "Zoom": [
     170                "Zoom"
     171            ],
     172            "Fit page": [
     173                "Adatta alla pagina"
     174            ],
     175            "Fit width": [
     176                "Adatta alla larghezza"
     177            ],
     178            "Custom": [
     179                "Personalizzato"
     180            ],
     181            "Color filter...": [
     182                "Filtro colore..."
     183            ],
    91184            "Theme color\u0004Light": [
    92185                "Chiaro"
     
    95188                "Scuro"
    96189            ],
    97             "History": [
    98                 "Cronologia"
    99             ],
    100             "Previous": [
    101                 "Precedente"
    102             ],
    103             "Next": [
    104                 "Successivo"
    105             ],
    106             "Zoom": [
    107                 "Zoom"
    108             ],
    109             "Fit page": [
    110                 "Adatta alla pagina"
    111             ],
    112             "Fit width": [
    113                 "Adatta alla larghezza"
    114             ],
    115             "Custom": [
    116                 "Personalizzato"
    117             ],
    118             "Error: I couldn't retrieve the book to display.": [
    119                 "Errore: non ho potuto recuperare il libro da mostrare."
    120             ],
    121             "Resource not found on the server": [
    122                 "Risorsa non trovata nel server"
    123             ],
    124             "Color filter...": [
    125                 "Filtro colore..."
    126             ],
    127             "Search": [
    128                 "Cerca"
    129             ],
    130             "Previous result": [
    131                 "Precedente"
    132             ],
    133             "Next result": [
    134                 "Successivo"
    135             ],
    136             "Close": [
    137                 "Chiudi"
    138             ],
    139             "Activate color filters": [
    140                 "Attiva i filtri colore"
    141             ],
    142             "Invert colors:": [
    143                 "Inverti colori:"
    144             ],
    145             "Rotate hues:": [
    146                 "Ruota tonalit\u00e0:"
    147             ],
    148             "Transparent background:": [
    149                 "Sfondo trasparente:"
    150             ],
    151             "Background color:": [
    152                 "Colore di sfondo:"
    153             ],
    154             "OK": [
    155                 "OK"
     190            "Show position": [
     191                "Mostra posizione"
     192            ],
     193            "Slider": [
     194                "Slider"
     195            ],
     196            "Percentage": [
     197                "Percentuale"
     198            ],
     199            "Pages": [
     200                "Pagine"
     201            ],
     202            "Theme color\u0004Light (forced)": [
     203                "Chiaro (forzato)"
     204            ],
     205            "Theme color\u0004Dark (forced)": [
     206                "Scuro (forzato)"
     207            ],
     208            "Font style...": [
     209                "Stile font..."
     210            ],
     211            "Show\/hide annotations...": [
     212                "Mostra\/nascondi annotazioni"
     213            ],
     214            "Read aloud...": [
     215                "Leggi ad alta voce..."
     216            ],
     217            "Annotation": [
     218                "Annotazione"
     219            ],
     220            "Title": [
     221                "Titolo"
     222            ],
     223            "Subtitle": [
     224                "Sottotitolo"
     225            ],
     226            "Author": [
     227                "Autore"
     228            ],
     229            "Editor": [
     230                "Editore"
     231            ],
     232            "Translator": [
     233                "Traduttore"
     234            ],
     235            "Artist": [
     236                "Artista"
     237            ],
     238            "Illustrator": [
     239                "Illustratore"
     240            ],
     241            "Colorist": [
     242                "Colorista"
     243            ],
     244            "Narrator": [
     245                "Narratore"
     246            ],
     247            "Language": [
     248                "Lingua"
     249            ],
     250            "Publisher": [
     251                "Editore"
     252            ],
     253            "Publication date": [
     254                "Data di pubblicazione"
     255            ],
     256            "Subject": [
     257                "Soggetto"
     258            ],
     259            "Description": [
     260                "Descrizione"
     261            ],
     262            "Source": [
     263                "Sorgente"
     264            ],
     265            "Rights": [
     266                "Diritti"
     267            ],
     268            "Source of the page list": [
     269                "Opera da cui deriva la lista delle pagine"
     270            ],
     271            "Identifier": [
     272                "Identificatore"
     273            ],
     274            "Other identifiers": [
     275                "Altri identificatori"
     276            ],
     277            "Ebook metadata": [
     278                "Metadati dell'ebook"
     279            ],
     280            "Ebook format": [
     281                "Formato dell'ebook"
     282            ],
     283            "I cannot access the audio output device because it's already in use, maybe by another application.": [
     284                "Non posso accedere al dispotivo di uscita dell'audio perch\u00e9 gi\u00e0 in uso, forse da un'altra applicazione."
     285            ],
     286            "I cannot identify an audio output channel on this device.": [
     287                "Non posso identificare un canale di uscita audio in questo dispositivo."
     288            ],
     289            "A required network operation to start the speech synthesis failed.": [
     290                "Un'operazione di rete necessaria per far partire la sintesi vocale non \u00e8 riuscita."
     291            ],
     292            "No speech synthesis engine available at this moment.": [
     293                "Nessun motore di sintesi vocale disponibile al momento."
     294            ],
     295            "The speech synthesis engine raised an error.": [
     296                "Il motore di sintesi vocale ha riportato un errore."
     297            ],
     298            "No appropriate voice available": [
     299                "Non \u00e8 disponibile alcuna voce adeguata."
     300            ],
     301            "The selected voice is not available.": [
     302                "La voce selezionata non \u00e8 disponibile."
     303            ],
     304            "The text is too long to synthesize.": [
     305                "Il testo \u00e8 troppo lungo per farne la sintesi vocale."
     306            ],
     307            "The value of at least one amongst Speed, Pitch and Volume is not valid.": [
     308                "Il valore di almeno uno fra Velocit\u00e0, Tonalit\u00e0 e Volume non \u00e8 valido."
     309            ],
     310            "The operation's start was not allowed.": [
     311                "Operazione non permessa."
     312            ],
     313            "No appropriate voice available for the language %1$s": [
     314                "Nessuna voce appropriata per il linguaggio %1$s"
     315            ],
     316            "Read aloud...": [
     317                "Leggi ad alta voce..."
     318            ],
     319            "Bibliography": [
     320                "Bibliografia"
     321            ],
     322            "Definition": [
     323                "Definizione"
     324            ],
     325            "Note": [
     326                "Nota"
     327            ],
     328            "Details": [
     329                "Dettagli"
     330            ],
     331            "Ebook metadata and navigation trees": [
     332                "Metadati dell'ebook e alberi di navigazione"
     333            ],
     334            "Table of contents": [
     335                "Indice generale"
     336            ],
     337            "Page list": [
     338                "Indice delle pagine"
     339            ],
     340            "Turn left page": [
     341                "Gira pagina a sinistra"
     342            ],
     343            "Turn right page": [
     344                "Gira pagina a destra"
     345            ],
     346            "Location in ebook": [
     347                "Posizione nell'ebook"
     348            ],
     349            "Show\/hide annotations": [
     350                "Mostra\/nascondi annotazioni"
     351            ],
     352            "Show Calibre Bookmarks": [
     353                "Mostra note di Calibre"
     354            ],
     355            "Show page delimiters": [
     356                "Mostra i punti di separazione delle pagine"
     357            ],
     358            "(e.g. of the ebook's paper version)": [
     359                "(e.g. della versione cartacea del libro)"
     360            ],
     361            "Cancel": [
     362                "Cancella"
     363            ],
     364            "Play": [
     365                "Play"
     366            ],
     367            "Pause": [
     368                "Pausa"
     369            ],
     370            "Speech Options": [
     371                "Opzioni"
     372            ],
     373            "Go to previous section": [
     374                "Vai alla sezione precedente"
     375            ],
     376            "Go to next section": [
     377                "Vai alla sezione successiva"
     378            ],
     379            "Text To Speech Options": [
     380                "Opzioni sintesi vocale"
     381            ],
     382            "Volume: ": [
     383                "Volume: "
     384            ],
     385            "Pitch: ": [
     386                "Tonalit\u00e0: "
     387            ],
     388            "Speed: ": [
     389                "Velocit\u00e0: "
     390            ],
     391            "Voice: ": [
     392                "Voce: "
     393            ],
     394            "The voice is automatically selected based on the ebook and the system language. If you have more than one voice for the language, you can select your preferred one in the system settings.": [
     395                "La voce \u00e8 selezionata automaticamente a seconda dell'ebook e della lingua di sistema. Se hai installato pi\u00f9 di una voce per lingua, puoi selezionare quella che preferisci fra le impostazioni di sistema del tuo dispositivo."
     396            ],
     397            "If you select a word in the text, the speech will begin from that word.": [
     398                "Se selezioni una parola nel testo, la lettura comincer\u00e0 da quella parola."
     399            ],
     400            "Warning: remote voices may restart from the beginning of the paragraph when they are changed. On Android, all voices may do the same when paused also.": [
     401                "Attenzione: le voci remote possono ripartire dall'inizio del paragrafo quando vengono cambiate. Su Android, tutte le voci possono fare lo stesso anche quando messe in pausa."
    156402            ]
    157403        }
  • simple-ebook-viewer/trunk/languages/simple-ebook-viewer-it_IT.po

    r3301587 r3480712  
    11msgid ""
    22msgstr ""
    3 "Project-Id-Version: Simple Ebook Viewer 0.1.2\n"
     3"Project-Id-Version: Simple Ebook Viewer 0.4.1\n"
    44"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/simple-ebook-viewer\n"
    55"Last-Translator: Francesco Martini\n"
     
    88"Content-Type: text/plain; charset=UTF-8\n"
    99"Content-Transfer-Encoding: 8bit\n"
    10 "POT-Creation-Date: 2025-05-16T12:55:17+00:00\n"
    11 "PO-Revision-Date: 2025-05-23\n"
     10"POT-Creation-Date: 2026-03-03T23:03:38+00:00\n"
     11"PO-Revision-Date: 2026-03-08\n"
    1212"Language: it\n"
    1313"X-Generator: WP-CLI 2.12.0\n"
     
    1616#. Plugin Name of the plugin
    1717#: simple-ebook-viewer.php
    18 #: simple-ebook-viewer.php:37
     18#: simple-ebook-viewer.php:23
    1919msgid "Simple Ebook Viewer"
    20 msgstr ""
     20msgstr "Simple Ebook Viewer"
    2121
    2222#. Description of the plugin
     
    2828#: simple-ebook-viewer.php
    2929msgid "Francesco Martini"
    30 msgstr ""
    31 
    32 #: includes/simebv-viewer.php:126
     30msgstr "Francesco Martini"
     31
     32#: includes/simebv-viewer.php:130
    3333msgid "It seems that JavaScript is not enabled in your browser, you need to enable it in order to use the Ebook Viewer."
    3434msgstr "Sembra che JavaScript non sia abilitato nel tuo browser, è necessario che lo abiliti per poter usare il visualizzatore di Ebook."
    3535
    36 #: includes/simebv-viewer.php:98
     36#: includes/simebv-viewer.php:150
    3737msgid "No Web Publication file provided."
    3838msgstr "Non è stata fornita alcuna pubblicazione."
    3939
    40 #: src/js/simebv-viewer.js:208
     40#: src/js/simebv-menu-items.js:46
    4141msgid "Paginated"
    4242msgstr "Pagine"
    4343
    44 #: src/js/simebv-viewer.js:209
     44#: src/js/simebv-menu-items.js:47
    4545msgid "Scrolled"
    4646msgstr "Scorrimento"
    4747
    48 #: src/js/simebv-viewer.js:227
     48#: src/js/simebv-menu-items.js:66
    4949msgid "Max pages per view"
    5050msgstr "Max pagine per vista"
    5151
    52 #: src/js/simebv-viewer.js:205
     52#: src/js/simebv-menu-items.js:43
    5353msgid "Layout"
    5454msgstr "Layout"
    5555
    56 #: src/js/simebv-viewer.js:240
     56#: src/js/simebv-menu-items.js:80
    5757msgid "Font Size"
    5858msgstr "Grandezza del testo"
    5959
    60 #: src/js/simebv-viewer.js:259
     60#: src/js/simebv-menu-items.js:98
    6161msgid "Page Margins"
    6262msgstr "Margini"
    6363
    64 #: src/js/simebv-viewer.js:275
     64#: src/js/simebv-menu-items.js:131
    6565msgid "Colors"
    6666msgstr "Colori"
    6767
    68 #: src/js/simebv-viewer.js:172
     68#: src/js/simebv-menu-items.js:8
    6969msgid "Search..."
    7070msgstr "Cerca..."
    7171
    72 #. translators: %1s: page number
    73 #: src/js/simebv-viewer.js:824
     72#. translators: %1$s: page number
     73#: src/js/simebv-viewer.js:882
     74#: src/js/simebv-viewer.js:886
    7475#, js-format
    7576msgid "Page %1$s"
    7677msgstr "Pagina %1$s"
    7778
    78 #. translators: Loc: contraction for 'Location' in the book, followed by a numerical fraction
    79 #: src/js/simebv-viewer.js:828
    80 #, js-format
    81 msgid "Loc %1$s/%2$s"
    82 msgstr "Loc %1$s/%2$s"
    83 
    84 #: src/js/simebv-viewer.js:968
     79#: src/js/simebv-viewer.js:1065
    8580msgid "Loading..."
    8681msgstr "Caricamento..."
    8782
    88 #: src/js/simebv-viewer.js:970
     83#: src/js/simebv-header.js:263
    8984msgid "Show sidebar"
    9085msgstr "Mostra barra laterale"
    9186
    92 #: src/js/simebv-viewer.js:974
     87#: src/js/simebv-header.js:262
    9388msgid "No title"
    9489msgstr "Senza titolo"
    9590
    96 #: src/js/simebv-viewer.js:976
     91#: src/js/simebv-header.js:266
    9792msgid "Show settings"
    9893msgstr "Mostra impostazioni"
    9994
    100 #: src/js/simebv-viewer.js:981
    101 msgid "Full screen"
    102 msgstr "Schermo intero"
    103 
    104 #: src/js/simebv-viewer.js:986
    105 msgid "Go left"
    106 msgstr "Vai a sinistra"
    107 
    108 #: src/js/simebv-viewer.js:991
    109 msgid "Go right"
    110 msgstr "Vai a destra"
    111 
    112 #: src/js/simebv-search-dialog.js:8
    113 #: src/js/simebv-search-dialog.js:9
     95#: src/js/simebv-search-dialog.js:26
     96#: src/js/simebv-search-dialog.js:27
    11497msgid "Search"
    11598msgstr "Cerca"
    11699
    117 #: src/js/simebv-search-dialog.js:21
     100#: src/js/simebv-search-dialog.js:39
    118101msgid "Previous result"
    119102msgstr "Precedente"
    120103
    121 #: src/js/simebv-search-dialog.js:32
     104#: src/js/simebv-search-dialog.js:50
    122105msgid "Next result"
    123106msgstr "Successivo"
    124107
    125 #: src/js/simebv-search-dialog.js:43
     108#: src/js/simebv-fonts-dialog.js:96
     109#: src/js/simebv-search-dialog.js:61
     110#: src/js/simebv-speech-dialog.js:75
     111#: src/js/simebv-speech-dialog.js:322
    126112msgid "Close"
    127113msgstr "Chiudi"
    128114
    129 #: src/js/simebv-viewer.js:243
     115#: src/js/simebv-menu-items.js:83
    130116msgctxt "Font Size"
    131117msgid "Small"
    132118msgstr "Piccola"
    133119
    134 #: src/js/simebv-viewer.js:244
     120#: src/js/simebv-menu-items.js:84
    135121msgctxt "Font Size"
    136122msgid "Medium"
    137123msgstr "Media"
    138124
    139 #: src/js/simebv-viewer.js:245
     125#: src/js/simebv-menu-items.js:85
    140126msgctxt "Font Size"
    141127msgid "Large"
    142128msgstr "Grande"
    143129
    144 #: src/js/simebv-viewer.js:246
     130#: src/js/simebv-menu-items.js:86
    145131msgctxt "Font Size"
    146132msgid "X-Large"
    147133msgstr "Molto grande"
    148134
    149 #: src/js/simebv-viewer.js:262
     135#: src/js/simebv-menu-items.js:101
    150136msgctxt "Margins"
    151137msgid "Small"
    152138msgstr "Stretti"
    153139
    154 #: src/js/simebv-viewer.js:263
     140#: src/js/simebv-menu-items.js:102
    155141msgctxt "Margins"
    156142msgid "Medium"
    157143msgstr "Medi"
    158144
    159 #: src/js/simebv-viewer.js:264
     145#: src/js/simebv-menu-items.js:103
    160146msgctxt "Margins"
    161147msgid "Large"
    162148msgstr "Larghi"
    163149
    164 #: src/js/simebv-viewer.js:278
     150#: src/js/simebv-menu-items.js:134
    165151msgctxt "Theme color"
    166152msgid "Auto"
    167153msgstr "Auto"
    168154
    169 #: src/js/simebv-viewer.js:279
     155#: src/js/simebv-menu-items.js:135
    170156msgctxt "Theme color"
    171157msgid "Sepia"
     
    173159
    174160#. translators: %s: example of an ebook slug based on the opened ebook
    175 #: includes/simebv-admin.php:112
     161#: includes/simebv-admin.php:109
    176162#, php-format
    177163msgid "Use this slug in the shortcode \"simebv_viewer\" to view the ebook in your pages (e.g. [simebv_viewer book=\"%s\"]). If left empty, the value of post_name will be used instead."
    178164msgstr "Usa questo slug nello shortcode \"simebv_viewer\" per visualizzare l'ebook nelle tue pagine (e.g. [simebv_viewer book=\"%s\"]). Se lasciato vuoto, verrà usato al suo posto il valore di post_name."
    179165
    180 #: src/js/simebv-viewer.js:182
     166#: src/js/simebv-menu-items.js:19
    181167msgid "History"
    182168msgstr "Cronologia"
    183169
    184 #: src/js/simebv-viewer.js:187
     170#: src/js/simebv-menu-items.js:24
    185171msgid "Previous"
    186172msgstr "Precedente"
    187173
    188 #: src/js/simebv-viewer.js:195
     174#: src/js/simebv-menu-items.js:32
    189175msgid "Next"
    190176msgstr "Successivo"
    191177
    192 #: src/js/simebv-viewer.js:354
     178#: src/js/simebv-menu-items.js:251
    193179msgid "Zoom"
    194180msgstr "Zoom"
    195181
    196 #: src/js/simebv-viewer.js:357
     182#: src/js/simebv-menu-items.js:254
    197183msgid "Fit page"
    198184msgstr "Adatta alla pagina"
    199185
    200 #: src/js/simebv-viewer.js:358
     186#: src/js/simebv-menu-items.js:255
    201187msgid "Fit width"
    202188msgstr "Adatta alla larghezza"
    203189
    204 #: src/js/simebv-viewer.js:359
     190#: src/js/simebv-menu-items.js:256
    205191msgid "Custom"
    206192msgstr "Personalizzato"
    207193
    208 #: src/js/simebv-viewer.js:1108
     194#: src/js/simebv-viewer.js:1149
    209195msgid "Error: I couldn't retrieve the book to display."
    210196msgstr "Errore: non ho potuto recuperare il libro da mostrare."
    211197
    212 #: src/js/simebv-viewer.js:1114
     198#: src/js/simebv-viewer.js:1155
    213199msgid "Resource not found on the server"
    214200msgstr "Risorsa non trovata nel server"
     
    222208msgstr "Inverti colori:"
    223209
    224 #: src/js/simebv-filters-dialog.js:44
     210#: src/js/simebv-filters-dialog.js:45
    225211msgid "Rotate hues:"
    226212msgstr "Ruota tonalità:"
    227213
    228 #: src/js/simebv-filters-dialog.js:55
     214#: src/js/simebv-filters-dialog.js:57
    229215msgid "Transparent background:"
    230216msgstr "Sfondo trasparente:"
    231217
    232 #: src/js/simebv-filters-dialog.js:66
     218#: src/js/simebv-filters-dialog.js:69
    233219msgid "Background color:"
    234220msgstr "Colore di sfondo:"
    235221
    236 #: src/js/simebv-filters-dialog.js:72
     222#: src/js/simebv-annotations-dialog.js:49
     223#: src/js/simebv-filters-dialog.js:76
     224#: src/js/simebv-fonts-dialog.js:93
     225#: src/js/simebv-footnotes.js:101
     226#: src/js/simebv-metadata-dialog.js:32
     227#: src/js/simebv-show-annotation-dialog.js:13
     228#: src/js/simebv-speech-dialog.js:319
    237229msgid "OK"
    238230msgstr "OK"
    239231
    240 #: src/js/simebv-viewer.js:345
     232#: src/js/simebv-menu-items.js:241
    241233msgid "Color filter..."
    242234msgstr "Filtro colore..."
    243235
     236#: src/js/simebv-menu-items.js:136
     237msgctxt "Theme color"
     238msgid "Light"
     239msgstr "Chiaro"
     240
     241#: src/js/simebv-menu-items.js:137
     242msgctxt "Theme color"
     243msgid "Dark"
     244msgstr "Scuro"
     245
     246#: src/js/simebv-annotations-dialog.js:13
     247msgid "Show/hide annotations"
     248msgstr "Mostra/nascondi annotazioni"
     249
     250#: src/js/simebv-annotations-dialog.js:25
     251msgid "Show Calibre Bookmarks"
     252msgstr "Mostra note di Calibre"
     253
     254#: src/js/simebv-annotations-dialog.js:40
     255msgid "Show page delimiters"
     256msgstr "Mostra i punti di separazione delle pagine"
     257
     258#: src/js/simebv-annotations-dialog.js:39
     259msgid "(e.g. of the ebook's paper version)"
     260msgstr "(e.g. della versione cartacea del libro)"
     261
     262#: src/js/simebv-annotations-dialog.js:52
     263msgid "Cancel"
     264msgstr "Cancella"
     265
     266#: src/js/simebv-fonts-dialog.js:26
     267msgid "Auto"
     268msgstr "Auto"
     269
     270#: src/js/simebv-fonts-dialog.js:38
     271msgid "Serif"
     272msgstr "Serif"
     273
     274#: src/js/simebv-fonts-dialog.js:51
     275msgid "Sans Serif"
     276msgstr "Sans Serif"
     277
     278#: src/js/simebv-fonts-dialog.js:64
     279msgid "Monospace"
     280msgstr "Monospaziato"
     281
     282#: src/js/simebv-fonts-dialog.js:77
     283msgid "OpenDyslexic"
     284msgstr "OpenDyslexic"
     285
     286#: src/js/simebv-header.js:269
     287msgid "Toggle full screen"
     288msgstr "Attiva/disattiva schermo intero"
     289
     290#: src/js/simebv-header.js:272
     291msgid "Close Reader"
     292msgstr "Chiudi il lettore"
     293
     294#: src/js/simebv-menu-items.js:115
     295msgid "Show position"
     296msgstr "Mostra posizione"
     297
     298#: src/js/simebv-menu-items.js:118
     299msgid "Slider"
     300msgstr "Slider"
     301
     302#: src/js/simebv-menu-items.js:119
     303msgid "Percentage"
     304msgstr "Percentuale"
     305
     306#: src/js/simebv-menu-items.js:120
     307msgid "Pages"
     308msgstr "Pagine"
     309
     310#: src/js/simebv-menu-items.js:138
     311msgctxt "Theme color"
     312msgid "Light (forced)"
     313msgstr "Chiaro (forzato)"
     314
     315#: src/js/simebv-menu-items.js:139
     316msgctxt "Theme color"
     317msgid "Dark (forced)"
     318msgstr "Scuro (forzato)"
     319
     320#: src/js/simebv-menu-items.js:211
     321msgid "Font style..."
     322msgstr "Stile font..."
     323
     324#: src/js/simebv-menu-items.js:221
     325msgid "Show/hide annotations..."
     326msgstr "Mostra/nascondi annotazioni"
     327
     328#: src/js/simebv-footnotes.js:89
     329#: src/js/simebv-menu-items.js:231
     330msgid "Read aloud..."
     331msgstr "Leggi ad alta voce..."
     332
     333#: src/js/simebv-metadata-dialog.js:4
     334msgid "Title"
     335msgstr "Titolo"
     336
     337#: src/js/simebv-metadata-dialog.js:5
     338msgid "Subtitle"
     339msgstr "Sottotitolo"
     340
     341#: src/js/simebv-metadata-dialog.js:6
     342msgid "Author"
     343msgstr "Autore"
     344
     345#: src/js/simebv-metadata-dialog.js:7
     346msgid "Editor"
     347msgstr "Editore"
     348
     349#: src/js/simebv-metadata-dialog.js:8
     350msgid "Translator"
     351msgstr "Traduttore"
     352
     353#: src/js/simebv-metadata-dialog.js:9
     354msgid "Artist"
     355msgstr "Artista"
     356
     357#: src/js/simebv-metadata-dialog.js:10
     358msgid "Illustrator"
     359msgstr "Illustratore"
     360
     361#: src/js/simebv-metadata-dialog.js:11
     362msgid "Colorist"
     363msgstr "Colorista"
     364
     365#: src/js/simebv-metadata-dialog.js:12
     366msgid "Narrator"
     367msgstr "Narratore"
     368
     369#: src/js/simebv-metadata-dialog.js:13
     370msgid "Language"
     371msgstr "Lingua"
     372
     373#: src/js/simebv-metadata-dialog.js:14
     374msgid "Publisher"
     375msgstr "Editore"
     376
     377#: src/js/simebv-metadata-dialog.js:15
     378msgid "Publication date"
     379msgstr "Data di pubblicazione"
     380
     381#: src/js/simebv-metadata-dialog.js:16
     382msgid "Subject"
     383msgstr "Soggetto"
     384
     385#: src/js/simebv-metadata-dialog.js:17
     386msgid "Description"
     387msgstr "Descrizione"
     388
     389#: src/js/simebv-metadata-dialog.js:18
     390msgid "Source"
     391msgstr "Sorgente"
     392
     393#: src/js/simebv-metadata-dialog.js:19
     394msgid "Rights"
     395msgstr "Diritti"
     396
     397#: src/js/simebv-metadata-dialog.js:20
     398msgid "Source of the page list"
     399msgstr "Opera da cui deriva la lista delle pagine"
     400
     401#: src/js/simebv-metadata-dialog.js:21
     402msgid "Identifier"
     403msgstr "Identificatore"
     404
     405#: src/js/simebv-metadata-dialog.js:22
     406msgid "Other identifiers"
     407msgstr "Altri identificatori"
     408
     409#: src/js/simebv-metadata-dialog.js:28
     410msgid "Ebook metadata"
     411msgstr "Metadati dell'ebook"
     412
     413#: src/js/simebv-metadata-dialog.js:55
     414msgid "Ebook format"
     415msgstr "Formato dell'ebook"
     416
     417#: src/js/simebv-navbar.js:86
     418msgid "Turn left page"
     419msgstr "Gira pagina a sinistra"
     420
     421#: src/js/simebv-navbar.js:89
     422msgid "Turn right page"
     423msgstr "Gira pagina a destra"
     424
     425#: src/js/simebv-navbar.js:92
     426msgid "Location in ebook"
     427msgstr "Posizione nell'ebook"
     428
     429#: src/js/simebv-show-annotation-dialog.js:20
     430msgid "Annotation"
     431msgstr "Annotazione"
     432
     433#: src/js/simebv-sidebar.js:163
     434msgid "Details"
     435msgstr "Dettagli"
     436
     437#: src/js/simebv-sidebar.js:180
     438msgid "Ebook metadata and navigation trees"
     439msgstr "Metadati dell'ebook e alberi di navigazione"
     440
     441#: src/js/simebv-sidebar.js:268
     442msgid "Table of contents"
     443msgstr "Indice generale"
     444
     445#: src/js/simebv-sidebar.js:277
     446#: src/js/simebv-viewer.js:295
     447msgid "Page list"
     448msgstr "Indice delle pagine"
     449
     450#: src/js/simebv-speech-dialog.js:16
     451msgid "Play"
     452msgstr "Play"
     453
     454#: src/js/simebv-speech-dialog.js:17
     455msgid "Pause"
     456msgstr "Pausa"
     457
     458#: src/js/simebv-speech-dialog.js:35
     459msgid "Speech Options"
     460msgstr "Opzioni"
     461
     462#: src/js/simebv-speech-dialog.js:48
     463msgid "Go to previous section"
     464msgstr "Vai alla sezione precedente"
     465
     466#: src/js/simebv-speech-dialog.js:59
     467msgid "Go to next section"
     468msgstr "Vai alla sezione successiva"
     469
     470#: src/js/simebv-speech-dialog.js:200
     471msgid "Text To Speech Options"
     472msgstr "Opzioni sintesi vocale"
     473
     474#: src/js/simebv-speech-dialog.js:214
     475msgid "Volume: "
     476msgstr "Volume: "
     477
     478#: src/js/simebv-speech-dialog.js:234
     479msgid "Pitch: "
     480msgstr "Tonalità: "
     481
     482#: src/js/simebv-speech-dialog.js:254
     483msgid "Speed: "
     484msgstr "Velocità: "
     485
     486#: src/js/simebv-speech-dialog.js:289
     487msgid "Voice: "
     488msgstr "Voce: "
     489
     490#: src/js/simebv-speech-dialog.js:299
     491msgid "The voice is automatically selected based on the ebook and the system language. If you have more than one voice for the language, you can select your preferred one in the system settings."
     492msgstr "La voce è selezionata automaticamente a seconda dell'ebook e della lingua di sistema. Se hai installato più di una voce per lingua, puoi selezionare quella che preferisci fra le impostazioni di sistema del tuo dispositivo."
     493
     494#: src/js/simebv-speech-dialog.js:305
     495msgid "If you select a word in the text, the speech will begin from that word."
     496msgstr "Se selezioni una parola nel testo, la lettura comincerà da quella parola."
     497
     498#: src/js/simebv-speech-dialog.js:306
     499msgid "Warning: remote voices may restart from the beginning of the paragraph when they are changed. On Android, all voices may do the same when paused also."
     500msgstr "Attenzione: le voci remote possono ripartire dall'inizio del paragrafo quando vengono cambiate. Su Android, tutte le voci possono fare lo stesso anche quando messe in pausa."
     501
     502#: src/js/simebv-speech.js:27
     503msgid "I cannot access the audio output device because it's already in use, maybe by another application."
     504msgstr "Non posso accedere al dispotivo di uscita dell'audio perché già in uso, forse da un'altra applicazione."
     505
     506#: src/js/simebv-speech.js:28
     507msgid "I cannot identify an audio output channel on this device."
     508msgstr "Non posso identificare un canale di uscita audio in questo dispositivo."
     509
     510#: src/js/simebv-speech.js:29
     511msgid "A required network operation to start the speech synthesis failed."
     512msgstr "Un'operazione di rete necessaria per far partire la sintesi vocale non è riuscita."
     513
     514#: src/js/simebv-speech.js:30
     515msgid "No speech synthesis engine available at this moment."
     516msgstr "Nessun motore di sintesi vocale disponibile al momento."
     517
     518#: src/js/simebv-speech.js:31
     519msgid "The speech synthesis engine raised an error."
     520msgstr "Il motore di sintesi vocale ha riportato un errore."
     521
     522#: src/js/simebv-speech.js:32
     523msgid "No appropriate voice available"
     524msgstr "Non è disponibile alcuna voce adeguata."
     525
     526#: src/js/simebv-speech.js:33
     527msgid "The selected voice is not available."
     528msgstr "La voce selezionata non è disponibile."
     529
     530#: src/js/simebv-speech.js:34
     531msgid "The text is too long to synthesize."
     532msgstr "Il testo è troppo lungo per farne la sintesi vocale."
     533
     534#: src/js/simebv-speech.js:35
     535msgid "The value of at least one amongst Speed, Pitch and Volume is not valid."
     536msgstr "Il valore di almeno uno fra Velocità, Tonalità e Volume non è valido."
     537
     538#: src/js/simebv-speech.js:36
     539msgid "The operation's start was not allowed."
     540msgstr "Operazione non permessa."
     541
     542#: src/js/simebv-speech.js:174
     543#, js-format
     544msgid "No appropriate voice available for the language %1$s"
     545msgstr "Nessuna voce appropriata per il linguaggio %1$s"
     546
     547#: src/js/simebv-viewer.js:294
     548msgid "Start of page "
     549msgstr "Inizio della pagina "
     550
     551#: src/js/simebv-viewer.js:890
     552#: src/js/simebv-viewer.js:891
     553msgid "Front matter"
     554msgstr "Pagine preliminari"
     555
     556#. translators: Location in the book, followed by a numerical fraction
     557#: src/js/simebv-viewer.js:896
     558#, js-format
     559msgid "Location %1$s/%2$s"
     560msgstr "Posizione %1$s/%2$s"
     561
     562#. translators: current page number / total pages number
     563#: src/js/simebv-viewer.js:900
     564#, js-format
     565msgid "Page %1$s / %2$s"
     566msgstr "Pagina %1$s / %2$s"
     567
     568#: src/js/simebv-viewer.js:1066
     569msgid "Ebook contents"
     570msgstr "Contenuti dell'ebook"
     571
     572#: src/js/simebv-viewer.js:1170
     573msgid "Error while opening the book:"
     574msgstr "Errore durante l'apertura del libro:"
     575
     576#: src/js/simebv-footnotes.js:14
     577msgid "Bibliography"
     578msgstr "Bibliografia"
     579
     580#: src/js/simebv-footnotes.js:15
     581msgid "Definition"
     582msgstr "Definizione"
     583
     584#: src/js/simebv-footnotes.js:16
     585#: src/js/simebv-footnotes.js:17
     586#: src/js/simebv-footnotes.js:65
     587#: src/js/simebv-footnotes.js:77
     588msgid "Note"
     589msgstr "Nota"
     590
    244591#. translators: Suggested privacy policy. %s: name of the plugin
    245 #: includes/simebv-admin.php:32
     592#: includes/simebv-admin.php:26
    246593#, php-format
    247594msgid ""
    248595"<h3>Use of %s plugin</h3>\n"
    249 "<p>Our website uses a plugin to enhance your experience when reading ebooks directly on our site. This plugin does <strong>not</strong> collect, transmit, or share any personal data. It does <strong>not</strong> set cookies or track your activity across websites.</p>\n"
     596"<p>Our website uses a plugin to enhance your experience when reading ebooks directly on our site. This plugin does <strong>not</strong> collect any personal data. It does <strong>not</strong> set cookies or track your activity across websites.</p>\n"
    250597"<p>When you interact with the ebook viewer, the plugin may store certain <strong>preferences locally in your browser</strong> using local storage technology. This information is saved solely to remember your settings and improve your user experience during future visits. These preferences include:</p>\n"
    251598"<ul>\n"
    252599"<li>The last page you viewed</li>\n"
    253 "<li>Your selected font size</li>\n"
     600"<li>Your selected font size and style</li>\n"
     601"<li>Show or hide annotations and page delimiters</li>\n"
    254602"<li>Page margin settings</li>\n"
    255603"<li>Maximum pages displayed per view</li>\n"
     
    257605"<li>Chosen color theme and any color filters</li>\n"
    258606"<li>Zoom level</li>\n"
     607"<li>Speech synthesis preferences</li>\n"
    259608"</ul>\n"
    260 "<p>This information is stored <strong>only on your device</strong>, is not accessible by us or any third party, and is used exclusively to personalize your ebook reading experience on this website.</p>\n"
     609"<p>This information is stored <strong>only on your device</strong> and is never transmitted to our servers. It is used exclusively to personalize your ebook reading experience on this website.</p>\n"
     610"<p>If you use the Text-to-Speech functionality offered by the ebook viewer with a remote voice (the available voices depend on the browser and the operating system: Chrome offers Google remote voices, Edge offers Microsoft remote ones, for example), the text to be synthesized and the voice and language parameters will be transmitted to these remote services. As with any network request, your IP address and browser identifiers are also transmitted. You can avoid this by selecting a local voice, if available in your system.</p>\n"
    261611"<p><strong>Note:</strong> To retrieve and display the ebook content, the plugin interacts with the WordPress REST API. This process may involve the use of <strong>technical cookies</strong> that are set by WordPress itself to ensure secure and correct data transmission. These cookies do not track you and are essential for the proper functioning of the website.</p>\n"
    262612"<p>You can clear your saved preferences at any time by clearing your browser’s local storage or using your browser's privacy settings.</p>"
    263613msgstr ""
    264614"<h3>Uso del plugin %s</h3>\n"
    265 "<p>Il nostro sito web usa un plugin per migliorare la tua esperienza quando leggi ebook direttamente sul nostro sito. Questo plugin <strong>non</strong> raccoglie, trasmette né condivide alcun dato personale. <strong>Non</strong> imposta cookie né traccia la tua attività tra siti web.</p>\n"
     615"<p>Il nostro sito web usa un plugin per migliorare la tua esperienza quando leggi ebook direttamente sul nostro sito. Questo plugin <strong>non</strong> raccoglie alcun dato personale. <strong>Non</strong> imposta cookie né traccia la tua attività tra siti web.</p>\n"
    266616"<p>Quando interagisci con l'ebook viewer, il plugin può salvare certe <strong> preferenze localmente nel tuo browser</strong> usando la tecnologia del local storage. Queste informazioni sono salvate soltanto per ricordarsi le tue impostazioni e migliorare la tua esperienza durante le visite future. Queste preferenze includono:</p>\n"
    267617"<ul>\n"
    268618"<li>L'ultima pagina visualizzata</li>\n"
    269 "<li>La dimensione del testo selezionata</li>\n"
     619"<li>La dimensione del testo e lo stile del font</li>\n"
     620"<li>Se mostrare o meno le annotazioni e i limiti di pagina</li>\n"
    270621"<li>I margini di pagina</li>\n"
    271622"<li>Le preferenze di layout (pagine o scorrimento)</li>\n"
    272623"<li>Il tema colore scelto e i filtri colore</li>\n"
    273624"<li>Il livello di zoom</li>\n"
     625"<li>Le preferenze della sintesi vocale</li>\n"
    274626"</ul>\n"
    275 "<p>Queste informazioni sono memorizzate <strong>solo sul tuo dispositivo</strong>, non sono accessibili da noi né da terze parti, e sono usate esclusivamente per personalizzare la tua esperienza nella lettura degli ebook su questo sito web.</p>\n"
     627"<p>Queste informazioni sono memorizzate <strong>solo sul tuo dispositivo</strong> e non vengono mai trasmesse ai nostri server. Sono usate esclusivamente per personalizzare la tua esperienza nella lettura degli ebook su questo sito web.</p>\n"
     628"<p>Se usi la funzionalità di sintesi vocale (Text-to-Speech) offerta dall'ebook viewer con una voce remota (le voci disponibili dipendono dal browser e dal sistema operativo: per esempio, Chrome offre le voci remote di Google, Edge offre quelle della Microsoft), il testo da elaborare e i parametri della voce e della lingua saranno trasmessi a questi servizi remoti. Come per ogni richiesta di rete, verranno trasmessi anche il tuo indirizzo IP e gli identificatori del browser. Puoi evitare questa cosa selezionando una voce locale, se disponibile nel tuo sistema.</p>\n"
    276629"<p><strong>Nota:</strong> Per recuperare e mostrare il contenuto dell'ebook, il plugin interagisce con la REST API di WordPress. Questo processo può comprtare l'uso di <strong>cookie tecnici</strong> impostati da WordPress per garantire una sicura e corretta trasmissione dei dati. Questi cookie non ti tracciano e sono essenziali per il corretto funzionamento del sito web.</p>\n"
    277630"<p>Puoi cancellare in ogni momento le tue preferenze salvate svuotando il local storage del tuo browser, o utilizzando le impostazioni di privacy del tuo browser.</p>"
    278631
    279 #: src/js/simebv-viewer.js:280
    280 msgctxt "Theme color"
    281 msgid "Light"
    282 msgstr "Chiaro"
    283 
    284 #: src/js/simebv-viewer.js:281
    285 msgctxt "Theme color"
    286 msgid "Dark"
    287 msgstr "Scuro"
     632#: src/js/simebv-fonts-dialog.js:12
     633msgid "Select Font Style"
     634msgstr "Stile Font"
  • simple-ebook-viewer/trunk/languages/simple-ebook-viewer.pot

    r3301587 r3480712  
    1 # Copyright (C) 2025 Francesco Martini
     1# Copyright (C) 2026 Francesco Martini
    22# This file is distributed under the GPL-2.0+.
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Simple Ebook Viewer 0.3.1\n"
     5"Project-Id-Version: Simple Ebook Viewer 1.0.0\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/simple-ebook-viewer\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
     
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2025-05-24T19:20:50+00:00\n"
     12"POT-Creation-Date: 2026-03-11T16:59:39+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.12.0\n"
     
    1717#. Plugin Name of the plugin
    1818#: simple-ebook-viewer.php
    19 #: simple-ebook-viewer.php:37
     19#: simple-ebook-viewer.php:23
    2020msgid "Simple Ebook Viewer"
    2121msgstr ""
     
    3232
    3333#. translators: Suggested privacy policy. %s: name of the plugin
    34 #: includes/simebv-admin.php:32
     34#: includes/simebv-admin.php:26
    3535#, php-format
    3636msgid ""
    3737"<h3>Use of %s plugin</h3>\n"
    38 "<p>Our website uses a plugin to enhance your experience when reading ebooks directly on our site. This plugin does <strong>not</strong> collect, transmit, or share any personal data. It does <strong>not</strong> set cookies or track your activity across websites.</p>\n"
     38"<p>Our website uses a plugin to enhance your experience when reading ebooks directly on our site. This plugin does <strong>not</strong> collect any personal data. It does <strong>not</strong> set cookies or track your activity across websites.</p>\n"
    3939"<p>When you interact with the ebook viewer, the plugin may store certain <strong>preferences locally in your browser</strong> using local storage technology. This information is saved solely to remember your settings and improve your user experience during future visits. These preferences include:</p>\n"
    4040"<ul>\n"
    4141"<li>The last page you viewed</li>\n"
    42 "<li>Your selected font size</li>\n"
     42"<li>Your selected font size and style</li>\n"
     43"<li>Show or hide annotations and page delimiters</li>\n"
    4344"<li>Page margin settings</li>\n"
    4445"<li>Maximum pages displayed per view</li>\n"
     
    4647"<li>Chosen color theme and any color filters</li>\n"
    4748"<li>Zoom level</li>\n"
     49"<li>Speech synthesis preferences</li>\n"
    4850"</ul>\n"
    49 "<p>This information is stored <strong>only on your device</strong>, is not accessible by us or any third party, and is used exclusively to personalize your ebook reading experience on this website.</p>\n"
     51"<p>This information is stored <strong>only on your device</strong> and is never transmitted to our servers. It is used exclusively to personalize your ebook reading experience on this website.</p>\n"
     52"<p>If you use the Text-to-Speech functionality offered by the ebook viewer with a remote voice (the available voices depend on the browser and the operating system: Chrome offers Google remote voices, Edge offers Microsoft remote ones, for example), the text to be synthesized and the voice and language parameters will be transmitted to these remote services. As with any network request, your IP address and browser identifiers are also transmitted. You can avoid this by selecting a local voice, if available in your system.</p>\n"
    5053"<p><strong>Note:</strong> To retrieve and display the ebook content, the plugin interacts with the WordPress REST API. This process may involve the use of <strong>technical cookies</strong> that are set by WordPress itself to ensure secure and correct data transmission. These cookies do not track you and are essential for the proper functioning of the website.</p>\n"
    5154"<p>You can clear your saved preferences at any time by clearing your browser’s local storage or using your browser's privacy settings.</p>"
     
    5356
    5457#. translators: %s: example of an ebook slug based on the opened ebook
    55 #: includes/simebv-admin.php:112
     58#: includes/simebv-admin.php:109
    5659#, php-format
    5760msgid "Use this slug in the shortcode \"simebv_viewer\" to view the ebook in your pages (e.g. [simebv_viewer book=\"%s\"]). If left empty, the value of post_name will be used instead."
    5861msgstr ""
    5962
    60 #: includes/simebv-viewer.php:98
     63#: includes/simebv-viewer.php:130
     64msgid "It seems that JavaScript is not enabled in your browser, you need to enable it in order to use the Ebook Viewer."
     65msgstr ""
     66
     67#: includes/simebv-viewer.php:150
    6168msgid "No Web Publication file provided."
    6269msgstr ""
    6370
    64 #: includes/simebv-viewer.php:126
    65 msgid "It seems that JavaScript is not enabled in your browser, you need to enable it in order to use the Ebook Viewer."
     71#: src/js/simebv-annotations-dialog.js:13
     72msgid "Show/hide annotations"
     73msgstr ""
     74
     75#: src/js/simebv-annotations-dialog.js:25
     76msgid "Show Calibre Bookmarks"
     77msgstr ""
     78
     79#: src/js/simebv-annotations-dialog.js:39
     80msgid "(e.g. of the ebook's paper version)"
     81msgstr ""
     82
     83#: src/js/simebv-annotations-dialog.js:40
     84msgid "Show page delimiters"
     85msgstr ""
     86
     87#: src/js/simebv-annotations-dialog.js:49
     88#: src/js/simebv-filters-dialog.js:76
     89#: src/js/simebv-fonts-dialog.js:93
     90#: src/js/simebv-footnotes.js:101
     91#: src/js/simebv-metadata-dialog.js:32
     92#: src/js/simebv-show-annotation-dialog.js:13
     93#: src/js/simebv-speech-dialog.js:319
     94msgid "OK"
     95msgstr ""
     96
     97#: src/js/simebv-annotations-dialog.js:52
     98msgid "Cancel"
    6699msgstr ""
    67100
     
    74107msgstr ""
    75108
    76 #: src/js/simebv-filters-dialog.js:44
     109#: src/js/simebv-filters-dialog.js:45
    77110msgid "Rotate hues:"
    78111msgstr ""
    79112
    80 #: src/js/simebv-filters-dialog.js:55
     113#: src/js/simebv-filters-dialog.js:57
    81114msgid "Transparent background:"
    82115msgstr ""
    83116
    84 #: src/js/simebv-filters-dialog.js:66
     117#: src/js/simebv-filters-dialog.js:69
    85118msgid "Background color:"
    86119msgstr ""
    87120
    88 #: src/js/simebv-filters-dialog.js:72
    89 msgid "OK"
    90 msgstr ""
    91 
    92 #: src/js/simebv-search-dialog.js:8
    93 #: src/js/simebv-search-dialog.js:9
    94 msgid "Search"
    95 msgstr ""
    96 
    97 #: src/js/simebv-search-dialog.js:21
    98 msgid "Previous result"
    99 msgstr ""
    100 
    101 #: src/js/simebv-search-dialog.js:32
    102 msgid "Next result"
    103 msgstr ""
    104 
    105 #: src/js/simebv-search-dialog.js:43
     121#: src/js/simebv-fonts-dialog.js:12
     122msgid "Select Font Style"
     123msgstr ""
     124
     125#: src/js/simebv-fonts-dialog.js:26
     126msgid "Auto"
     127msgstr ""
     128
     129#: src/js/simebv-fonts-dialog.js:38
     130msgid "Serif"
     131msgstr ""
     132
     133#: src/js/simebv-fonts-dialog.js:51
     134msgid "Sans Serif"
     135msgstr ""
     136
     137#: src/js/simebv-fonts-dialog.js:64
     138msgid "Monospace"
     139msgstr ""
     140
     141#: src/js/simebv-fonts-dialog.js:77
     142msgid "OpenDyslexic"
     143msgstr ""
     144
     145#: src/js/simebv-fonts-dialog.js:96
     146#: src/js/simebv-search-dialog.js:61
     147#: src/js/simebv-speech-dialog.js:75
     148#: src/js/simebv-speech-dialog.js:322
    106149msgid "Close"
    107150msgstr ""
    108151
    109 #: src/js/simebv-viewer.js:172
     152#: src/js/simebv-footnotes.js:14
     153msgid "Bibliography"
     154msgstr ""
     155
     156#: src/js/simebv-footnotes.js:15
     157msgid "Definition"
     158msgstr ""
     159
     160#: src/js/simebv-footnotes.js:16
     161#: src/js/simebv-footnotes.js:17
     162#: src/js/simebv-footnotes.js:65
     163#: src/js/simebv-footnotes.js:77
     164msgid "Note"
     165msgstr ""
     166
     167#: src/js/simebv-footnotes.js:89
     168#: src/js/simebv-menu-items.js:231
     169msgid "Read aloud..."
     170msgstr ""
     171
     172#: src/js/simebv-header.js:262
     173msgid "No title"
     174msgstr ""
     175
     176#: src/js/simebv-header.js:263
     177msgid "Show sidebar"
     178msgstr ""
     179
     180#: src/js/simebv-header.js:266
     181msgid "Show settings"
     182msgstr ""
     183
     184#: src/js/simebv-header.js:269
     185msgid "Toggle full screen"
     186msgstr ""
     187
     188#: src/js/simebv-header.js:272
     189msgid "Close Reader"
     190msgstr ""
     191
     192#: src/js/simebv-menu-items.js:8
    110193msgid "Search..."
    111194msgstr ""
    112195
    113 #: src/js/simebv-viewer.js:182
     196#: src/js/simebv-menu-items.js:19
    114197msgid "History"
    115198msgstr ""
    116199
    117 #: src/js/simebv-viewer.js:187
     200#: src/js/simebv-menu-items.js:24
    118201msgid "Previous"
    119202msgstr ""
    120203
    121 #: src/js/simebv-viewer.js:195
     204#: src/js/simebv-menu-items.js:32
    122205msgid "Next"
    123206msgstr ""
    124207
    125 #: src/js/simebv-viewer.js:205
     208#: src/js/simebv-menu-items.js:43
    126209msgid "Layout"
    127210msgstr ""
    128211
    129 #: src/js/simebv-viewer.js:208
     212#: src/js/simebv-menu-items.js:46
    130213msgid "Paginated"
    131214msgstr ""
    132215
    133 #: src/js/simebv-viewer.js:209
     216#: src/js/simebv-menu-items.js:47
    134217msgid "Scrolled"
    135218msgstr ""
    136219
    137 #: src/js/simebv-viewer.js:227
     220#: src/js/simebv-menu-items.js:66
    138221msgid "Max pages per view"
    139222msgstr ""
    140223
    141 #: src/js/simebv-viewer.js:240
     224#: src/js/simebv-menu-items.js:80
    142225msgid "Font Size"
    143226msgstr ""
    144227
    145 #: src/js/simebv-viewer.js:243
     228#: src/js/simebv-menu-items.js:83
    146229msgctxt "Font Size"
    147230msgid "Small"
    148231msgstr ""
    149232
    150 #: src/js/simebv-viewer.js:244
     233#: src/js/simebv-menu-items.js:84
    151234msgctxt "Font Size"
    152235msgid "Medium"
    153236msgstr ""
    154237
    155 #: src/js/simebv-viewer.js:245
     238#: src/js/simebv-menu-items.js:85
    156239msgctxt "Font Size"
    157240msgid "Large"
    158241msgstr ""
    159242
    160 #: src/js/simebv-viewer.js:246
     243#: src/js/simebv-menu-items.js:86
    161244msgctxt "Font Size"
    162245msgid "X-Large"
    163246msgstr ""
    164247
    165 #: src/js/simebv-viewer.js:259
     248#: src/js/simebv-menu-items.js:98
    166249msgid "Page Margins"
    167250msgstr ""
    168251
    169 #: src/js/simebv-viewer.js:262
     252#: src/js/simebv-menu-items.js:101
    170253msgctxt "Margins"
    171254msgid "Small"
    172255msgstr ""
    173256
    174 #: src/js/simebv-viewer.js:263
     257#: src/js/simebv-menu-items.js:102
    175258msgctxt "Margins"
    176259msgid "Medium"
    177260msgstr ""
    178261
    179 #: src/js/simebv-viewer.js:264
     262#: src/js/simebv-menu-items.js:103
    180263msgctxt "Margins"
    181264msgid "Large"
    182265msgstr ""
    183266
    184 #: src/js/simebv-viewer.js:275
     267#: src/js/simebv-menu-items.js:115
     268msgid "Show position"
     269msgstr ""
     270
     271#: src/js/simebv-menu-items.js:118
     272msgid "Slider"
     273msgstr ""
     274
     275#: src/js/simebv-menu-items.js:119
     276msgid "Percentage"
     277msgstr ""
     278
     279#: src/js/simebv-menu-items.js:120
     280msgid "Pages"
     281msgstr ""
     282
     283#: src/js/simebv-menu-items.js:131
    185284msgid "Colors"
    186285msgstr ""
    187286
    188 #: src/js/simebv-viewer.js:278
     287#: src/js/simebv-menu-items.js:134
    189288msgctxt "Theme color"
    190289msgid "Auto"
    191290msgstr ""
    192291
    193 #: src/js/simebv-viewer.js:279
     292#: src/js/simebv-menu-items.js:135
    194293msgctxt "Theme color"
    195294msgid "Sepia"
    196295msgstr ""
    197296
    198 #: src/js/simebv-viewer.js:280
     297#: src/js/simebv-menu-items.js:136
    199298msgctxt "Theme color"
    200299msgid "Light"
    201300msgstr ""
    202301
    203 #: src/js/simebv-viewer.js:281
     302#: src/js/simebv-menu-items.js:137
    204303msgctxt "Theme color"
    205304msgid "Dark"
    206305msgstr ""
    207306
    208 #: src/js/simebv-viewer.js:345
     307#: src/js/simebv-menu-items.js:138
     308msgctxt "Theme color"
     309msgid "Light (forced)"
     310msgstr ""
     311
     312#: src/js/simebv-menu-items.js:139
     313msgctxt "Theme color"
     314msgid "Dark (forced)"
     315msgstr ""
     316
     317#: src/js/simebv-menu-items.js:211
     318msgid "Font style..."
     319msgstr ""
     320
     321#: src/js/simebv-menu-items.js:221
     322msgid "Show/hide annotations..."
     323msgstr ""
     324
     325#: src/js/simebv-menu-items.js:241
    209326msgid "Color filter..."
    210327msgstr ""
    211328
    212 #: src/js/simebv-viewer.js:354
     329#: src/js/simebv-menu-items.js:251
    213330msgid "Zoom"
    214331msgstr ""
    215332
    216 #: src/js/simebv-viewer.js:357
     333#: src/js/simebv-menu-items.js:254
    217334msgid "Fit page"
    218335msgstr ""
    219336
    220 #: src/js/simebv-viewer.js:358
     337#: src/js/simebv-menu-items.js:255
    221338msgid "Fit width"
    222339msgstr ""
    223340
    224 #: src/js/simebv-viewer.js:359
     341#: src/js/simebv-menu-items.js:256
    225342msgid "Custom"
    226343msgstr ""
    227344
    228 #. translators: %1s: page number
    229 #: src/js/simebv-viewer.js:824
     345#: src/js/simebv-metadata-dialog.js:4
     346msgid "Title"
     347msgstr ""
     348
     349#: src/js/simebv-metadata-dialog.js:5
     350msgid "Subtitle"
     351msgstr ""
     352
     353#: src/js/simebv-metadata-dialog.js:6
     354msgid "Author"
     355msgstr ""
     356
     357#: src/js/simebv-metadata-dialog.js:7
     358msgid "Editor"
     359msgstr ""
     360
     361#: src/js/simebv-metadata-dialog.js:8
     362msgid "Translator"
     363msgstr ""
     364
     365#: src/js/simebv-metadata-dialog.js:9
     366msgid "Artist"
     367msgstr ""
     368
     369#: src/js/simebv-metadata-dialog.js:10
     370msgid "Illustrator"
     371msgstr ""
     372
     373#: src/js/simebv-metadata-dialog.js:11
     374msgid "Colorist"
     375msgstr ""
     376
     377#: src/js/simebv-metadata-dialog.js:12
     378msgid "Narrator"
     379msgstr ""
     380
     381#: src/js/simebv-metadata-dialog.js:13
     382msgid "Language"
     383msgstr ""
     384
     385#: src/js/simebv-metadata-dialog.js:14
     386msgid "Publisher"
     387msgstr ""
     388
     389#: src/js/simebv-metadata-dialog.js:15
     390msgid "Publication date"
     391msgstr ""
     392
     393#: src/js/simebv-metadata-dialog.js:16
     394msgid "Subject"
     395msgstr ""
     396
     397#: src/js/simebv-metadata-dialog.js:17
     398msgid "Description"
     399msgstr ""
     400
     401#: src/js/simebv-metadata-dialog.js:18
     402msgid "Source"
     403msgstr ""
     404
     405#: src/js/simebv-metadata-dialog.js:19
     406msgid "Rights"
     407msgstr ""
     408
     409#: src/js/simebv-metadata-dialog.js:20
     410msgid "Source of the page list"
     411msgstr ""
     412
     413#: src/js/simebv-metadata-dialog.js:21
     414msgid "Identifier"
     415msgstr ""
     416
     417#: src/js/simebv-metadata-dialog.js:22
     418msgid "Other identifiers"
     419msgstr ""
     420
     421#: src/js/simebv-metadata-dialog.js:28
     422msgid "Ebook metadata"
     423msgstr ""
     424
     425#: src/js/simebv-metadata-dialog.js:55
     426msgid "Ebook format"
     427msgstr ""
     428
     429#: src/js/simebv-navbar.js:86
     430msgid "Turn left page"
     431msgstr ""
     432
     433#: src/js/simebv-navbar.js:89
     434msgid "Turn right page"
     435msgstr ""
     436
     437#: src/js/simebv-navbar.js:92
     438msgid "Location in ebook"
     439msgstr ""
     440
     441#: src/js/simebv-search-dialog.js:26
     442#: src/js/simebv-search-dialog.js:27
     443msgid "Search"
     444msgstr ""
     445
     446#: src/js/simebv-search-dialog.js:39
     447msgid "Previous result"
     448msgstr ""
     449
     450#: src/js/simebv-search-dialog.js:50
     451msgid "Next result"
     452msgstr ""
     453
     454#: src/js/simebv-show-annotation-dialog.js:20
     455msgid "Annotation"
     456msgstr ""
     457
     458#: src/js/simebv-sidebar.js:163
     459msgid "Details"
     460msgstr ""
     461
     462#: src/js/simebv-sidebar.js:180
     463msgid "Ebook metadata and navigation trees"
     464msgstr ""
     465
     466#: src/js/simebv-sidebar.js:268
     467msgid "Table of contents"
     468msgstr ""
     469
     470#: src/js/simebv-sidebar.js:277
     471#: src/js/simebv-viewer.js:295
     472msgid "Page list"
     473msgstr ""
     474
     475#: src/js/simebv-speech-dialog.js:16
     476msgid "Play"
     477msgstr ""
     478
     479#: src/js/simebv-speech-dialog.js:17
     480msgid "Pause"
     481msgstr ""
     482
     483#: src/js/simebv-speech-dialog.js:35
     484msgid "Speech Options"
     485msgstr ""
     486
     487#: src/js/simebv-speech-dialog.js:48
     488msgid "Go to previous section"
     489msgstr ""
     490
     491#: src/js/simebv-speech-dialog.js:59
     492msgid "Go to next section"
     493msgstr ""
     494
     495#: src/js/simebv-speech-dialog.js:200
     496msgid "Text To Speech Options"
     497msgstr ""
     498
     499#: src/js/simebv-speech-dialog.js:214
     500msgid "Volume: "
     501msgstr ""
     502
     503#: src/js/simebv-speech-dialog.js:234
     504msgid "Pitch: "
     505msgstr ""
     506
     507#: src/js/simebv-speech-dialog.js:254
     508msgid "Speed: "
     509msgstr ""
     510
     511#: src/js/simebv-speech-dialog.js:289
     512msgid "Voice: "
     513msgstr ""
     514
     515#: src/js/simebv-speech-dialog.js:299
     516msgid "The voice is automatically selected based on the ebook and the system language. If you have more than one voice for the language, you can select your preferred one in the system settings."
     517msgstr ""
     518
     519#: src/js/simebv-speech-dialog.js:305
     520msgid "If you select a word in the text, the speech will begin from that word."
     521msgstr ""
     522
     523#: src/js/simebv-speech-dialog.js:306
     524msgid "Warning: remote voices may restart from the beginning of the paragraph when they are changed. On Android, all voices may do the same when paused also."
     525msgstr ""
     526
     527#: src/js/simebv-speech.js:27
     528msgid "I cannot access the audio output device because it's already in use, maybe by another application."
     529msgstr ""
     530
     531#: src/js/simebv-speech.js:28
     532msgid "I cannot identify an audio output channel on this device."
     533msgstr ""
     534
     535#: src/js/simebv-speech.js:29
     536msgid "A required network operation to start the speech synthesis failed."
     537msgstr ""
     538
     539#: src/js/simebv-speech.js:30
     540msgid "No speech synthesis engine available at this moment."
     541msgstr ""
     542
     543#: src/js/simebv-speech.js:31
     544msgid "The speech synthesis engine raised an error."
     545msgstr ""
     546
     547#: src/js/simebv-speech.js:32
     548msgid "No appropriate voice available"
     549msgstr ""
     550
     551#: src/js/simebv-speech.js:33
     552msgid "The selected voice is not available."
     553msgstr ""
     554
     555#: src/js/simebv-speech.js:34
     556msgid "The text is too long to synthesize."
     557msgstr ""
     558
     559#: src/js/simebv-speech.js:35
     560msgid "The value of at least one amongst Speed, Pitch and Volume is not valid."
     561msgstr ""
     562
     563#: src/js/simebv-speech.js:36
     564msgid "The operation's start was not allowed."
     565msgstr ""
     566
     567#: src/js/simebv-speech.js:174
     568#, js-format
     569msgid "No appropriate voice available for the language %1$s"
     570msgstr ""
     571
     572#: src/js/simebv-viewer.js:294
     573msgid "Start of page "
     574msgstr ""
     575
     576#. translators: %1$s: page number
     577#: src/js/simebv-viewer.js:882
     578#: src/js/simebv-viewer.js:886
    230579#, js-format
    231580msgid "Page %1$s"
    232581msgstr ""
    233582
    234 #. translators: Loc: contraction for 'Location' in the book, followed by a numerical fraction
    235 #: src/js/simebv-viewer.js:828
     583#: src/js/simebv-viewer.js:890
     584#: src/js/simebv-viewer.js:891
     585msgid "Front matter"
     586msgstr ""
     587
     588#. translators: Location in the book, followed by a numerical fraction
     589#: src/js/simebv-viewer.js:896
    236590#, js-format
    237 msgid "Loc %1$s/%2$s"
    238 msgstr ""
    239 
    240 #: src/js/simebv-viewer.js:968
     591msgid "Location %1$s/%2$s"
     592msgstr ""
     593
     594#. translators: current page number / total pages number
     595#: src/js/simebv-viewer.js:900
     596#, js-format
     597msgid "Page %1$s / %2$s"
     598msgstr ""
     599
     600#: src/js/simebv-viewer.js:1065
    241601msgid "Loading..."
    242602msgstr ""
    243603
    244 #: src/js/simebv-viewer.js:970
    245 msgid "Show sidebar"
    246 msgstr ""
    247 
    248 #: src/js/simebv-viewer.js:974
    249 msgid "No title"
    250 msgstr ""
    251 
    252 #: src/js/simebv-viewer.js:976
    253 msgid "Show settings"
    254 msgstr ""
    255 
    256 #: src/js/simebv-viewer.js:981
    257 msgid "Full screen"
    258 msgstr ""
    259 
    260 #: src/js/simebv-viewer.js:986
    261 msgid "Go left"
    262 msgstr ""
    263 
    264 #: src/js/simebv-viewer.js:991
    265 msgid "Go right"
    266 msgstr ""
    267 
    268 #: src/js/simebv-viewer.js:1108
     604#: src/js/simebv-viewer.js:1066
     605msgid "Ebook contents"
     606msgstr ""
     607
     608#: src/js/simebv-viewer.js:1149
    269609msgid "Error: I couldn't retrieve the book to display."
    270610msgstr ""
    271611
    272 #: src/js/simebv-viewer.js:1114
     612#: src/js/simebv-viewer.js:1155
    273613msgid "Resource not found on the server"
    274614msgstr ""
    275615
    276 #: src/js/block/block.json
    277 msgctxt "block title"
    278 msgid "Ebook Viewer Block"
    279 msgstr ""
    280 
    281 #: src/js/block/block.json
    282 msgctxt "block description"
    283 msgid "Display and navigate the contents of an ebook."
    284 msgstr ""
     616#: src/js/simebv-viewer.js:1170
     617msgid "Error while opening the book:"
     618msgstr ""
  • simple-ebook-viewer/trunk/readme.txt

    r3412994 r3480712  
    33Tags: ebook, epub, viewer, reader, azw3
    44Tested up to: 6.9
    5 Stable Tag: 0.4.1
     5Stable Tag: 1.0.0
    66Requires PHP: 7.4
    77Requires at least: 6.0
     
    5555
    5656**Settings**
     57
    5758The users of your site will be able to set their preferences about the appearance of the ebook in the Viewer by opening the Viewer menu (the cog icon on the top right) and by selecting the appropriate entries.
    5859
    5960The plugin sets some reasonable defaults for these preferences, but if you're not happy with those defaults, you can change them by adding one or more of the following attributes to the shortcode, with the appropriate values:
    60 
    6161* **`layout`**
    6262  - accepted values: "**paginated**" or "**scrolled**" (default: **paginated**)
     
    6565* **`default-font-size`**
    6666  - accepted values: "**small**", "**medium**", "**large**", "**x-large**" (default: **medium**)
     67* **`font-family`**
     68  - accepted_values: "**auto**", "**serif**", "**sans-serif**", "**monospace**", "**opendyslexic**" (default: **auto**)
    6769* **`page-margins`**
    6870  - accepted values: "**small**", "**medium**", "**large**" (default: **medium**)
     71* **`show-annotations`**
     72  - accepted values: "**true**", "**false**" (default: **false**)
     73* **`show-page-delimiters`**
     74  - accepted values: "**true**", "**false**" (default: **false**)
    6975* **`zoom`**
    7076  - accepted values: "**fit-page**", "**fit-width**" or a number in the range **10 - 400** (default: **fit-page**)
     
    7278  - accepted values: "**auto**", "**sepia**", "**light**", "**dark**" (default: **auto**)
    7379
    74 Layout, max-pages, default-font-size and page-margins are only available for reflowable ebooks, while zoom is only available for fixed layout ones.
     80`Layout`, `max-pages`, `default-font-size` and `page-margins` are only available for reflowable ebooks, while `zoom` is only available for fixed layout ones.
    7581
    76 Max-pages is the maximum number of pages (in the "paginated" layout) that the user will be able to see in a single view (if there is enough screen space).
     82`Max-pages` is the maximum number of pages (in the "paginated" layout) that the user will be able to see in a single view (if there is enough screen space).
    7783
    78 Color-scheme: "auto" means that the Viewer will adapt to the preferred color-scheme set by the user in their device or browser (light or dark).
     84`Show-annotations` and `show-page-delimiters` let the user see on the pages the Calibre annotations (as highlighted text, if there are Calibre annotations in the ebook) and the page delimiters (as short vertical bars, if the ebook contains a page list).
     85
     86`Color-scheme`: "auto" means that the Viewer will adapt to the preferred color-scheme set by the user in their device or browser (light or dark).
    7987
    8088For most ebooks these preferences should be enough, but sometimes there are ebooks with style rules that don't play well with the styles set by the Viewer, so the users have also the option to apply some filters to the Viewer's colors (with the menu entry "Color filter...").
    8189
    8290You can set the default values for these filters with the following shortcode's attributes:
    83 
    8491* **`activate-color-filter`**
    8592  - accepted values: "**true**", "**false**" (default: **false**)
     
    93100  - accepted values: a valid CSS hex color code (default: **#FFFFFF**)
    94101
    95 Set activate-color-filter to "true" is necessary to enable all the other filters, and set bg-transparent-filter to false is necessary to enable bg-color-filter.
     102Set `activate-color-filter` to "true" is necessary to enable all the other filters, and set `bg-transparent-filter` to false is necessary to enable `bg-color-filter`.
    96103
    97 Bg-transparent-filter and bg-color-filter are available for reflowable ebooks only.
     104`Bg-transparent-filter` and `bg-color-filter` are available for reflowable ebooks only.
    98105
    99 Invert-color-filter inverts the lightness of the colors. With a value of 0 it has no effect, with a value of 1, the white will become black and the black will become white.
     106`Invert-color-filter` inverts the lightness of the colors. With a value of 0 it has no effect, with a value of 1, the white will become black and the black will become white.
    100107
    101 Rotate-color-filter rotates the hues of all the colors in the ebook, like in a [Color Wheel](https://developer.mozilla.org/en-US/docs/Glossary/Color_wheel) (so, no effect on black and white).
     108`Rotate-color-filter` rotates the hues of all the colors in the ebook, like in a [Color Wheel](https://developer.mozilla.org/en-US/docs/Glossary/Color_wheel) (so, no effect on black and white).
     109
     110There are some other settings that the users won't be able to change by themselves. These are:
     111* **`always-full-viewport`**
     112  - accepted values: "**true**", "**false**" (default: **false**. If **true**, **return-to-url** is also required)
     113* **`return-to-url`**
     114  - accepted values: a URL with the same hostname than the page that contains the ebook viewer (default: '')
     115* **`real-fullscreen`**
     116  - accepted values: "**true**", "**false**" (default: **false**)
     117* **`allow-js`**
     118  - accepted values: "**true**", "**false**" (default: **false**)
     119* **`math-styles`**
     120  - accepted values: "**fonts**", "**styles**", "**all**" (default: '')
     121* **`ebook-author`**
     122  - accepted values: any string, max 260 characters (default: '')
     123* **`ebook-title`**
     124  - accepted values: any string, max 260 characters (default: '')
     125* **`popup-notes`**
     126  - accepted values: "**true**", "**false**" (default: **true**)
     127
     128With `always-full-viewport` set to "true", the ebook viewer will automatically cover the entire webpage when it is opened, and the "full screen" icon will be replaced by a "close viewer" icon. `always-full-viewport="true"` requires that also `return-to-url` is present, with a valid URL that indicates the destination of the user when they choose to close the viewer. The URL can be relative, like "/" or "/books-gallery", or it can be absolute, but it needs to have the same hostname of the webpage that contains the ebook viewer (e.g. if the ebook viewer is opened in https://www.example.com/ebook-viewer, the URL in `return-to-url` needs to start with https://www.example.com).
     129
     130If `real-fullscreen` is set to "true", the ebook viewer will cover the entire screen instead of only the viewport of the webpage when the user clicks on the "full screen" icon. With `real-fullscreen` set to true, `always-full-viewport` is ignored, since the full screen requires an explicit action by the user.
     131
     132`Allow-js`: normally, the plugin forbids, as far as possible, script execution from inside the ebooks. If you set `allow-js` to true, this restriction is relaxed, and scripts within the ebook can be executed.
     133**Caveat 1**: you need to be absolutely certain that the code inside the ebook is not malicious, since it can harm your entire webpage.
     134**Caveat 2**: the ebook viewer is not strongly equipped to deal with dynamic content created or removed after the ebook opening, so you might encounter errors or inaccuracies when jumping from one ebook location to another in such a circumstance.
     135
     136`Math-styles`: in recent years all the major browser have implemented a good deal of the MathML Core specification, so it is now possible to represent natively many mathematical expression without the use of third party libraries. However, not all browsers and systems load automatically appropriate fonts. With math-styles set to "fonts" or "all", all the contents of MathML expression will use the Latin Modern font.
     137Another shortcoming in the current support of MathML, is that only Gecko based browsers (i.e. Firefox) implement a breaking lines algorithm, so long math expressions within small screens usually don't fit entirely. With math-styles set to "styles" or "all", the plugin will use some html+css tricks to try to allow either line breaks or horizontal scrolling.
     138
     139`Ebook-author` and `ebook-title`: you can use these optional values to override the ones that the ebook viewer retrieves from the ebook metadata in order to display them to the users.
     140
     141`Popup-notes`: show footnotes and endnotes as popup instead of just links. The notes (and their references) need to be marked with the appropriate epub:type attributes to ensure that they are displayed as popups (the ebook viewer will try to recognize them anyway, but without guarantees).
    102142
    103143== Warning ==
     
    105145Ebooks can contain scripted content that might be executed on your webpage. The plugin does its best to forbid script execution from inside the loaded content, but it can't guarantee 100% safety. Don't display ebooks from untrusted sources and/or check your ebooks before uploading and displaying them. If you can, provide a strict Content Security Policy for your site.
    106146
     147== Credits ==
     148
     149This plugin embeds a slightly modified version of the foliate-js library
     150by John Factotum (https://github.com/johnfactotum/foliate-js),
     151which is distributed under the MIT license.
     152
     153As secondary dependencies of the foliate-js library, the plugin embeds other three libraries:
     154* zip.js (https://github.com/gildas-lormeau/zip.js), licensed under the BSD-3-Clause;
     155* fflate (https://github.com/101arrowz/fflate), MIT licensed.
     156* PDF.js (https://github.com/mozilla/pdf.js), licensed under the Apache v2.0 license.
     157
     158PDF.js is present in the repository's source code, but is not included in the distribution of the current version of the plugin.
     159
     160Other libraries embedded by the plugin are:
     161* vite-for-wp by Dzikri Aziz (https://github.com/kucrut/vite-for-wp),
     162licensed under the GPL v2.0 license
     163* Speech Rule Engine (https://github.com/Speech-Rule-Engine/speech-rule-engine),
     164licensed under the Apache v2.0 license
     165
     166Embedded fonts:
     167* OpenDyslexic (https://opendyslexic.org/) by Abbie Gonzales, licensed under the SIL Open Font License v1.1;
     168* Manrope (https://github.com/sharanda/manrope) by The Manrope Project Authors, licensed under the SIL Open Font License v1.1;
     169* Latin Modern (https://www.gust.org.pl/projects/e-foundry) by the Polish TeX Users Group, licensed under the GUST Font License.
     170
     171OpenDyslexic and Latin Modern fonts have been converted from their original OpenType format to the woff2 format for use on the web, without, at the best of my knowledge, modifying their internal parameters and metadata.
  • simple-ebook-viewer/trunk/simple-ebook-viewer.php

    r3301587 r3480712  
    33 * Plugin Name: Simple Ebook Viewer
    44 * Description: A plugin to embed and display Ebooks
    5  * Version: 0.4.1
     5 * Version: 1.0.0
    66 * Author: Francesco Martini
    77 * License: GPL-2.0+
     
    1616
    1717
    18 define('SIMEBV_VERSION', '0.4.1');
     18define('SIMEBV_VERSION', '1.0.0');
    1919define('SIMEBV_PLUGIN_DIR', plugin_dir_path( __FILE__ ));
    2020define('SIMEBV_PLUGIN_URL', plugin_dir_url( __FILE__ ));
     
    2525
    2626require_once SIMEBV_PLUGIN_DIR . 'vendor/vite-for-wp/vite-for-wp.php';
     27require_once SIMEBV_PLUGIN_DIR . 'includes/simebv-base.php';
    2728require_once SIMEBV_PLUGIN_DIR . 'includes/simebv-viewer.php';
    2829require_once SIMEBV_PLUGIN_DIR . 'includes/simebv-admin.php';
  • simple-ebook-viewer/trunk/uninstall.php

    r3301587 r3480712  
    11<?php
    2 if (!defined(WP_UNINSTALL_PLUGIN)) {
     2if (!defined('WP_UNINSTALL_PLUGIN')) {
    33    exit;
    44}
Note: See TracChangeset for help on using the changeset viewer.