Allow IP addresses. Added setting to allow unencrypted connections. Added translations for German and Swedish.

This commit is contained in:
Scharel Clemens 2018-12-10 23:14:15 +01:00
parent f7c83cc11e
commit 4ec38cc345
13 changed files with 743 additions and 154 deletions

View file

@ -10,4 +10,4 @@ Name=Notes
# Remember to comment out the following line, if you do not want to use
# a different app name in German locale (de).
Name[de]=Notizen
Name[de_DE]=Notizen
Name[sv]=Anteckningar

View file

@ -16,11 +16,12 @@ CONFIG += sailfishapp
DEFINES += APP_VERSION=\\\"$$VERSION\\\"
SOURCES += src/harbour-nextcloudnotes.cpp \
SOURCES += src/harbour-nextcloudnotes.cpp
DISTFILES += qml/harbour-nextcloudnotes.qml \
qml/cover/CoverPage.qml \
rpm/harbour-nextcloudnotes.changes.run.in \
rpm/harbour-nextcloudnotes.changes \
rpm/harbour-nextcloudnotes.spec \
rpm/harbour-nextcloudnotes.yaml \
translations/*.ts \
@ -33,7 +34,6 @@ DISTFILES += qml/harbour-nextcloudnotes.qml \
qml/pages/AboutPage.qml \
qml/pages/UnencryptedDialog.qml \
qml/pages/NotesApi.qml \
rpm/harbour-nextcloudnotes.changes \
qml/pages/MITLicense.qml \
qml/pages/GPLLicense.qml
@ -47,6 +47,7 @@ CONFIG += sailfishapp_i18n
# planning to localize your app, remember to comment out the
# following TRANSLATIONS line. And also do not forget to
# modify the localized app name in the the .desktop file.
TRANSLATIONS += translations/harbour-nextcloudnotes-de.ts
TRANSLATIONS += translations/harbour-nextcloudnotes-de.ts \
translations/harbour-nextcloudnotes-sv.ts
HEADERS +=

View file

@ -17,6 +17,14 @@ Page {
title: qsTr("About")
}
Label {
id: debugModeLabel
x: Theme.horizontalPageMargin
width: parent.width - 2*x
visible: debug
text: "<p><strong>" + qsTr("The app is running in DEBUG mode!") + "</strong></p>"
}
/*DetailItem {
label: qsTr("Name")
value: Qt.application.name
@ -29,7 +37,11 @@ Page {
id: nextcloudnotesLabel
x: Theme.horizontalPageMargin
width: parent.width - 2*x
text: qsTr("<p>This app is released under the MIT license.</p><p>The source code is available on <a href=\"https://github.com/scharel/harbour-nextcloudnotes\">GitHub</a>.</p>")
text: "<p>" + qsTr("This app is released under the MIT license.") + "</p>" +
//: Pre-Showdown Github link
"<p>" + qsTr("The source code is available on") + " <a href=\"https://github.com/scharel/harbour-nextcloudnotes\">GitHub</a>" +
//: Post-Showdown Github link
qsTr(".") + "</p>"
}
Button {
@ -46,7 +58,11 @@ Page {
id: showdownLabel
x: Theme.horizontalPageMargin
width: parent.width - 2*x
text: qsTr("<p>This app uses <a href=\"https://github.com/showdownjs/showdown/tree/1.9.0\">ShowdownJS v1.9</a> to convert Markdown to HTML.</p><p>Showdown 1.x is released under GPL 2.0.</p>")
//: Pre-Showdown Github link
text: "<p>" + qsTr("This app uses") + " <a href=\"https://github.com/showdownjs/showdown/tree/1.9.0\">ShowdownJS v1.9</a> " +
//: Post-Showdown Github link
qsTr("to convert Markdown to HTML.") + "</p>" +
"<p> " + qsTr("Showdown 1.x is released under GPL 2.0.") + "</p>"
}
Button {

View file

@ -11,12 +11,14 @@ Dialog {
ConfigurationGroup {
id: account
path: "/apps/harbour-nextcloudnotes/accounts/" + accountId
Component.onCompleted: {
/*Component.onCompleted: {
nameField.text = value("name", "", String)
serverField.text = value("server", "https://", String)
usernameField.text = value("username", "", String)
passwordField.text = value("password", "", String)
}
//unsecureConnectionTextSwitch.checked = value("unencryptedConnection", false, Boolean)
unencryptedConnectionTextSwitch.checked = value("allowUnencryptedConnection", false, Boolean)
}*/
}
canAccept: (nameField.text.length > 0 && serverField.acceptableInput && usernameField.text.length > 0 && passwordField.text.length > 0)
@ -26,7 +28,7 @@ Dialog {
account.setValue("username", usernameField.text)
account.setValue("password", passwordField.text)
//account.setValue("unsecureConnection", unsecureConnectionTextSwitch.checked)
//account.setValue("unencryptedConnection", unencryptedConnectionTextSwitch.checked)
account.setValue("allowUnencryptedConnection", unencryptedConnectionTextSwitch.checked)
account.sync()
api.uuid = accountId
}
@ -69,13 +71,15 @@ Dialog {
TextField {
id: serverField
// regExp combined from https://stackoverflow.com/a/3809435 (EDIT: removed ? after https to force SSL) and https://www.regextester.com/22
property var encryptedRegEx: /^https:\/\/(((www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b|((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))))([-a-zA-Z0-9@:%_\+.~#?&//=]*)$/
property var unencryptedRegEx : /^https?:\/\/(((www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b|((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))))([-a-zA-Z0-9@:%_\+.~#?&//=]*)$/
width: parent.width
text: account.value("server", "https://", String)
placeholderText: qsTr("Nextcloud server")
label: placeholderText + " " + qsTr("(starting with \"https://\")")
inputMethodHints: Qt.ImhUrlCharactersOnly
// regExp from https://stackoverflow.com/a/3809435 (EDIT: removed ? after https to force SSL)
validator: RegExpValidator { regExp: /https:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/ }
validator: RegExpValidator { regExp: unencryptedConnectionTextSwitch.checked ? serverField.unencryptedRegEx : serverField.encryptedRegEx }
errorHighlight: !acceptableInput// && focus === true
EnterKey.enabled: acceptableInput
EnterKey.iconSource: "image://theme/icon-m-enter-next"
@ -119,28 +123,20 @@ Dialog {
}
/*TextSwitch {
id: unsecureConnectionTextSwitch
checked: appSettings.unsecureConnection
automaticCheck: true
text: qsTr("Do not check certificates")
description: qsTr("Enable this option to allow selfsigned certificates")
onCheckedChanged: {
if (checked) {
}
else {
unencryptedConnection.checked = false
}
}
}
}*/
TextSwitch {
id: unencryptedConnectionTextSwitch
enabled: unsecureConnectionTextSwitch.checked
checked: appSettings.unencryptedConnection
automaticCheck: false
text: qsTr("Allow unencrypted connection")
text: qsTr("Allow unencrypted connections")
description: qsTr("")
checked: account.value("allowUnencryptedConnection", false, Boolean)
onClicked: {
if (!checked) {
if (checked) {
checked = false
}
else {
var dialog = pageStack.push(Qt.resolvedUrl("UnencryptedDialog.qml"))
dialog.accepted.connect(function() {
checked = true
@ -149,10 +145,8 @@ Dialog {
checked = false
})
}
else
checked = false
}
}*/
}
}
}

View file

@ -21,7 +21,6 @@ Item {
property bool saveFile: false
property bool busy: false
property bool searchActive: false
property var apiReq: new XMLHttpRequest
property int status: 204
property string statusText: "No Content"
@ -34,6 +33,7 @@ Item {
}
onUuidChanged: {
account.setValue("uuid", uuid)
onUuidChanged: console.log("Account : " + uuid)
account.path = "/apps/harbour-nextcloudnotes/accounts/" + uuid
refreshConfig()
@ -42,6 +42,13 @@ Item {
appSettings.currentAccount = uuid
//getNotes()
}
onNameChanged: account.setValue("name", name)
onServerChanged: account.setValue("server", server)
onUsernameChanged: account.setValue("username", username)
onPasswordChanged: account.setValue("password", password)
onUpdateChanged: account.setValue("update", update)
onUnsecureConnectionChanged: account.setValue("unsecureConnection", unsecureConnection)
onUnencryptedConnectionChanged: account.setValue("unencryptedConnection", unencryptedConnection)
Connections {
target: appSettings
@ -55,9 +62,6 @@ Item {
}
function refreshConfig() {
if (busy) {
apiReq.abort()
}
account.sync()
name = account.value("name", "", String)
server = account.value("server", "", String)
@ -69,17 +73,7 @@ Item {
unencryptedConnection = account.value("unencryptedConnection", false, Boolean)
}
/*onUuidChanged: account.setValue("uuid", uuid)
onNameChanged: account.setValue("name", name)
onServerChanged: account.setValue("server", server)
onUsernameChanged: account.setValue("username", username)
onPasswordChanged: account.setValue("password", password)
onUpdateChanged: account.setValue("update", update)
onUnsecureConnectionChanged: account.setValue("unsecureConnection", unsecureConnection)
onUnencryptedConnectionChanged: account.setValue("unencryptedConnection", unencryptedConnection)*/
function clear() {
apiReq.abort()
modelData = []
model.clear()
account.clear()
@ -96,11 +90,13 @@ Item {
}
console.log("Calling " + endpoint)
var apiReq = new XMLHttpRequest
apiReq.open(method, endpoint, true)
apiReq.setRequestHeader('User-Agent', 'SailfishOS/harbour-nextcloudnotes')
apiReq.setRequestHeader('OCS-APIRequest', 'true')
apiReq.setRequestHeader("Content-Type", "application/json")
apiReq.setRequestHeader("Authorization", "Basic " + Qt.btoa(username + ":" + password))
apiReq.withCredentials = true
apiReq.onreadystatechange = function() {
if (apiReq.readyState === XMLHttpRequest.DONE) {
if (apiReq.status === 200) {

View file

@ -4,7 +4,7 @@ import Sailfish.Silica 1.0
Dialog {
id: unencryptedDialog
canAccept: textSwitch.checked
canAccept: understandTextSwitch.checked && ownRiskTextSwitch.checked
SilicaFlickable {
anchors.fill: parent
@ -22,12 +22,19 @@ Dialog {
width: parent.width - 2*x
wrapMode: Text.Wrap
linkColor: Theme.highlightColor
text: qsTr("<strong>Your username and password will be transferred unencrypted over the network when you enable this option.<br>Do not accept unless you know exactly what you are doing!</strong ><br><a href=\"https://github.com/nextcloud/notes/wiki/API-0.2\">More information...</a>")
text: qsTr("<strong>" + qsTr("Your username and password will be transferred unencrypted over the network when you enable this option.") + "<br>" + qsTr("Do not accept unless you know exactly what you are doing!") + "</strong><br><a href=\"https://github.com/nextcloud/notes/wiki/API-0.2#authentication--basics\">" + qsTr("More information...") + "</a>")
}
TextSwitch {
id: textSwitch
id: understandTextSwitch
text: qsTr("I do understand")
onCheckedChanged: if (!checked) ownRiskTextSwitch.checked = false
}
TextSwitch {
id: ownRiskTextSwitch
opacity: understandTextSwitch.checked ? 1.0 : 0.0
Behavior on opacity { FadeAnimator {} }
text: qsTr("I use this option at my own risk")
}
}
}

View file

@ -12,6 +12,14 @@
# * date Author's Name <author's email> version-release
# - Summary of changes
* Mon Dec 10 2018 Scharel Clemens <harbour-nextcloudnotes@scharel.name> 0.2-4
- Added Swedish translation (Thanks to @eson57)
- Added German translation
- Allow unencrypted connections
* Sat Dec 08 2018 Scharel Clemens <harbour-nextcloudnotes@scharel.name> 0.2-3
- Implemented #27: Allow IPv4 as server address
* Thu Dec 06 2018 Scharel Clemens <harbour-nextcloudnotes@scharel.name> 0.2-2
- Fixed an issue where accounts get deleted when the dialog is aborted

View file

@ -14,7 +14,7 @@ Name: harbour-nextcloudnotes
%{?qtc_builddir:%define _builddir %qtc_builddir}
Summary: Nextcloud Notes
Version: 0.2
Release: 2
Release: 4
Group: Qt/Qt
License: LICENSE
URL: http://example.org/

View file

@ -1,7 +1,7 @@
Name: harbour-nextcloudnotes
Summary: Nextcloud Notes
Version: 0.2
Release: 2
Release: 4
# The contents of the Group field should be one of the groups listed here:
# https://github.com/mer-tools/spectacle/blob/master/data/GROUPS
Group: Qt/Qt

View file

@ -15,6 +15,11 @@ int main(int argc, char *argv[])
QQuickView* view = SailfishApp::createView();
view->setSource(SailfishApp::pathTo("qml/harbour-nextcloudnotes.qml"));
#ifdef QT_DEBUG
view->rootContext()->setContextProperty("debug", QVariant(true));
#else
view->rootContext()->setContextProperty("debug", QVariant(false));
#endif
view->show();
return app->exec();

View file

@ -1,15 +1,212 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<TS version="2.1" language="de">
<context>
<name>CoverPage</name>
<name>AboutPage</name>
<message>
<source>My Cover</source>
<translation>Mein Cover</translation>
<source>About</source>
<translation>Über</translation>
</message>
<message>
<source>The app is running in DEBUG mode!</source>
<translation>Die App läuft im DEBUG Modus!</translation>
</message>
<message>
<source>Notes</source>
<translation>Notizen</translation>
</message>
<message>
<source>The source code is available on</source>
<extracomment>Pre-Showdown Github link</extracomment>
<translation>Der Quelltext ist auf</translation>
</message>
<message>
<source>MIT License</source>
<translation>MIT Lizenz</translation>
</message>
<message>
<source>This app uses</source>
<extracomment>Pre-Showdown Github link</extracomment>
<translation>Diese App verwendet</translation>
</message>
<message>
<source>to convert Markdown to HTML.</source>
<extracomment>Post-Showdown Github link</extracomment>
<translation>um Markton in HTML zu konvertieren.</translation>
</message>
<message>
<source>Showdown 1.x is released under GPL 2.0.</source>
<translation>Showdown 1.x wurde unter GPL 2.0 veröffentlicht.</translation>
</message>
<message>
<source>GPL 2.0 License</source>
<translation>GPL 2.0 Lizenz</translation>
</message>
<message>
<source>Nextcloud Notes</source>
<translation>Nextcloud Notizen</translation>
</message>
<message>
<source>for Sailfish OS</source>
<translation>für Sailfish OS</translation>
</message>
<message>
<source>.</source>
<extracomment>Post-Showdown Github link</extracomment>
<translation> verfügbar.</translation>
</message>
<message>
<source>This app is released under the MIT license.</source>
<translation>Diese App wurde unter der MIT Lizenz veröffentlicht.</translation>
</message>
</context>
<context>
<name>FirstPage</name>
<name>CoverPage</name>
<message>
<source>Notes</source>
<translation>Notizen</translation>
</message>
</context>
<context>
<name>EditPage</name>
<message>
<source>Reset</source>
<translation>Zurücksetzen</translation>
</message>
<message>
<source>Markdown syntax</source>
<translation>Markdown Syntax</translation>
</message>
<message>
<source>No category</source>
<translation>Ohne Kategorie</translation>
</message>
<message>
<source>Category</source>
<translation>Kategorie</translation>
</message>
<message>
<source>Modified</source>
<translation>Geändert</translation>
</message>
</context>
<context>
<name>GPLLicense</name>
<message>
<source>GPL 2.0 License</source>
<translation>GPL 2.0 Lizenz</translation>
</message>
</context>
<context>
<name>LoginDialog</name>
<message>
<source>Login</source>
<translation>Verbinden</translation>
</message>
<message>
<source>Save</source>
<translation>Speichern</translation>
</message>
<message>
<source>Account name</source>
<translation>Kontoname</translation>
</message>
<message>
<source>Nextcloud server</source>
<translation>Nextcloud Server URL</translation>
</message>
<message>
<source>(starting with &quot;https://&quot;)</source>
<translation>(beginnend mit &quot;https://&quot;)</translation>
</message>
<message>
<source>Username</source>
<translation>Benutzername</translation>
</message>
<message>
<source>Password</source>
<translation>Passwort</translation>
</message>
<message>
<source>Security</source>
<translation>Sicherheit</translation>
</message>
<message>
<source>&lt;strong&gt;CAUTION: Your password will be saved without any encryption on the device!&lt;/strong&gt;&lt;br&gt;Please consider creating a dedicated app password! Open your Nextcloud in a browser and go to &lt;i&gt;Settings&lt;/i&gt; &lt;i&gt;Security&lt;/i&gt;.</source>
<translation>&lt;strong&gt;ACHTUNG: Dein Password wird unverschlüsselt auf dem Gerät gespeichert!&lt;/strong&gt;&lt;br&gt;Erwäge ein eigenes App-Passwort zu erstellen! Öffne deine Nextcloud in einem Webbrowser und gehe zu &lt;i&gt;Einstellungen&lt;/i&gt; --&gt; &lt;i&gt;Sicherheit&lt;/i&gt;.</translation>
</message>
<message>
<source>Allow unencrypted connections</source>
<translation>Unverschlüsselte Verbindungen zulassen</translation>
</message>
<message>
<source></source>
<translation></translation>
</message>
</context>
<context>
<name>MITLicense</name>
<message>
<source>MIT License</source>
<translation>MIT Lizenz</translation>
</message>
</context>
<context>
<name>NotePage</name>
<message>
<source>Delete</source>
<translation>Löschen</translation>
</message>
<message>
<source>Reload</source>
<translation>Neu laden</translation>
</message>
<message>
<source>Updating...</source>
<translation>Aktualisiere...</translation>
</message>
<message>
<source>Last update</source>
<translation>Zuletzt aktualisiert</translation>
</message>
<message>
<source>never</source>
<translation>noch nie</translation>
</message>
<message>
<source>Edit</source>
<translation>Bearbeiten</translation>
</message>
<message>
<source>Notes</source>
<translation>Notizen</translation>
</message>
<message>
<source>No category</source>
<translation>Ohne Kategorie</translation>
</message>
<message>
<source>Category</source>
<translation>Kategorie</translation>
</message>
<message>
<source>Modified</source>
<translation>Geändert</translation>
</message>
</context>
<context>
<name>NotesApi</name>
<message>
<source>Today</source>
<translation>Heute</translation>
</message>
<message>
<source>Yesterday</source>
<translation>Gestern</translation>
</message>
</context>
<context>
<name>NotesPage</name>
<message>
<source>Settings</source>
<translation>Einstellungen</translation>
@ -18,32 +215,219 @@
<source>Add note</source>
<translation>Neue Notiz</translation>
</message>
<message>
<source>Reload</source>
<translation>Neu laden</translation>
</message>
<message>
<source>Updating...</source>
<translation>Aktualisiere...</translation>
</message>
<message>
<source>Last update</source>
<translation>Zuletzt aktualisiert</translation>
</message>
<message>
<source>Nextcloud Notes</source>
<translation>Nextcloud Notizen</translation>
<source>never</source>
<translation>noch nie</translation>
</message>
<message>
<source>Modified</source>
<translation>Geändert</translation>
</message>
<message>
<source>Delete</source>
<translation>Löschen</translation>
</message>
<message>
<source>Deleting note</source>
<translation>Lösche Notiz</translation>
</message>
<message>
<source>No account yet</source>
<translation>Noch kein Konto eingerichtet</translation>
</message>
<message>
<source>Got to the settings to add an account</source>
<translation>Öffne die EInstellungen um ein Benutzerkonto hinzuzufügen</translation>
</message>
<message>
<source>No notes yet</source>
<translatio>Noch keine Notizen</translation>
<translation>Noch keine Notizen</translation>
</message>
<message>
<source>Pull down to add a note</source>
<translation>Herunterziehen um eine neue Notiz zu erzeugen</translation>
</message>
<message>
<source>No result</source>
<translation>Keine Ergebnisse</translation>
</message>
<message>
<source>Try another query</source>
<translation>Versuche eine andere Suche</translation>
</message>
<message>
<source>An error occurred</source>
<translation>Es ist ein Fehler aufgetreten</translation>
</message>
<message>
<source>Open the settings to configure your Nextcloud accounts</source>
<translation>Passe deine Nextcloud Konten in den Einstellungen an</translation>
</message>
</context>
<context>
<name>harbour-nextcloudnotes</name>
<name>SettingsPage</name>
<message>
<source>never</source>
<translation>noch nie</translation>
<source>About</source>
<translation>Über</translation>
</message>
<message>
<source>Settings</source>
<translation>Einstellungen</translation>
</message>
<message>
<source>Accounts</source>
<translation>Benutzerkonten</translation>
</message>
<message>
<source>No Nextcloud account yet</source>
<translation>Noch kein Nextcloud Konto eingerichtet</translation>
</message>
<message>
<source>Unnamed account</source>
<translation>Unbenanntes Konto</translation>
</message>
<message>
<source>unknown</source>
<translation>unbekannt</translation>
</message>
<message>
<source>Edit</source>
<translation>Bearbeiten</translation>
</message>
<message>
<source>Delete</source>
<translation>Löschen</translation>
</message>
<message>
<source>Deleting account</source>
<translation>Lösche Konto</translation>
</message>
<message>
<source>Add account</source>
<translation>Konto hinzufügen</translation>
</message>
<message>
<source>Synchronization</source>
<translation>Synchronisierung</translation>
</message>
<message>
<source>Auto-Sync</source>
<translation>Auto-Sync</translation>
</message>
<message>
<source>Periodically pull notes from the server</source>
<translation>Notizen regelmäßig abrufen</translation>
</message>
<message>
<source>Disabled</source>
<translation>Deaktiviert</translation>
</message>
<message>
<source>every</source>
<translation>alle</translation>
</message>
<message>
<source>Minutes</source>
<translation>Minuten</translation>
</message>
<message>
<source>Seconds</source>
<translation>Sekunden</translation>
</message>
<message>
<source>Appearance</source>
<translation>Aussehen</translation>
</message>
<message>
<source>Last edited</source>
<translation>Zuletzt bearbeitet</translation>
</message>
<message>
<source>Category</source>
<translation>Kategorie</translation>
</message>
<message>
<source>Title alphabetically</source>
<translation>Alphabetisch nach Titel</translation>
</message>
<message>
<source>Sort notes by</source>
<translation>Notizen sortieren nach</translation>
</message>
<message>
<source>This will also change how the notes are grouped</source>
<translation>Dies beeinflusst auch die Gruppierung</translation>
</message>
<message>
<source>Show separator</source>
<translation>Trennlinie einblenden</translation>
</message>
<message>
<source>Show a separator line between the notes</source>
<translation>Eine Trennlinie zwischen den Notizen anzeigen</translation>
</message>
<message>
<source>lines</source>
<translation>Zeilen</translation>
</message>
<message>
<source>Number of lines in the preview</source>
<translation>Anzahl der Zeiten in der Vorschau</translation>
</message>
<message>
<source>Editing</source>
<translation>Bearbeitung</translation>
</message>
<message>
<source>Monospaced font</source>
<translation>Nichtproportionale Schrift</translation>
</message>
<message>
<source>Use a monospeced font to edit a note</source>
<translation>Nichtproportionale Schrift beim Bearbeiten benutzen</translation>
</message>
<message>
<source>Capital &apos;X&apos; in checkboxes</source>
<translation>Großes &quot;X&quot; in Kontrollkästchen</translation>
</message>
<message>
<source>For interoperability with other apps such as Joplin</source>
<translation>Kann für die Interoperabilität mit anderen Apps (z.B. Joplin) nützlich sein</translation>
</message>
</context>
<context>
<name>UnencryptedDialog</name>
<message>
<source>Your username and password will be transferred unencrypted over the network when you enable this option.</source>
<translation>Dein Benutzername und Passwort werden unverschlüsselt über das Netz übertragen wenn diese Option ausgewählt wurde.</translation>
</message>
<message>
<source>Do not accept unless you know exactly what you are doing!</source>
<translation>Fahre nicht fort, wenn du nicht genau weißt was du tust!</translation>
</message>
<message>
<source>More information...</source>
<translation>Mehr Informationen...</translation>
</message>
<message>
<source>I do understand</source>
<translation>Ich habe verstanden</translation>
</message>
<message>
<source>I use this option at my own risk</source>
<translation>Ich benutze diese Option auf eigene Gefahr</translation>
</message>
</context>
</TS>

View file

@ -19,22 +19,46 @@
<source>Notes</source>
<translation>Anteckningar</translation>
</message>
<message>
<source>&lt;p&gt;This app is released under the MIT license.&lt;/p&gt;&lt;p&gt;The source code is available on &lt;a href=&quot;https://github.com/scharel/harbour-nextcloudnotes&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;</source>
<translation>&lt;p&gt;Denna app är släppt under MIT-licensen.&lt;/p&gt;&lt;p&gt;Källkoden finns på &lt;a href=&quot;https://github.com/scharel/harbour-nextcloudnotes&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
<source>MIT License</source>
<translation>MIT License</translation>
</message>
<message>
<source>&lt;p&gt;This app uses &lt;a href=&quot;https://github.com/showdownjs/showdown/tree/1.9.0&quot;&gt;ShowdownJS v1.9&lt;/a&gt; to convert Markdown to HTML.&lt;/p&gt;&lt;p&gt;Showdown 1.x is released under GPL 2.0.&lt;/p&gt;</source>
<translation>&lt;p&gt;Denna app använder &lt;a href=&quot;https://github.com/showdownjs/showdown/tree/1.9.0&quot;&gt;ShowdownJS v1.9&lt;/a&gt; för att konvertera Markdown till HTML.&lt;/p&gt;&lt;p&gt;Showdown 1.x är släppt under GPL 2.0.&lt;/p&gt;</translation>
</message>
<message>
<source>GPL 2.0 License</source>
<translation>GPL 2.0 License</translation>
</message>
<message>
<source>The app is running in DEBUG mode!</source>
<translation>Appen körs i DEBUG-läget!</translation>
</message>
<message>
<source>The source code is available on</source>
<extracomment>Pre-Showdown Github link</extracomment>
<translation>Källkoden finns </translation>
</message>
<message>
<source>This app uses</source>
<extracomment>Pre-Showdown Github link</extracomment>
<translation>Denna app använder</translation>
</message>
<message>
<source>to convert Markdown to HTML.</source>
<extracomment>Post-Showdown Github link</extracomment>
<translation>för att konvertera Markdown till HTML.</translation>
</message>
<message>
<source>Showdown 1.x is released under GPL 2.0.</source>
<translation>Showdown 1.x är släppt under GPL 2.0.</translation>
</message>
<message>
<source>.</source>
<extracomment>Post-Showdown Github link</extracomment>
<translation>.</translation>
</message>
<message>
<source>This app is released under the MIT license.</source>
<translation>Denna app är släppt under MIT-licensen.</translation>
</message>
</context>
<context>
<name>CoverPage</name>
@ -115,6 +139,10 @@
<source>Save</source>
<translation>Spara</translation>
</message>
<message>
<source>Allow unencrypted connections</source>
<translation>Tillåt okrypterade anslutningar</translation>
</message>
</context>
<context>
<name>MITLicense</name>
@ -386,8 +414,20 @@
<translation>Jag förstår</translation>
</message>
<message>
<source>&lt;strong&gt;Your username and password will be transferred unencrypted over the network when you enable this option.&lt;br&gt;Do not accept unless you know exactly what you are doing!&lt;/strong &gt;&lt;br&gt;&lt;a href=&quot;https://github.com/nextcloud/notes/wiki/API-0.2&quot;&gt;More information...&lt;/a&gt;</source>
<translation>&lt;strong&gt;Ditt användarnamn och lösenord överförs okrypterat över nätverket när du aktiverar det här alternativet.&lt;br&gt;Acceptera inte, såvida du inte vet exakt vad håller med!&lt;/strong &gt;&lt;br&gt;&lt;a href=&quot;https://github.com/nextcloud/notes/wiki/API-0.2&quot;&gt;Mer information...&lt;/a&gt;</translation>
<source>I use this option at my own risk</source>
<translation>Jag använder detta alternativ egen risk</translation>
</message>
<message>
<source>Do not accept unless you know exactly what you are doing!</source>
<translation>Acceptera inte, såvida du inte vet exakt vad håller med!</translation>
</message>
<message>
<source>More information...</source>
<translation>Mer information...</translation>
</message>
<message>
<source>Your username and password will be transferred unencrypted over the network when you enable this option.</source>
<translation>Ditt användarnamn och lösenord överförs okrypterat över nätverket när du aktiverar det här alternativet.</translation>
</message>
</context>
</TS>

View file

@ -4,41 +4,79 @@
<context>
<name>AboutPage</name>
<message>
<location filename="../qml/pages/AboutPage.qml" line="17"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nextcloud Notes</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>for Sailfish OS</source>
<location filename="../qml/pages/AboutPage.qml" line="25"/>
<source>The app is running in DEBUG mode!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/AboutPage.qml" line="33"/>
<source>Notes</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;p&gt;This app is released under the MIT license.&lt;/p&gt;&lt;p&gt;The source code is available on &lt;a href=&quot;https://github.com/scharel/harbour-nextcloudnotes&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;</source>
<location filename="../qml/pages/AboutPage.qml" line="40"/>
<source>This app is released under the MIT license.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/AboutPage.qml" line="42"/>
<source>The source code is available on</source>
<extracomment>Pre-Showdown Github link</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/AboutPage.qml" line="44"/>
<source>.</source>
<extracomment>Post-Showdown Github link</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/AboutPage.qml" line="49"/>
<source>MIT License</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;p&gt;This app uses &lt;a href=&quot;https://github.com/showdownjs/showdown/tree/1.9.0&quot;&gt;ShowdownJS v1.9&lt;/a&gt; to convert Markdown to HTML.&lt;/p&gt;&lt;p&gt;Showdown 1.x is released under GPL 2.0.&lt;/p&gt;</source>
<location filename="../qml/pages/AboutPage.qml" line="62"/>
<source>This app uses</source>
<extracomment>Pre-Showdown Github link</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/AboutPage.qml" line="64"/>
<source>to convert Markdown to HTML.</source>
<extracomment>Post-Showdown Github link</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/AboutPage.qml" line="65"/>
<source>Showdown 1.x is released under GPL 2.0.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/AboutPage.qml" line="70"/>
<source>GPL 2.0 License</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/AboutPage.qml" line="77"/>
<source>Nextcloud Notes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/AboutPage.qml" line="78"/>
<source>for Sailfish OS</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CoverPage</name>
<message>
<location filename="../qml/cover/CoverPage.qml" line="10"/>
<source>Notes</source>
<translation type="unfinished"></translation>
</message>
@ -46,22 +84,27 @@
<context>
<name>EditPage</name>
<message>
<source>Category</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/EditPage.qml" line="28"/>
<source>Reset</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/EditPage.qml" line="35"/>
<source>Markdown syntax</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/EditPage.qml" line="147"/>
<source>No category</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/EditPage.qml" line="148"/>
<source>Category</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/EditPage.qml" line="163"/>
<source>Modified</source>
<translation type="unfinished"></translation>
</message>
@ -69,6 +112,7 @@
<context>
<name>GPLLicense</name>
<message>
<location filename="../qml/pages/GPLLicense.qml" line="17"/>
<source>GPL 2.0 License</source>
<translation type="unfinished"></translation>
</message>
@ -76,49 +120,65 @@
<context>
<name>LoginDialog</name>
<message>
<location filename="../qml/pages/LoginDialog.qml" line="49"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>(starting with &quot;https://&quot;)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Username</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nextcloud server</source>
<location filename="../qml/pages/LoginDialog.qml" line="49"/>
<source>Save</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/LoginDialog.qml" line="64"/>
<source>Account name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Security</source>
<location filename="../qml/pages/LoginDialog.qml" line="79"/>
<source>Nextcloud server</source>
<translation type="unfinished"></translation>
</message>
<message>
<source></source>
<translation></translation>
</message>
<message>
<source>&lt;strong&gt;CAUTION: Your password will be saved without any encryption on the device!&lt;/strong&gt;&lt;br&gt;Please consider creating a dedicated app password! Open your Nextcloud in a browser and go to &lt;i&gt;Settings&lt;/i&gt; &lt;i&gt;Security&lt;/i&gt;.</source>
<location filename="../qml/pages/LoginDialog.qml" line="80"/>
<source>(starting with &quot;https://&quot;)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/LoginDialog.qml" line="93"/>
<source>Username</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/LoginDialog.qml" line="106"/>
<source>Password</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Save</source>
<location filename="../qml/pages/LoginDialog.qml" line="115"/>
<source>Security</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/LoginDialog.qml" line="122"/>
<source>&lt;strong&gt;CAUTION: Your password will be saved without any encryption on the device!&lt;/strong&gt;&lt;br&gt;Please consider creating a dedicated app password! Open your Nextcloud in a browser and go to &lt;i&gt;Settings&lt;/i&gt; &lt;i&gt;Security&lt;/i&gt;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/LoginDialog.qml" line="132"/>
<source>Allow unencrypted connections</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/LoginDialog.qml" line="133"/>
<source></source>
<translation></translation>
</message>
</context>
<context>
<name>MITLicense</name>
<message>
<location filename="../qml/pages/MITLicense.qml" line="17"/>
<source>MIT License</source>
<translation type="unfinished"></translation>
</message>
@ -126,53 +186,65 @@
<context>
<name>NotePage</name>
<message>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Notes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotePage.qml" line="83"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotePage.qml" line="87"/>
<source>Reload</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotePage.qml" line="87"/>
<source>Updating...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotePage.qml" line="93"/>
<source>Last update</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotePage.qml" line="96"/>
<source>never</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Modified</source>
<location filename="../qml/pages/NotePage.qml" line="104"/>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotePage.qml" line="105"/>
<source>Notes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotePage.qml" line="218"/>
<source>No category</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotePage.qml" line="219"/>
<source>Category</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No category</source>
<location filename="../qml/pages/NotePage.qml" line="234"/>
<source>Modified</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NotesApi</name>
<message>
<location filename="../qml/pages/NotesApi.qml" line="291"/>
<source>Today</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesApi.qml" line="293"/>
<source>Yesterday</source>
<translation type="unfinished"></translation>
</message>
@ -180,70 +252,87 @@
<context>
<name>NotesPage</name>
<message>
<location filename="../qml/pages/NotesPage.qml" line="26"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="30"/>
<source>Add note</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="35"/>
<source>Reload</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="35"/>
<source>Updating...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="41"/>
<source>Last update</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="44"/>
<source>never</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="183"/>
<source>Modified</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="186"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="188"/>
<source>Deleting note</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="213"/>
<source>No account yet</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="214"/>
<source>Got to the settings to add an account</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="220"/>
<source>No notes yet</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="221"/>
<source>Pull down to add a note</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="227"/>
<source>No result</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="228"/>
<source>Try another query</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="234"/>
<source>An error occurred</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="245"/>
<source>Open the settings to configure your Nextcloud accounts</source>
<translation type="unfinished"></translation>
</message>
@ -251,142 +340,191 @@
<context>
<name>SettingsPage</name>
<message>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Accounts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="15"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="26"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="30"/>
<source>Accounts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="35"/>
<source>No Nextcloud account yet</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Add account</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="53"/>
<source>Unnamed account</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="54"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="70"/>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="76"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="78"/>
<source>Deleting account</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="88"/>
<source>Add account</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="97"/>
<source>Synchronization</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="101"/>
<source>Auto-Sync</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="102"/>
<source>Periodically pull notes from the server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="109"/>
<source>Disabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Minutes</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Appearance</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show separator</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a separator line between the notes</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>lines</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="109"/>
<source>every</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Category</source>
<location filename="../qml/pages/SettingsPage.qml" line="111"/>
<source>Minutes</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Title alphabetically</source>
<location filename="../qml/pages/SettingsPage.qml" line="112"/>
<source>Seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sort notes by</source>
<location filename="../qml/pages/SettingsPage.qml" line="125"/>
<source>Appearance</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="129"/>
<source>Last edited</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="129"/>
<source>Category</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="129"/>
<source>Title alphabetically</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="130"/>
<source>Sort notes by</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="131"/>
<source>This will also change how the notes are grouped</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="152"/>
<source>Show separator</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="153"/>
<source>Show a separator line between the notes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="163"/>
<source>lines</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="164"/>
<source>Number of lines in the preview</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="169"/>
<source>Editing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="172"/>
<source>Monospaced font</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="173"/>
<source>Use a monospeced font to edit a note</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="178"/>
<source>Capital &apos;X&apos; in checkboxes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="179"/>
<source>For interoperability with other apps such as Joplin</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>UnencryptedDialog</name>
<message>
<location filename="../qml/pages/UnencryptedDialog.qml" line="25"/>
<source>Your username and password will be transferred unencrypted over the network when you enable this option.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/UnencryptedDialog.qml" line="25"/>
<source>Do not accept unless you know exactly what you are doing!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/UnencryptedDialog.qml" line="25"/>
<source>More information...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/UnencryptedDialog.qml" line="30"/>
<source>I do understand</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;strong&gt;Your username and password will be transferred unencrypted over the network when you enable this option.&lt;br&gt;Do not accept unless you know exactly what you are doing!&lt;/strong &gt;&lt;br&gt;&lt;a href=&quot;https://github.com/nextcloud/notes/wiki/API-0.2&quot;&gt;More information...&lt;/a&gt;</source>
<location filename="../qml/pages/UnencryptedDialog.qml" line="37"/>
<source>I use this option at my own risk</source>
<translation type="unfinished"></translation>
</message>
</context>