0.4.11: slider margini rimossi dalle Impostazioni (resta il dialog nel lettore); margini alto/basso strutturali — finestra di lettura dentro i margini, identici su ogni pagina

This commit is contained in:
2026-09-07 17:47:57 +02:00
parent 9500c353a3
commit 6fcf05a289
5 changed files with 101 additions and 184 deletions
+31 -71
View File
@@ -41,24 +41,10 @@ Page {
allowedOrientations: Orientation.All allowedOrientations: Orientation.All
// Sfondo di lettura UNIFORME (invece del gradiente di sistema): le fasce
// dei margini usano questo stesso colore, quindi margine e sfondo sono
// indistinguibili su ogni pagina (niente bande visibili, niente testo
// "coperto" percepibile: le righe spariscono nel margine).
property color readerBgColor: Theme.colorScheme === Theme.LightOnDark
? "#FF0E0E0E" : "#FFFFFFFF"
EpubBook { EpubBook {
id: book id: book
} }
// sfondo pieno del lettore, dietro tutto il resto
Rectangle {
anchors.fill: parent
z: -1
color: page.readerBgColor
}
SilicaFlickable { SilicaFlickable {
id: outerFlick id: outerFlick
anchors.fill: parent anchors.fill: parent
@@ -156,10 +142,18 @@ Page {
} }
} }
// contenuto: Flickable NON interattivo (lo scroll è solo programmatico) // contenuto: Flickable NON interattivo (lo scroll è solo programmatico).
// La finestra di lettura VIVE DENTRO i margini verticali (top/bottom
// margin): il testo non puo' fisicamente uscire dai bordi, quindi i
// margini alto/basso sono identici su OGNI pagina (non solo a inizio
// capitolo) e si aggiornano live con l'anteprima del dialog.
Flickable { Flickable {
id: innerFlick id: innerFlick
anchors.fill: parent anchors.fill: parent
anchors.topMargin: page.previewMarginT >= 0
? page.previewMarginT : appSettings.readerMarginV
anchors.bottomMargin: page.previewMarginT >= 0
? page.previewMarginT : appSettings.readerMarginV
contentHeight: readerContent.height contentHeight: readerContent.height
interactive: false interactive: false
clip: true clip: true
@@ -167,16 +161,25 @@ Page {
Item { Item {
id: readerContent id: readerContent
width: parent.width width: parent.width
// Il contenitore ha il padding verticale (margine) + il "deficit" // Altezza = testo + "deficit" dell'ultima pagina: max-scroll
// dell'ultima pagina: cosi' max-scroll = k*step e l'ultima pagina // diventa k*step esatto e l'ultima pagina e' allineata (niente
// e' allineata (niente testo ripetuto tra penultima e ultima). // testo ripetuto tra penultima e ultima). Calcolo INLINE nel
height: Math.max(parent.height, // binding: si rivaluta quando cambia la finestra (rotazione,
textItem.height + 2 * page.marginV() + page.lastPagePad()) // anteprima margini) o l'altezza del testo (reflow).
height: {
var step = Math.max(1, parent.height)
var t = textItem.height
var pad = 0
if (t > 0) {
var r = t % step
pad = r === 0 ? 0 : step - r
}
return Math.max(parent.height, t + pad)
}
Text { Text {
id: textItem id: textItem
x: page.previewMarginL >= 0 ? page.previewMarginL : appSettings.readerMargin x: page.previewMarginL >= 0 ? page.previewMarginL : appSettings.readerMargin
y: page.previewMarginT >= 0 ? page.previewMarginT : appSettings.readerMarginV
width: parent.width - 2 * (page.previewMarginL >= 0 width: parent.width - 2 * (page.previewMarginL >= 0
? page.previewMarginL ? page.previewMarginL
: appSettings.readerMargin) : appSettings.readerMargin)
@@ -190,31 +193,6 @@ Page {
} }
} }
// Margini verticali VISTI su ogni schermata: due fasce opache (colore di
// sfondo) coprono il testo a cavallo dei bordi della viewport. Il testo
// scorre tra le fasce con passo = viewport - 2*margine: ogni pagina
// mostra esattamente un blocco di testo con margine sopra e sotto.
Rectangle {
id: topBand
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
height: page.marginV()
visible: height > 0
z: 5
color: page.readerBgColor
}
Rectangle {
id: bottomBand
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
height: page.marginV()
visible: height > 0
z: 5
color: page.readerBgColor
}
// Paginazione a tap: la meta' destra va avanti di una pagina, la // Paginazione a tap: la meta' destra va avanti di una pagina, la
// sinistra indietro. Le fasce superiore e inferiore sono lasciate ai // sinistra indietro. Le fasce superiore e inferiore sono lasciate ai
// menu (PullDown in alto, PushUp in basso). NIENTE preventStealing: // menu (PullDown in alto, PushUp in basso). NIENTE preventStealing:
@@ -309,9 +287,9 @@ Page {
function readScrollPosition() { function readScrollPosition() {
if (!page.ready) if (!page.ready)
return return
// passo di pagina = viewport - 2*margine verticale: ogni pagina mostra // passo di pagina = altezza della finestra di lettura (i margini
// il testo DENTRO i margini (niente righe a filo del bordo) // alto/basso sono FUORI dal Flickable: nessun testo li attraversa)
var step = Math.max(1, innerFlick.height - 2 * page.marginV()) var step = Math.max(1, innerFlick.height)
var max = Math.max(0, innerFlick.contentHeight - innerFlick.height) var max = Math.max(0, innerFlick.contentHeight - innerFlick.height)
var y = Math.max(0, Math.min(max, innerFlick.contentY)) var y = Math.max(0, Math.min(max, innerFlick.contentY))
var len = book.chapterTextLength(page.currentChapter) var len = book.chapterTextLength(page.currentChapter)
@@ -323,23 +301,6 @@ Page {
maybeSave(false) maybeSave(false)
} }
// margine verticale effettivo (anteprima dialog oppure impostazioni)
function marginV() {
return page.previewMarginT >= 0 ? page.previewMarginT : appSettings.readerMarginV
}
// deficit dell'ultima pagina: porta max-scroll a un multiplo esatto del
// passo, cosi' l'ultima pagina mostra il testo residuo SENZA sovrapporsi
// alla penultima (niente righe ripetute) e con il margine sotto
function lastPagePad() {
var step = Math.max(1, innerFlick.height - 2 * page.marginV())
var t = textItem.height
if (t <= 0)
return 0
var r = t % step
return r === 0 ? 0 : step - r
}
function maybeSave(force) { function maybeSave(force) {
if (bookId <= 0) if (bookId <= 0)
return return
@@ -385,13 +346,12 @@ Page {
restoreTimer.start() restoreTimer.start()
} }
// pagina successiva: una pagina di testo = viewport meno i margini verticali // pagina successiva: una pagina di testo = altezza della finestra di
// (così ogni pagina ha il testo dentro i margini, non a filo del bordo); // lettura; a fine capitolo passa al successivo
// a fine capitolo passa al successivo
function nextPage() { function nextPage() {
if (!page.ready) if (!page.ready)
return return
var step = Math.max(1, innerFlick.height - 2 * page.marginV()) var step = Math.max(1, innerFlick.height)
var max = Math.max(0, innerFlick.contentHeight - innerFlick.height) var max = Math.max(0, innerFlick.contentHeight - innerFlick.height)
var y = innerFlick.contentY var y = innerFlick.contentY
if (y >= max - 2) { if (y >= max - 2) {
@@ -410,7 +370,7 @@ Page {
function prevPage() { function prevPage() {
if (!page.ready) if (!page.ready)
return return
var step = Math.max(1, innerFlick.height - 2 * page.marginV()) var step = Math.max(1, innerFlick.height)
var y = innerFlick.contentY var y = innerFlick.contentY
if (y > 1) { if (y > 1) {
innerFlick.contentY = Math.max(0, y - step) innerFlick.contentY = Math.max(0, y - step)
-26
View File
@@ -60,32 +60,6 @@ Page {
onCheckedChanged: appSettings.ignoreSslErrors = checked onCheckedChanged: appSettings.ignoreSslErrors = checked
} }
SectionHeader { text: qsTr("Reader") }
Slider {
id: marginSlider
width: parent.width
label: qsTr("Side margins")
minimumValue: 0
maximumValue: 80
stepSize: 4
value: appSettings.readerMargin
valueText: value + " px"
onValueChanged: appSettings.readerMargin = value
}
Slider {
id: marginVSlider
width: parent.width
label: qsTr("Top and bottom margin")
minimumValue: 0
maximumValue: 80
stepSize: 4
value: appSettings.readerMarginV
valueText: value + " px"
onValueChanged: appSettings.readerMarginV = value
}
SectionHeader { text: qsTr("Connection") } SectionHeader { text: qsTr("Connection") }
Button { Button {
+8 -1
View File
@@ -1,6 +1,6 @@
Name: harbour-calibreweb Name: harbour-calibreweb
Summary: Client OPDS per Calibre Web Summary: Client OPDS per Calibre Web
Version: 0.4.10 Version: 0.4.11
Release: 1 Release: 1
Group: Qt/Qt Group: Qt/Qt
License: MIT License: MIT
@@ -24,6 +24,13 @@ reflow del testo, margini configurabili e posizione salvata
in locale. in locale.
%changelog %changelog
* Fri Aug 21 2026 Carlo Baratto <carlo@carlobaratto.it> - 0.4.11-1
- Rimossi gli slider margini dalle Impostazioni: i margini si regolano solo dal
lettore (Margini del testo nel PullDownMenu)
- Margini alto/basso STRUTTURALI: la finestra di lettura vive dentro i margini
(top/bottom margin del Flickable): il testo non puo' uscire dai bordi e i
margini sono identici su ogni pagina (via le fasce colorate della 0.4.9/0.4.10)
* Fri Aug 21 2026 Carlo Baratto <carlo@carlobaratto.it> - 0.4.10-1 * Fri Aug 21 2026 Carlo Baratto <carlo@carlobaratto.it> - 0.4.10-1
- Fix margini lettore (0.4.9): sfondo di lettura UNIFORME nel lettore (colore - Fix margini lettore (0.4.9): sfondo di lettura UNIFORME nel lettore (colore
pieno per tema, niente gradiente di sistema). Le fasce dei margini usano lo pieno per tema, niente gradiente di sistema). Le fasce dei margini usano lo
+2 -2
View File
@@ -23,7 +23,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
app->setOrganizationName(QStringLiteral("harbour")); app->setOrganizationName(QStringLiteral("harbour"));
app->setApplicationName(QStringLiteral("calibreweb")); app->setApplicationName(QStringLiteral("calibreweb"));
// versione mostrata nelle impostazioni (tenere allineata allo spec) // versione mostrata nelle impostazioni (tenere allineata allo spec)
app->setApplicationVersion(QStringLiteral("0.4.10")); app->setApplicationVersion(QStringLiteral("0.4.11"));
Settings settings; Settings settings;
@@ -57,7 +57,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
QQuickView *view = SailfishApp::createView(); QQuickView *view = SailfishApp::createView();
qDebug() << "harbour-calibreweb v0.4.10 build" << __DATE__ << __TIME__; qDebug() << "harbour-calibreweb v0.4.11 build" << __DATE__ << __TIME__;
qmlRegisterType<EpubBook>("harbour.calibreweb", 1, 0, "EpubBook"); qmlRegisterType<EpubBook>("harbour.calibreweb", 1, 0, "EpubBook");
+60 -84
View File
@@ -1,29 +1,30 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="it_IT"> <TS version="2.1" language="it_IT">
<context> <context>
<name>BookDetailPage</name> <name>BookDetailPage</name>
<message> <message>
<location filename="../qml/pages/BookDetailPage.qml" line="36" /> <location filename="../qml/pages/BookDetailPage.qml" line="38"/>
<source>Read (EPUB)</source> <source>Read (EPUB)</source>
<translation>Leggi (EPUB)</translation> <translation>Leggi (EPUB)</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/BookDetailPage.qml" line="60" /> <location filename="../qml/pages/BookDetailPage.qml" line="62"/>
<source>Formats</source> <source>Formats</source>
<translation>Formati</translation> <translation>Formati</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/BookDetailPage.qml" line="112" /> <location filename="../qml/pages/BookDetailPage.qml" line="114"/>
<source>Downloading…</source> <source>Downloading…</source>
<translation>Download in corso…</translation> <translation>Download in corso…</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/BookDetailPage.qml" line="261" /> <location filename="../qml/pages/BookDetailPage.qml" line="263"/>
<source>Saved to </source> <source>Saved to </source>
<translation>Salvato in </translation> <translation>Salvato in </translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/BookDetailPage.qml" line="266" /> <location filename="../qml/pages/BookDetailPage.qml" line="268"/>
<source>Error: </source> <source>Error: </source>
<translation>Errore: </translation> <translation>Errore: </translation>
</message> </message>
@@ -31,12 +32,12 @@
<context> <context>
<name>ChapterListDialog</name> <name>ChapterListDialog</name>
<message> <message>
<location filename="../qml/pages/ChapterListDialog.qml" line="12" /> <location filename="../qml/pages/ChapterListDialog.qml" line="12"/>
<source>Table of contents</source> <source>Table of contents</source>
<translation>Indice capitoli</translation> <translation>Indice capitoli</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/ChapterListDialog.qml" line="38" /> <location filename="../qml/pages/ChapterListDialog.qml" line="38"/>
<source>No chapters</source> <source>No chapters</source>
<translation>Nessun capitolo</translation> <translation>Nessun capitolo</translation>
</message> </message>
@@ -44,7 +45,7 @@
<context> <context>
<name>CoverPage</name> <name>CoverPage</name>
<message> <message>
<location filename="../qml/cover/CoverPage.qml" line="18" /> <location filename="../qml/cover/CoverPage.qml" line="22"/>
<source>Calibre Web</source> <source>Calibre Web</source>
<translation>Calibre Web</translation> <translation>Calibre Web</translation>
</message> </message>
@@ -52,18 +53,18 @@
<context> <context>
<name>FeedPage</name> <name>FeedPage</name>
<message> <message>
<location filename="../qml/pages/FeedPage.qml" line="91" /> <location filename="../qml/pages/FeedPage.qml" line="93"/>
<source>Refresh</source> <source>Refresh</source>
<translation>Aggiorna</translation> <translation>Aggiorna</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/FeedPage.qml" line="95" /> <location filename="../qml/pages/FeedPage.qml" line="97"/>
<source>Settings</source> <source>Settings</source>
<translation>Impostazioni</translation> <translation>Impostazioni</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/FeedPage.qml" line="102" /> <location filename="../qml/pages/FeedPage.qml" line="104"/>
<location filename="../qml/pages/FeedPage.qml" line="171" /> <location filename="../qml/pages/FeedPage.qml" line="173"/>
<source>No results</source> <source>No results</source>
<translation>Nessun risultato</translation> <translation>Nessun risultato</translation>
</message> </message>
@@ -71,37 +72,37 @@
<context> <context>
<name>MainPage</name> <name>MainPage</name>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="13" /> <location filename="../qml/pages/MainPage.qml" line="15"/>
<source>Calibre Web</source> <source>Calibre Web</source>
<translation>Calibre Web</translation> <translation>Calibre Web</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="43" /> <location filename="../qml/pages/MainPage.qml" line="45"/>
<source>Search</source> <source>Search</source>
<translation>Cerca</translation> <translation>Cerca</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="47" /> <location filename="../qml/pages/MainPage.qml" line="49"/>
<source>Settings</source> <source>Settings</source>
<translation>Impostazioni</translation> <translation>Impostazioni</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="51" /> <location filename="../qml/pages/MainPage.qml" line="53"/>
<source>Refresh</source> <source>Refresh</source>
<translation>Aggiorna</translation> <translation>Aggiorna</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="60" /> <location filename="../qml/pages/MainPage.qml" line="62"/>
<source>Open the settings and enter your Calibre Web address</source> <source>Open the settings and enter your Calibre Web address</source>
<translation>Apri le impostazioni e inserisci l'indirizzo del tuo Calibre Web</translation> <translation>Apri le impostazioni e inserisci l&apos;indirizzo del tuo Calibre Web</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="77" /> <location filename="../qml/pages/MainPage.qml" line="79"/>
<source>Server not configured</source> <source>Server not configured</source>
<translation>Server non configurato</translation> <translation>Server non configurato</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="100" /> <location filename="../qml/pages/MainPage.qml" line="102"/>
<source>No sections found in the OPDS feed</source> <source>No sections found in the OPDS feed</source>
<translation>Nessuna sezione trovata nel feed OPDS</translation> <translation>Nessuna sezione trovata nel feed OPDS</translation>
</message> </message>
@@ -109,27 +110,27 @@
<context> <context>
<name>MarginDialog</name> <name>MarginDialog</name>
<message> <message>
<location filename="../qml/pages/MarginDialog.qml" line="25" /> <location filename="../qml/pages/MarginDialog.qml" line="25"/>
<source>Text margins</source> <source>Text margins</source>
<translation>Margini del testo</translation> <translation>Margini del testo</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MarginDialog.qml" line="26" /> <location filename="../qml/pages/MarginDialog.qml" line="26"/>
<source>Apply</source> <source>Apply</source>
<translation>Applica</translation> <translation>Applica</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MarginDialog.qml" line="32" /> <location filename="../qml/pages/MarginDialog.qml" line="32"/>
<source>Side margins</source> <source>Side margins</source>
<translation>Margini laterali</translation> <translation>Margini laterali</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MarginDialog.qml" line="47" /> <location filename="../qml/pages/MarginDialog.qml" line="47"/>
<source>Top and bottom</source> <source>Top and bottom</source>
<translation>Alto e basso</translation> <translation>Alto e basso</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MarginDialog.qml" line="62" /> <location filename="../qml/pages/MarginDialog.qml" line="62"/>
<source>Changes apply immediately. Confirm to save them for all books.</source> <source>Changes apply immediately. Confirm to save them for all books.</source>
<translation>Le modifiche si applicano subito al testo. Conferma per salvarle per tutti i libri.</translation> <translation>Le modifiche si applicano subito al testo. Conferma per salvarle per tutti i libri.</translation>
</message> </message>
@@ -137,37 +138,27 @@
<context> <context>
<name>ReaderPage</name> <name>ReaderPage</name>
<message> <message>
<location filename="../qml/pages/ReaderPage.qml" line="35" /> <location filename="../qml/pages/ReaderPage.qml" line="58"/>
<source>Table of contents</source> <source>Table of contents</source>
<translation>Indice capitoli</translation> <translation>Indice capitoli</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/ReaderPage.qml" line="39" /> <location filename="../qml/pages/ReaderPage.qml" line="62"/>
<source>Text margins</source> <source>Text margins</source>
<translation>Margini del testo</translation> <translation>Margini del testo</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/ReaderPage.qml" line="53" /> <location filename="../qml/pages/ReaderPage.qml" line="77"/>
<source>Settings</source> <source>Settings</source>
<translation>Impostazioni</translation> <translation>Impostazioni</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/ReaderPage.qml" line="57" /> <location filename="../qml/pages/ReaderPage.qml" line="81"/>
<source>Close book</source> <source>Close book</source>
<translation>Chiudi libro</translation> <translation>Chiudi libro</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/ReaderPage.qml" line="170" /> <location filename="../qml/pages/ReaderPage.qml" line="427"/>
<source>The reader is not responding (WebView). The EPUB file may be damaged.</source>
<translation>Il lettore non risponde (WebView). Il file EPUB potrebbe essere danneggiato.</translation>
</message>
<message>
<location filename="../qml/pages/ReaderPage.qml" line="293" />
<source>Chapter unreadable</source>
<translation>Capitolo non leggibile</translation>
</message>
<message>
<location filename="../qml/pages/ReaderPage.qml" line="342" />
<source>Unable to open the EPUB file</source> <source>Unable to open the EPUB file</source>
<translation>Impossibile aprire il libro EPUB</translation> <translation>Impossibile aprire il libro EPUB</translation>
</message> </message>
@@ -175,23 +166,23 @@
<context> <context>
<name>SearchPage</name> <name>SearchPage</name>
<message> <message>
<location filename="../qml/pages/SearchPage.qml" line="15" /> <location filename="../qml/pages/SearchPage.qml" line="17"/>
<location filename="../qml/pages/SearchPage.qml" line="27" /> <location filename="../qml/pages/SearchPage.qml" line="29"/>
<source>Search</source> <source>Search</source>
<translation>Cerca</translation> <translation>Cerca</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SearchPage.qml" line="20" /> <location filename="../qml/pages/SearchPage.qml" line="22"/>
<source>Title or author…</source> <source>Title or author…</source>
<translation>Titolo o autore…</translation> <translation>Titolo o autore…</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SearchPage.qml" line="35" /> <location filename="../qml/pages/SearchPage.qml" line="37"/>
<source>Search uses the server engine (OPDS search).</source> <source>Search uses the server engine (OPDS search).</source>
<translation>La ricerca usa il motore del server (OPDS search).</translation> <translation>La ricerca usa il motore del server (OPDS search).</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SearchPage.qml" line="50" /> <location filename="../qml/pages/SearchPage.qml" line="52"/>
<source>Results: </source> <source>Results: </source>
<translation>Risultati: </translation> <translation>Risultati: </translation>
</message> </message>
@@ -199,100 +190,85 @@
<context> <context>
<name>SettingsPage</name> <name>SettingsPage</name>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="20" /> <location filename="../qml/pages/SettingsPage.qml" line="22"/>
<source>Settings</source> <source>Settings</source>
<translation>Impostazioni</translation> <translation>Impostazioni</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="22" /> <location filename="../qml/pages/SettingsPage.qml" line="24"/>
<source>Server</source> <source>Server</source>
<translation>Server</translation> <translation>Server</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="28" /> <location filename="../qml/pages/SettingsPage.qml" line="30"/>
<source>Calibre Web address</source> <source>Calibre Web address</source>
<translation>Indirizzo Calibre Web</translation> <translation>Indirizzo Calibre Web</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="39" /> <location filename="../qml/pages/SettingsPage.qml" line="41"/>
<source>User (empty = anonymous access)</source> <source>User (empty = anonymous access)</source>
<translation>Utente (vuoto = accesso anonimo)</translation> <translation>Utente (vuoto = accesso anonimo)</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="48" /> <location filename="../qml/pages/SettingsPage.qml" line="50"/>
<source>Password</source> <source>Password</source>
<translation>Password</translation> <translation>Password</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="55" /> <location filename="../qml/pages/SettingsPage.qml" line="57"/>
<source>Ignore SSL certificate errors</source> <source>Ignore SSL certificate errors</source>
<translation>Ignora errori certificato SSL</translation> <translation>Ignora errori certificato SSL</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="56" /> <location filename="../qml/pages/SettingsPage.qml" line="58"/>
<source>Enable if the server uses a self-signed certificate</source> <source>Enable if the server uses a self-signed certificate</source>
<translation>Da attivare se il server usa un certificato autofirmato</translation> <translation>Da attivare se il server usa un certificato autofirmato</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="61" /> <location filename="../qml/pages/SettingsPage.qml" line="63"/>
<source>Reader</source>
<translation>Lettore</translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="66" />
<source>Side margins</source>
<translation>Margini laterali</translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="78" />
<source>Top and bottom margin</source>
<translation>Margine alto e basso</translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="87" />
<source>Connection</source> <source>Connection</source>
<translation>Connessione</translation> <translation>Connessione</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="91" /> <location filename="../qml/pages/SettingsPage.qml" line="67"/>
<source>Test connection</source> <source>Test connection</source>
<translation>Prova connessione</translation> <translation>Prova connessione</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="115" /> <location filename="../qml/pages/SettingsPage.qml" line="91"/>
<location filename="../qml/pages/SettingsPage.qml" line="120" /> <location filename="../qml/pages/SettingsPage.qml" line="96"/>
<source>Language</source> <source>Language</source>
<translation type="finished">Lingua</translation> <translation>Lingua</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="123" /> <location filename="../qml/pages/SettingsPage.qml" line="99"/>
<source>System (default)</source> <source>System (default)</source>
<translation type="finished">Sistema (predefinita)</translation> <translation>Sistema (predefinita)</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="131" /> <location filename="../qml/pages/SettingsPage.qml" line="107"/>
<source>Language will be applied after restarting the app</source> <source>Language will be applied after restarting the app</source>
<translation type="finished">La lingua verrà applicata al riavvio dell'app</translation> <translation>La lingua verrà applicata al riavvio dell&apos;app</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="159" /> <location filename="../qml/pages/SettingsPage.qml" line="142"/>
<source>Enter the server address</source> <source>Enter the server address</source>
<translation>Inserisci l'indirizzo del server</translation> <translation>Inserisci l&apos;indirizzo del server</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="156" /> <location filename="../qml/pages/SettingsPage.qml" line="132"/>
<source>Version</source> <source>Version</source>
<translation type="finished">Versione</translation> <translation>Versione</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="168" /> <location filename="../qml/pages/SettingsPage.qml" line="152"/>
<source>Testing…</source> <source>Testing…</source>
<translation>Verifica in corso…</translation> <translation>Verifica in corso…</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/SettingsPage.qml" line="179" /> <location filename="../qml/pages/SettingsPage.qml" line="169"/>
<source>Connection OK: %1 sections found</source> <source>Connection OK: %1 sections found</source>
<translation>Connessione OK: %1 sezioni trovate</translation> <translation>Connessione OK: %1 sezioni trovate</translation>
</message> </message>
</context> </context>
</TS> </TS>