diff --git a/.gitignore b/.gitignore
index dbab0b9..88f42f3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
# User Specific Project Files
*.pro.user
*.pro.user.*
+*.autosave
rpm/harbour-sailotp.spec
rpm/harbour-sailotp.spec.*
translations/*.qm
diff --git a/qml/harbour-sailotp.qml b/qml/harbour-sailotp.qml
index 8c627ed..74d2173 100644
--- a/qml/harbour-sailotp.qml
+++ b/qml/harbour-sailotp.qml
@@ -60,6 +60,7 @@ ApplicationWindow
path: "/apps/harbour-sailotp"
property bool showQrDefaultAction: false
+ property bool hideTokens: false
}
// Add an entry to the list
diff --git a/qml/pages/AddOTP.qml b/qml/pages/AddOTP.qml
index 28ce97c..69f124e 100644
--- a/qml/pages/AddOTP.qml
+++ b/qml/pages/AddOTP.qml
@@ -71,7 +71,19 @@ Dialog {
if (((paramType == "TOTP" || paramType == "TOTP_STEAM") && (otpLabel.text == "" || otpSecret.text == "")) || (paramType == "HOTP" && (otpLabel.text == "" || otpSecret.text == "" || otpCounter.text <= 0))) {
notify.show(qsTr("Can't create QR-Code from incomplete settings!"), 4000);
} else {
- pageStack.push(Qt.resolvedUrl("QRPage.qml"), {paramLabel: otpLabel.text, paramKey: otpSecret.text, paramType: paramType, paramCounter: otpCounter.text, paramLen: otpLen.text});
+ var otpurl = "";
+ if (paramType == "TOTP") {
+ if (otpLabel.text != "" && otpSecret.text != "")
+ otpurl = "otpauth://totp/"+otpLabel.text+"?secret="+otpSecret.text+"&digits="+otpLen.text;
+ } else if (paramType == "HOTP") {
+ if (paramLabel != "" && paramKey != "" && paramCounter > 0)
+ otpurl = "otpauth://hotp/"+otpLabel.text+"?secret="+otpSecret.text+"&counter="+otpCounter.text+"&digits="+otpLen.text;
+ }
+ if (otpurl != "") {
+ pageStack.push(Qt.resolvedUrl("QRPage.qml"), {paramQrsource: otpurl, paramLabel: otpLabel.text, paramQRId = -1});
+ } else {
+ notify.show(qsTr("Can't create QR-Code from incomplete settings!"), 4000);
+ }
}
}
}
diff --git a/qml/pages/MainView.qml b/qml/pages/MainView.qml
index 59f9636..e496740 100644
--- a/qml/pages/MainView.qml
+++ b/qml/pages/MainView.qml
@@ -66,12 +66,12 @@ Page {
var seconds = (curDate.getSeconds() + appWin.listModel.get(i).diff) % 30;
// Only update on full 30 / 60 Seconds or if last run of the Functions is more than 2s in the past (e.g. app was in background)
if (appWin.listModel.get(i).otp === "------" || seconds == 0 || (curDate.getTime() - lastUpdated > 2000)) {
- var curOTP = OTP.calcOTP(appWin.listModel.get(i).secret, appWin.listModel.get(i).type, appWin.listModel.get(i).len, appWin.listModel.get(i).diff, 0)
+ var curOTP = OTP.calcOTP(appWin.listModel.get(i).secret, appWin.listModel.get(i).type, appWin.listModel.get(i).len, appWin.listModel.get(i).diff, 0);
appWin.listModel.setProperty(i, "otp", curOTP);
+ } else if (appWin.coverType === "HOTP" && (curDate.getTime() - lastUpdated > 2000) && appWin.listModel.get(i).fav === 1) {
+ // If we are coming back from the CoverPage update OTP value if current favourite is HOTP
+ appWin.listModel.setProperty(i, "otp", appWin.coverOTP);
}
- } else if (appWin.coverType === "HOTP" && (curDate.getTime() - lastUpdated > 2000) && appWin.listModel.get(i).fav === 1) {
- // If we are coming back from the CoverPage update OTP value if current favourite is HOTP
- appWin.listModel.setProperty(i, "otp", appWin.coverOTP);
}
}
@@ -97,7 +97,7 @@ Page {
}
MenuItem {
text: qsTr("Settings")
- visible: false
+ visible: true
onClicked: pageStack.push(Qt.resolvedUrl("Settings.qml"))
}
MenuItem {
@@ -170,8 +170,14 @@ Page {
}
onClicked: {
- Clipboard.text = otp
- notify.show(qsTr("Token for ") + title + qsTr(" copied to clipboard"), 3000);
+ if (settings.hideTokens) {
+ otpValue.visible = !otpValue.visible
+ } else if (settings.showQrDefaultAction) {
+ pageStack.push(Qt.resolvedUrl("QRPage.qml"), {paramQrsource: otp, paramLabel: title, paramQRId: index});
+ } else {
+ Clipboard.text = otp
+ notify.show(qsTr("Token for ") + title + qsTr(" copied to clipboard"), 3000);
+ }
}
ListView.onRemove: animateRemoval()
@@ -218,6 +224,7 @@ Page {
text: model.otp
color: Theme.highlightColor
font.pixelSize: Theme.fontSizeLarge
+ visible: !settings.hideTokens
anchors.horizontalCenter: parent.horizontalCenter
}
}
@@ -238,6 +245,19 @@ Page {
Component {
id: otpContextMenu
ContextMenu {
+ MenuItem {
+ text: qsTr("Copy to Clipboard")
+ visible: settings.hideTokens || settings.showQrDefaultAction
+ onClicked: {
+ Clipboard.text = otp
+ notify.show(qsTr("Token for ") + title + qsTr(" copied to clipboard"), 3000);
+ }
+ }
+ MenuItem {
+ text: qsTr("Show Token as QR-Code")
+ visible: !settings.showQrDefaultAction
+ onClicked: pageStack.push(Qt.resolvedUrl("QRPage.qml"), {paramQrsource: otp, paramLabel: title, paramQRId: index});
+ }
MenuItem {
text: qsTr("Move up")
visible: index > 0 ? true : false;
diff --git a/qml/pages/QRPage.qml b/qml/pages/QRPage.qml
index fe7ac07..a8ee473 100644
--- a/qml/pages/QRPage.qml
+++ b/qml/pages/QRPage.qml
@@ -35,11 +35,19 @@ Page {
allowedOrientations: Orientation.All
- property string paramType: ""
+ property int paramQRId: -1;
property string paramLabel: ""
- property string paramKey: ""
- property int paramLen: 6
- property int paramCounter: 0
+ property string paramQrsource: ""
+
+ Timer {
+ interval: 1000
+ // Timer only runs when app is acitive and we have entries
+ running: Qt.application.active && appWin.listModel.count && paramQRId >= 0
+ repeat: true
+ onTriggered: {
+ qrImage.source = "image://qqrencoder/"+appWin.listModel.get(paramQRId).otp;
+ }
+ }
Label {
id: qrLabel
@@ -54,24 +62,16 @@ Page {
id: qrImage
anchors.horizontalCenter: parent.horizontalCenter
y: 200
+ width: Theme.buttonWidthLarge
+ height: Theme.buttonWidthLarge
cache: false
}
Component.onCompleted: {
-
- var otpurl = "";
- if (paramType == "TOTP") {
- if (paramLabel != "" && paramKey != "")
- otpurl = "otpauth://totp/"+paramLabel+"?secret="+paramKey+"&digits="+paramLen;
-
- } else if (paramType == "HOTP") {
- if (paramLabel != "" && paramKey != "" && paramCounter > 0)
- otpurl = "otpauth://hotp/"+paramLabel+"?secret="+paramKey+"&counter="+paramCounter+"&digits="+paramLen;
- }
- if (otpurl != "") {
- qrImage.source = "image://qqrencoder/"+otpurl;
+ if (paramQrsource !== "") {
+ qrImage.source = "image://qqrencoder/"+paramQrsource;
} else {
- notify.show(qsTr("Can't create QR-Code from incomplete settings!"), 4000);
+ notify.show(qsTr("Can't create QR-Code from an empty String"), 4000);
}
}
}
diff --git a/qml/pages/ScanOTP.qml b/qml/pages/ScanOTP.qml
index 81b5cc2..fc42aa8 100644
--- a/qml/pages/ScanOTP.qml
+++ b/qml/pages/ScanOTP.qml
@@ -77,12 +77,7 @@ Page {
flash.mode: Camera.FlashOff
captureMode: Camera.CaptureStillImage
focus.focusMode: Camera.FocusContinuous
-
- imageCapture {
- onImageSaved: {
- decoder.decodeImageFromFile(XDG_CACHE_DIR + "/qrscan.jpg");
- }
- }
+ imageCapture.onImageSaved: { decoder.decodeImageFromFile(path); }
}
QZXing {
@@ -92,17 +87,17 @@ Page {
var ret = URL.decode(tag);
var len = 6
scanning = false
- if (ret && ret.type != "" && ret.title != "" && ret.secret != "" && (ret.counter != "" || ret.type == "TOTP")) {
- if (ret.digits != "") {
+ if (ret && ret.type !== "" && ret.title !== "" && ret.secret !== "" && (ret.counter !== "" || ret.type === "TOTP")) {
+ if (ret.digits !== "") {
len = ret.digits
}
- pageStack.replace(Qt.resolvedUrl("AddOTP.qml"), {parentPage: parentPage, paramLabel: ret.title, paramKey: ret.secret, paramType: ret.type, paramCounter: ret.counter, paramLen: len, paramNew: true})
+ pageStack.replace(Qt.resolvedUrl("AddOTP.qml"), {parentPage: parentPage, paramLabel: ret.title, paramKey: ret.secret.toUpperCase(), paramType: ret.type, paramCounter: ret.counter, paramLen: len, paramNew: true})
} else {
notify.show(qsTr("No valid Token data found."), 3000);
}
}
- onDecodingFinished: if (succeeded==false && scanning) scanTimer.start();
+ onDecodingFinished: { if (succeeded==false && scanning) scanTimer.start(); }
}
FileIO {
diff --git a/qml/pages/Settings.qml b/qml/pages/Settings.qml
index 52daeec..f742c44 100644
--- a/qml/pages/Settings.qml
+++ b/qml/pages/Settings.qml
@@ -51,12 +51,31 @@ Page {
SectionHeader { text: qsTr("Behaviour") }
TextSwitch {
- id: showQrDefault
+ id: showQrDefaultAction
checked: settings.showQrDefaultAction
- text: qsTr("Show Token as QRCode on Tap")
- onClicked: settings.showQrDefaultAction = !settings.showQrDefaultAction
+ text: qsTr("Show Token as QR on Tap")
+ onClicked: {
+ settings.showQrDefaultAction = !settings.showQrDefaultAction;
+ console.log(settings.showQrDefaultAction);
+ if (settings.showQrDefaultAction) {
+ settings.hideTokens = false;
+ hideTokens.checked = settings.hideTokens
+ }
+ }
+ }
+ TextSwitch {
+ id: hideTokens
+ checked: settings.hideTokens
+ text: qsTr("Hide Tokens and Reveal on Tap")
+ onClicked: {
+ settings.hideTokens = !settings.hideTokens;
+ console.log(settings.hideTokens);
+ if (settings.hideTokens) {
+ settings.showQrDefaultAction = false;
+ showQrDefaultAction.checked = settings.showQrDefaultAction
+ }
+ }
}
-
}
VerticalScrollDecorator { }
}
diff --git a/translations/harbour-sailotp-de.ts b/translations/harbour-sailotp-de.ts
index 4e18625..c17e62e 100644
--- a/translations/harbour-sailotp-de.ts
+++ b/translations/harbour-sailotp-de.ts
@@ -38,95 +38,6 @@ Lizenz: BSD (3-Klausel)
Übersetzer:
-
- AddOTP
-
-
-
- QR-Code anzeigen
-
-
-
-
- Ein QR-Code kann nur mit vollständigen Einstellungen erzeugt werden!
-
-
-
-
- Speichern
-
-
-
-
- Hinzufügen
-
-
-
-
- Typ
-
-
-
-
- Zeitbasiert (TOTP)
-
-
-
-
- Zählerbasiert (HOTP)
-
-
-
-
- Steam Guard
-
-
-
-
- Titel
-
-
-
-
- Titel für das Token
-
-
-
-
- Schlüssel (mindestens 16 Zeichen)
-
-
-
-
- Geheimer Schlüssel
-
-
-
-
- Länge
-
-
-
-
- Länge des Tokens
-
-
-
-
-
- Zeitabweichung (Sekunden)
-
-
-
-
- Nächster Zählerwert
-
-
-
-
- Nächster Wert für den Zähler
-
-
ExportPage
@@ -252,75 +163,87 @@ Lizenz: BSD (3-Klausel)
- Über
+
- Einstellungen
+ Einstellungen
- Export / Import
+
- Token hinzufügen
+
- Hier ist nichts
+
- Nach unten ziehen zum hinzufügen
+
- Lösche
+
-
+
+
- Token für
+
-
+
+
- kopiert
+
-
+
+
+
+
+
+
+
+
+
+
+
- Nach oben
+
-
+
- Nach unten
+
-
+
- Bearbeiten
+
-
+
- Löschen
+
QRPage
-
- Ein QR-Code kann nur mit vollständigen Einstellungen erzeugt werden!
+
+
@@ -346,12 +269,12 @@ Lizenz: BSD (3-Klausel)
scanne...
-
+
Kein gültiges Token gefunden.
-
+
Vorschau antippen um den Scan zu starten / zu stoppen. Nach unten ziehen um manuell hinzu zu fügen.
@@ -361,17 +284,22 @@ Lizenz: BSD (3-Klausel)
- Einstellungen
+ Einstellungen
- Verhalten
+
-
- Token bei antippen als QR-Code zeigen
+
+
+
+
+
+
+
diff --git a/translations/harbour-sailotp-es.ts b/translations/harbour-sailotp-es.ts
index 4693c0b..984194c 100644
--- a/translations/harbour-sailotp-es.ts
+++ b/translations/harbour-sailotp-es.ts
@@ -38,95 +38,6 @@ Licencia: BSD (de 3 cláusulas)
Traductores:
-
- AddOTP
-
-
-
- Mostrar código QR
-
-
-
-
- ¡No se puede crear el código QR a partir de una configuración incompleta!
-
-
-
-
- Guardar
-
-
-
-
- Añadir
-
-
-
-
- Tipo
-
-
-
-
- Basado en tiempo (TOTP)
-
-
-
-
- Basado en contador (HOTP)
-
-
-
-
- Steam Guard
-
-
-
-
- Título
-
-
-
-
- Nombre para el OTP
-
-
-
-
- Cadena secreta (al menos 16 caracteres)
-
-
-
-
- Llave secreta OTP
-
-
-
-
- Longitud
-
-
-
-
- Longitud del token
-
-
-
-
-
- Derivación de tiempo (segundos)
-
-
-
-
- Siguiente Contador
-
-
-
-
- Siguiente valor del contador
-
-
ExportPage
@@ -252,75 +163,87 @@ Licencia: BSD (de 3 cláusulas)
- Acerca de
+
- Configuración
+ Configuración
- Exportar/Importar
+
- Añadir Token
+
- Nada aquí
+
- Tire hacia abajo para añadir tokens OTP
+
- Borrando
+
-
+
+
- Token para
+
-
+
+
- copiado al portapapeles
+
-
+
+
+
+
+
+
+
+
+
+
+
- Ascender
+
-
+
- Descender
+
-
+
- Editar
+
-
+
- Borrar
+
QRPage
-
- ¡No se puede crear el código QR a partir de una configuración incompleta!
+
+
@@ -346,12 +269,12 @@ Licencia: BSD (de 3 cláusulas)
Escaneando...
-
+
No se han encontrado datos válidos
-
+
Toque la imagen para comenzar/parar el escaneo. Tire hacia abajo para una configuración manual.
@@ -361,7 +284,7 @@ Licencia: BSD (de 3 cláusulas)
- Configuración
+ Configuración
@@ -370,8 +293,13 @@ Licencia: BSD (de 3 cláusulas)
-
- Mostrar el token como código QR al tocar
+
+
+
+
+
+
+
diff --git a/translations/harbour-sailotp-fi.ts b/translations/harbour-sailotp-fi.ts
index 151b61e..51460d8 100644
--- a/translations/harbour-sailotp-fi.ts
+++ b/translations/harbour-sailotp-fi.ts
@@ -38,95 +38,6 @@ Lisenssi: BSD (3-clause)
Kääntäjät:
-
- AddOTP
-
-
-
- Näytä QR-koodi
-
-
-
-
- QR-koodin luonti epäonnistui puutteellisten asetuksien takia!
-
-
-
-
- Tallenna
-
-
-
-
- Lisää
-
-
-
-
- Tyyppi
-
-
-
-
- Aikapohjainen (TOTP)
-
-
-
-
- Laskentapohjainen (HOTP)
-
-
-
-
- Steam Guard
-
-
-
-
- Nimi
-
-
-
-
- OTP:n nimi
-
-
-
-
- Salaisuus (vähintään 16 merkkiä)
-
-
-
-
- Salainen OTP-avain
-
-
-
-
- Pituus
-
-
-
-
- Tunnuksen pituus
-
-
-
-
-
- Aikapoikkeama (sekunneissa)
-
-
-
-
- Seuraava laskenta-arvo
-
-
-
-
- Laskurin seuraava arvo
-
-
ExportPage
@@ -253,76 +164,87 @@ Lisenssi: BSD (3-clause)
- Tietoja
+
- Translated using Google Translate
- Asetukset
+ Asetukset
- Eksportoi / Importoi
+
- Lisää tunnus
+
- Tyhjä
+
- Vedä alaspäin lisääksesi OTP:n
+
- Poistaa
+
-
+
+
- Tunnus
+
-
+
+
- kopioitu leikepöydälle
+
-
+
+
+
+
+
+
+
+
+
+
+
- Siirrä ylös
+
-
+
- Siirrä alas
+
-
+
- Muokkaa
+
-
+
- Poista
+
QRPage
-
- QR-koodin luonti ei onnistu puutteellisten asetusten takia!
+
+
@@ -348,12 +270,12 @@ Lisenssi: BSD (3-clause)
Skannataan...
-
+
Voimassa olevaa tunnustietoa ei löytynyt.
-
+
Käynnistä / lopeta skannaus painamalla kuvaa. Vedä alaspäin lisääksesi tunnuksen käsin.
@@ -363,19 +285,22 @@ Lisenssi: BSD (3-clause)
- Asetukset
+ Asetukset
- Translated using Google Translate
- Käytös
+
-
- Translated using Google Translate
- Kosketa tokenä QR-koodina
+
+
+
+
+
+
+
diff --git a/translations/harbour-sailotp-fr.ts b/translations/harbour-sailotp-fr.ts
index 2212fee..078238a 100644
--- a/translations/harbour-sailotp-fr.ts
+++ b/translations/harbour-sailotp-fr.ts
@@ -37,95 +37,6 @@ Licence : BSD (3 clauses)
Traducteurs :
-
- AddOTP
-
-
-
- Afficher le code QR
-
-
-
-
- Impossible de créer un code QR avec des paramètres incomplets !
-
-
-
-
- Ajouter
-
-
-
-
- Enregistrer
-
-
-
-
- Type
-
-
-
-
- Basé sur le temps (TOTP)
-
-
-
-
- Basé sur un compteur (HOTP)
-
-
-
-
- Steam Guard
-
-
-
-
- Titre
-
-
-
-
- Titre de l'OTP
-
-
-
-
- Secret (au moins 16 caractètres)
-
-
-
-
- Clé secrète OTP
-
-
-
-
- Longueur
-
-
-
-
- Longueur du jeton
-
-
-
-
-
- Dérivation de temps (secondes)
-
-
-
-
- Prochaine valeur du compteur
-
-
-
-
- Prochaine valeur du compteur
-
-
ExportPage
@@ -252,76 +163,87 @@ Licence : BSD (3 clauses)
- À propos
+
- Translated using Google Translate
- Paramètres
+ Paramètres
- Exporter / Importer
+
- Ajouter un OTP
+
- Aucun mot de passe
+
- Glissez vers le bas pour ajouter un OTP
+
- Suppression
+
-
+
+
- OTP pour
+
-
+
+
- copié dans le presse-papier
+
-
+
+
+
+
+
+
+
+
+
+
+
- Déplacer vers le haut
+
-
+
- Déplacer vers le bas
+
-
+
- Modifier
+
-
+
- Supprimer
+
QRPage
-
- Impossible de créer un code QR avec des paramètres incomplets !
+
+
@@ -347,12 +269,12 @@ Licence : BSD (3 clauses)
Balayer un code
-
+
Pas d'information valide trouvée.
-
+
Appuyez sur l'image pour démarrer / arréter le balayage. Glissez vers le bas pour entrer les paramètres manuellement.
@@ -362,19 +284,22 @@ Licence : BSD (3 clauses)
- Paramètres
+ Paramètres
- Translated using Google Translate
- Comportement
+
-
- Translated using Google Translate
- Touchez le jeton comme un code QR
+
+
+
+
+
+
+
diff --git a/translations/harbour-sailotp-it.ts b/translations/harbour-sailotp-it.ts
index 07f0973..2a34744 100644
--- a/translations/harbour-sailotp-it.ts
+++ b/translations/harbour-sailotp-it.ts
@@ -38,95 +38,6 @@ Licenza: BSD (3-clause)
Traduttori:
-
- AddOTP
-
-
-
- Mostra Codice QR
-
-
-
-
- Impossibile creare il codice QR da impostizioni incomplete!
-
-
-
-
- Salva
-
-
-
-
- Aggiungi
-
-
-
-
- Tipo
-
-
-
-
- Basato sul tempo (TOTP)
-
-
-
-
- Basato su contatore (HOTP)
-
-
-
-
- Steam Guard
-
-
-
-
- Titolo
-
-
-
-
- Titolo per la OTP
-
-
-
-
- Segreto (almeno 16 caratteri)
-
-
-
-
- Chiave OTP segreta
-
-
-
-
- Lunghezza
-
-
-
-
- Lunghezza del Token
-
-
-
-
-
- Derivazione Temporale (Secondi)
-
-
-
-
- Valore Prossimo Contatore
-
-
-
-
- Prossimo Valore del Contatore
-
-
ExportPage
@@ -252,75 +163,87 @@ Licenza: BSD (3-clause)
- Informazioni
+
- Imopstazioni
+ Imopstazioni
- Esporta / Importa
+
- Aggiungi Token
+
- Qua non c'è nulla
+
- Trascina giù per aggiungere una OTP
+
- Cancellazione
+
-
+
+
- Token per
+
-
+
+
- copiato negli appunti
+
-
+
+
+
+
+
+
+
+
+
+
+
- Sposta su
+
-
+
- Sposta giù
+
-
+
- Modifica
+
-
+
- Cancella
+
QRPage
-
- Impossibile creare il codice QR da impostizioni incomplete!
+
+
@@ -346,12 +269,12 @@ Licenza: BSD (3-clause)
Scansione...
-
+
Non sono stati trovati dati di Token validi.
-
+
Tocca l'immagine per iniziare / fermare la scansione. Trascina giù per aggiungere manualmente un Token.
@@ -361,17 +284,22 @@ Licenza: BSD (3-clause)
- Imopstazioni
+ Imopstazioni
- Comportamento
+
-
- Mostra il Token come Codice QR al Tocco
+
+
+
+
+
+
+
diff --git a/translations/harbour-sailotp-pt_BR.ts b/translations/harbour-sailotp-pt_BR.ts
index b13d1dd..46d5d67 100644
--- a/translations/harbour-sailotp-pt_BR.ts
+++ b/translations/harbour-sailotp-pt_BR.ts
@@ -37,95 +37,6 @@ Licença: BSD (3-clause)
Tradutores:
-
- AddOTP
-
-
-
- Mostrar código QR
-
-
-
-
- Não foi possível criar Código QR porque a configuração está incompleta!
-
-
-
-
- Salvar
-
-
-
-
- Adicionar
-
-
-
-
- Tipo
-
-
-
-
- Baseado em tempo (TOTP)
-
-
-
-
- Baseado em contador (HOTP)
-
-
-
-
- Steam Guard
-
-
-
-
- Título
-
-
-
-
- Título para o OTP
-
-
-
-
- Segredo (mínimo de 16 caracteres)
-
-
-
-
- Chave secreta OTP
-
-
-
-
- Tamanho
-
-
-
-
- Tamanho to Token
-
-
-
-
-
- Derivação do tempo (segundos)
-
-
-
-
- Próximo valor do contador
-
-
-
-
- Próximo valor do contador
-
-
ExportPage
@@ -251,75 +162,87 @@ Licença: BSD (3-clause)
- Sobre
+
- Configurações
+ Configurações
- Exportar e importar
+
- Adicionar Token
+
- Nada aqui
+
- Puxe para baixo para adicionar um OTP
+
- Apagando
+
-
+
+
- Token para
+
-
+
+
- copiado para a área de transferência
+
-
+
+
+
+
+
+
+
+
+
+
+
- Mover para cima
+
-
+
- Mover para baixo
+
-
+
- Editar
+
-
+
- Apagar
+
QRPage
-
- Não foi possível criar Código QR porque a configuração está incompleta!
+
+
@@ -345,12 +268,12 @@ Licença: BSD (3-clause)
Escaneando...
-
+
Não foi possível encontrar Token válido
-
+
Toque na imagem para iniciar ou parar o escaneador. Puxe para baixo para adicionar Token manualmente.
@@ -360,17 +283,22 @@ Licença: BSD (3-clause)
- Configurações
+ Configurações
- Comportamento
+
-
- Mostrar Token como Código QR ao tocar
+
+
+
+
+
+
+
diff --git a/translations/harbour-sailotp-ru.ts b/translations/harbour-sailotp-ru.ts
index 53dedbb..f7fc938 100644
--- a/translations/harbour-sailotp-ru.ts
+++ b/translations/harbour-sailotp-ru.ts
@@ -38,95 +38,6 @@ License: BSD (3-clause)
Переводчики:
-
- AddOTP
-
-
-
- Показать QR-код
-
-
-
-
- Невозможно создать QR-код из-за неполных настроек!
-
-
-
-
- Сохранить
-
-
-
-
- Добавить
-
-
-
-
- Тип
-
-
-
-
- На основе времени (TOTP)
-
-
-
-
- На основе счетчика (HOTP)
-
-
-
-
- Steam Guard
-
-
-
-
- Заголовок
-
-
-
-
- Заголовок для OTP
-
-
-
-
- Секрет (минимум 16 символов)
-
-
-
-
- Секретный ключ OTP
-
-
-
-
- Длина
-
-
-
-
- Длина токена
-
-
-
-
-
- Интервал расхождения (секунд)
-
-
-
-
- Следующее значение счетчика
-
-
-
-
- Следующее значение счетчика
-
-
ExportPage
@@ -253,76 +164,87 @@ License: BSD (3-clause)
- О приложении
+
- Translated using Google Translate
- настройки
+ настройки
- Экспорт / импорт
+
- Добавить токен
+
- Ничего нету
+
- Потяните вниз чтобы добавить OTP
+
- Удаление
+
-
+
+
- Токен для
+
-
+
+
- скопирован в буфер обмена
+
-
+
+
+
+
+
+
+
+
+
+
+
- Передвинуть вверх
+
-
+
- Передвинуть вниз
+
-
+
- Редактировать
+
-
+
- Удалить
+
QRPage
-
- Не удалось создать QR-код из-за неполных настроек!
+
+
@@ -348,12 +270,12 @@ License: BSD (3-clause)
Сканирование...
-
+
Не найдено корректных данных для токена.
-
+
Нажмите на изображение чтобы начать / остановить сканирование. Потяните вниз чтобы добавить токен вручную.
@@ -363,19 +285,22 @@ License: BSD (3-clause)
- настройки
+ настройки
- Translated using Google Translate
- поведение
+
-
- Translated using Google Translate
- Сенсорный токен как QR-код
+
+
+
+
+
+
+
diff --git a/translations/harbour-sailotp-sv.ts b/translations/harbour-sailotp-sv.ts
index f7a883c..e2e52c2 100644
--- a/translations/harbour-sailotp-sv.ts
+++ b/translations/harbour-sailotp-sv.ts
@@ -38,95 +38,6 @@ Licens: BSD (3-clause)
Översättare:
-
- AddOTP
-
-
-
- Visa QR-kod
-
-
-
-
- Kan inte skapa QR-kod från ofullständiga inställningar!
-
-
-
-
- Spara
-
-
-
-
- Lägg till
-
-
-
-
- Typ
-
-
-
-
- Tidsbaserad (TOTP)
-
-
-
-
- Räknarbaserad (HOTP)
-
-
-
-
- Steam Guard
-
-
-
-
- Namn
-
-
-
-
- Namn på OTP:n
-
-
-
-
- Hemlighet (Minst 16 tecken)
-
-
-
-
- Hemlig OTP-nyckel
-
-
-
-
- längd
-
-
-
-
- Längden av token
-
-
-
-
-
- Tidsavvikelsen (sekunder)
-
-
-
-
- Nästa räknarvärde
-
-
-
-
- Nästa värde på räknaren
-
-
ExportPage
@@ -253,76 +164,87 @@ Licens: BSD (3-clause)
- Om
+
- Translated using Google Translate
- Inställningar
+ Inställningar
- Export / Import
+
- Lägg till Token
+
- Inget här
+
- Dra neråt för att lägga till en OTP
+
- Tar bort
+
-
+
+
- Token för
+
-
+
+
- kopierad till urklipp
+
-
+
+
+
+
+
+
+
+
+
+
+
- Flytta upp
+
-
+
- Flytta ner
+
-
+
- Redigera
+
-
+
- Ta bort
+
QRPage
-
- Kan inte skapa QR-kod från ofullständiga inställningar!
+
+
@@ -348,12 +270,12 @@ Licens: BSD (3-clause)
Skannar...
-
+
Ingen giltig Token-data hittades.
-
+
Tryck på bilden för att starta / stoppa skanning. Dra neråt för att lägga till Token manuellt.
@@ -363,19 +285,22 @@ Licens: BSD (3-clause)
- Inställningar
+ Inställningar
- Translated using Google Translate
- Beteende
+
-
- Translated using Google Translate
- Peka token som en QR-kod
+
+
+
+
+
+
+
diff --git a/translations/harbour-sailotp-zh_CN.ts b/translations/harbour-sailotp-zh_CN.ts
index 1424470..d6a77eb 100644
--- a/translations/harbour-sailotp-zh_CN.ts
+++ b/translations/harbour-sailotp-zh_CN.ts
@@ -37,95 +37,6 @@ License: BSD (3-clause)
翻译:
-
- AddOTP
-
-
-
- 显示二维码
-
-
-
-
- 不能从未完成的设置中创建二维码
-
-
-
-
- 保存
-
-
-
-
- 添加
-
-
-
-
- 类型
-
-
-
-
- 基于时间(TOTP)
-
-
-
-
- 基于计数器(HOTP)
-
-
-
-
- 时间流守卫
-
-
-
-
- 标题
-
-
-
-
- OTP的标题
-
-
-
-
- 密码(至少16个字符)
-
-
-
-
- OTP密钥
-
-
-
-
- 长度
-
-
-
-
- 令牌的长度
-
-
-
-
-
- 时间推导(秒)
-
-
-
-
- 下一个计数器的值
-
-
-
-
- 下一个计数器的值
-
-
ExportPage
@@ -251,75 +162,87 @@ License: BSD (3-clause)
- 关于
+
- 设置
+ 设置
- 导出/导入
+
- 添加令牌
+
- 无内容
+
- 下拉添加一个OTP
+
- 删除中
+
-
+
+
- 令牌
+
-
+
+
- 已复制到剪切板
+
-
+
+
+
+
+
+
+
+
+
+
+
- 向上
+
-
+
- 向下
+
-
+
- 编辑
+
-
+
- 删除
+
QRPage
-
- 不能重未完成的设置中创建二维码
+
+
@@ -345,12 +268,12 @@ License: BSD (3-clause)
扫描中...
-
+
没有发现有效的令牌数据。
-
+
点击照片开始/结束扫描,下拉手动添加
@@ -360,17 +283,22 @@ License: BSD (3-clause)
- 设置
+ 设置
- 行为
+
-
- 点击后显示令牌为二维码
+
+
+
+
+
+
+
diff --git a/translations/harbour-sailotp.ts b/translations/harbour-sailotp.ts
index e748339..5029351 100644
--- a/translations/harbour-sailotp.ts
+++ b/translations/harbour-sailotp.ts
@@ -36,95 +36,6 @@ License: BSD (3-clause)
Translators:
-
- AddOTP
-
-
-
- Show QR-Code
-
-
-
-
- Can't create QR-Code from incomplete settings!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Steam Guard
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Length
-
-
-
-
- Length of the Token
-
-
-
-
-
- Time Derivation (Seconds)
-
-
-
-
-
-
-
-
-
-
-
-
ExportPage
@@ -250,75 +161,87 @@ License: BSD (3-clause)
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
-
+
-
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
- Move up
+
-
+
- Move down
+
-
+
-
+
-
+
-
+
QRPage
-
- Can't create QR-Code from incomplete settings!
+
+
@@ -344,12 +267,12 @@ License: BSD (3-clause)
-
+
-
+
@@ -359,17 +282,22 @@ License: BSD (3-clause)
-
+
-
+
-
-
+
+
+
+
+
+
+