diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | qml/cover/CoverPage.qml | 15 | ||||
| -rw-r--r-- | qml/pages/MainPage.qml | 12 | ||||
| -rw-r--r-- | qml/pages/ProfileEditor.qml | 59 | ||||
| -rw-r--r-- | qml/pages/ProfilesPage.qml | 4 | ||||
| -rw-r--r-- | qml/pages/SettingsEditor.qml | 8 | ||||
| -rw-r--r-- | translations/harbour-passfish-de.qm | bin | 23077 -> 0 bytes | |||
| -rw-r--r-- | translations/harbour-passfish-de.ts | 192 | ||||
| -rw-r--r-- | translations/harbour-passfish.qm | bin | 21417 -> 0 bytes | |||
| -rw-r--r-- | translations/harbour-passfish.ts | 364 |
10 files changed, 429 insertions, 226 deletions
@@ -7,3 +7,4 @@ CMakeLists.txt.user passwordmaker-javascript-2.5.html *.pdf notes +translations/*.qm diff --git a/qml/cover/CoverPage.qml b/qml/cover/CoverPage.qml index 5b5af6c..4207138 100644 --- a/qml/cover/CoverPage.qml +++ b/qml/cover/CoverPage.qml @@ -6,7 +6,7 @@ CoverBackground { x: Theme.paddingLarge y: Theme.paddingLarge width: parent.width - 2 * x - spacing: Theme.paddingLarge + spacing: Theme.paddingMedium Label { id: label text: qsTr("PassFish") @@ -23,7 +23,7 @@ CoverBackground { Label { id: urlLabel color: Theme.highlightColor - text: qsTr("Used Text:") + text: qsTr("Used text:") font.pixelSize: Theme.fontSizeSmall truncationMode: TruncationMode.Fade width: parent.width @@ -42,10 +42,17 @@ CoverBackground { Label { id: readyLabel color: Theme.highlightColor + text: qsTr("Status:") + font.pixelSize: Theme.fontSizeSmall + truncationMode: TruncationMode.Fade + width: parent.width + } + Label { + id: ready text: passwordmaker.generated_password.length > 0 && passwordmaker.generator_state === 0 - ? qsTr("Pass Ready") - : qsTr("Input Needed") + ? qsTr("Password ready") + : qsTr("Input needed") font.pixelSize: Theme.fontSizeSmall truncationMode: TruncationMode.Fade width: parent.width diff --git a/qml/pages/MainPage.qml b/qml/pages/MainPage.qml index 1195ef8..2a28eff 100644 --- a/qml/pages/MainPage.qml +++ b/qml/pages/MainPage.qml @@ -35,7 +35,7 @@ Page { PullDownMenu { MenuItem { - text: qsTr("App Settings") + text: qsTr("App settings") onClicked: { var pg = pageStack.animatorPush(Qt.resolvedUrl("SettingsEditor.qml"), { @@ -103,8 +103,8 @@ Page { text: passwordmaker.master_password - label: qsTr("Master Password") - placeholderText: qsTr("Master Password") + label: qsTr("Master password") + placeholderText: qsTr("Master password") EnterKey.iconSource: "image://theme/icon-m-enter-close" EnterKey.onClicked: focus = false Binding { @@ -119,11 +119,11 @@ Page { inputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhNoAutoUppercase - label: qsTr("Used Text") + label: qsTr("Used text") hideLabelOnEmptyField: passwordmaker.used_text === "" onFocusChanged: if(focus) text = passwordmaker.used_text onPlaceholderTextChanged: if(!focus) text = "" - placeholderText: passwordmaker.used_text === "" ? qsTr("Used Text") : passwordmaker.used_text + placeholderText: passwordmaker.used_text === "" ? qsTr("Used text") : passwordmaker.used_text EnterKey.iconSource: "image://theme/icon-m-enter-close" EnterKey.onClicked: focus = false Binding { @@ -167,7 +167,7 @@ Page { showEchoModeToggle: passwordmaker.settings.hide_generated_password readOnly: true focusOnClick: true - label: qsTr("Generated Password") + label: qsTr("Generated password") hideLabelOnEmptyField: false placeholderText: password_text_from_generator_state( diff --git a/qml/pages/ProfileEditor.qml b/qml/pages/ProfileEditor.qml index 5dd28e0..d3b8f24 100644 --- a/qml/pages/ProfileEditor.qml +++ b/qml/pages/ProfileEditor.qml @@ -53,7 +53,7 @@ Dialog { width: parent.width bottomPadding: Theme.paddingLarge DialogHeader { - title: qsTr("Edit Profile") + title: qsTr("Edit profile") } TextField { id: profileNameField @@ -62,14 +62,14 @@ Dialog { //description doesn't work on Sailfish 3. Use label instead if unavailable. readonly property bool descriptionAvailable : typeof(description) !== "undefined" - label: !descriptionAvailable && errorHighlight ? qsTr("Required Field") : qsTr("Profile Name") + label: !descriptionAvailable && errorHighlight ? qsTr("Required field") : qsTr("Profile name") hideLabelOnEmptyField: descriptionAvailable - placeholderText: qsTr("Profile Name") + placeholderText: qsTr("Profile name") Binding { target: profileNameField property: "description" - value: profileNameField.errorHighlight ? qsTr("Required Field") : "" + value: profileNameField.errorHighlight ? qsTr("Required field") : "" when: profileNameField.descriptionAvailable } @@ -90,10 +90,19 @@ Dialog { bottomPadding: Theme.paddingLarge property bool anySelected : (useProtocol || useSubdomain || useDomain || usePortPath || useUserInfo) + Label { + id: urlPartLabel + text: qsTr("URL parts to use") + color: Theme.highlightColor + + x: Theme.paddingLarge + width: parent.width - 2*Theme.paddingSmall + bottomPadding: Theme.paddingSmall + } TextSwitch { id: protocolField - text: qsTr("Use Protocol") + text: qsTr("Protocol") description: qsTr("Include URL protocol (e.g. \"http://\")") palette.highlightColor : down || urlPartsColumn.anySelected ? Theme.highlightColor : Theme.errorColor highlighted: down || !urlPartsColumn.anySelected @@ -102,34 +111,34 @@ Dialog { id: useDefaultFallbackForProtocolField visible: protocolField.checked text: qsTr("Use \"undefined\" if protocol is missing") - description: qsTr("Enable to mimic weird behaviour of PasswordMaker Pro.") + description: qsTr("Enable to mimic behaviour of JavaScript PasswordMaker Pro.") palette.highlightColor : down ? Theme.highlightColor : Theme.errorColor highlighted: down } TextSwitch { id: userInfoField - text: qsTr("Use Userinfo") - description: qsTr("Include userinfo (e.g \"jane_doe:12345\"") + text: qsTr("Userinfo") + description: qsTr("Include userinfo (e.g \"jane_doe:12345\")") palette.highlightColor : down || urlPartsColumn.anySelected ? Theme.highlightColor : Theme.errorColor highlighted: down || !urlPartsColumn.anySelected } TextSwitch { id: subdomainField - text: qsTr("Use Subomain(s)") + text: qsTr("Subomain(s)") description: qsTr("Include URL subdomain(s) (e.g. \"www.\")") palette.highlightColor : down || urlPartsColumn.anySelected ? Theme.highlightColor : Theme.errorColor highlighted: down || !urlPartsColumn.anySelected } TextSwitch { id: domainField - text: qsTr("Use Domain") + text: qsTr("Domain") description: qsTr("Include URL domain (e.g. \"example.com\")") palette.highlightColor : down || urlPartsColumn.anySelected ? Theme.highlightColor : Theme.errorColor highlighted: down || !urlPartsColumn.anySelected } TextSwitch { id: portPathField - text: qsTr("Use Port/Path") + text: qsTr("Port and path") description: qsTr("Include port and path (e.g \":8080/file\")") palette.highlightColor : down || urlPartsColumn.anySelected ? Theme.highlightColor : Theme.errorColor highlighted: down || !urlPartsColumn.anySelected @@ -137,14 +146,28 @@ Dialog { } NoticeOptional { id: urlNotice - text: qsTr("At least one URL part required.") + text: qsTr("At least one URL part is required.") useNotificationFallback: false } } + Separator { + width: parent.width + horizontalAlignment:Qt.AlignHCenter + color: Theme.secondaryColor + } Column { width: parent.width topPadding: Theme.paddingLarge bottomPadding: Theme.paddingLarge + Label { + id: generationSettingsLabel + text: qsTr("Password generation settings") + color: Theme.highlightColor + + x: Theme.paddingLarge + width: parent.width - 2*Theme.paddingSmall + bottomPadding: Theme.paddingSmall + } Slider { id: passwordLengthSlider minimumValue: 1 @@ -152,11 +175,11 @@ Dialog { stepSize: 1 width: parent.width valueText : value - label: qsTr("Password Length") + label: qsTr("Password length") } ComboBox { id: hashAlgorithmComboBox - label: qsTr("Hash Algorithm") + label: qsTr("Hash algorithm") menu: ContextMenu { MenuItem { text: "MD4" } MenuItem { text: "HMAC-MD4" } @@ -174,7 +197,7 @@ Dialog { } ComboBox { id: useLeetComboBox - label: qsTr("Use L33t") + label: qsTr("Use l33t") menu: ContextMenu { MenuItem { text: qsTr("not at all") } MenuItem { text: qsTr("before generating") } @@ -190,7 +213,7 @@ Dialog { width: parent.width valueText: value visible: useLeetComboBox.currentIndex > 0 - label: qsTr("Leet Level") + label: qsTr("Leet level") } } Column { @@ -201,7 +224,7 @@ Dialog { ListModel { id: defaultCharacterValues ListElement { - name: qsTr("Default Characters") + name: qsTr("Default characters") chars: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`~!@#$%^&*()_-+={}|[]\\:\";'<>?,./" userFacing: true } @@ -252,7 +275,7 @@ Dialog { value: defaultCharactersMenu.matchIndex(charactersField.text) } - label: qsTr("Characters Preset") + label: qsTr("Characters preset") menu: ContextMenu { Repeater { model: defaultCharacterValues diff --git a/qml/pages/ProfilesPage.qml b/qml/pages/ProfilesPage.qml index a2df8af..b9a8425 100644 --- a/qml/pages/ProfilesPage.qml +++ b/qml/pages/ProfilesPage.qml @@ -18,7 +18,7 @@ Page { PullDownMenu { MenuItem { - text: qsTr("Add Profile") + text: qsTr("Add profile") onClicked: { profilesView.model.insertRows(profilesView.model.rowCount(),1); profilesView.store_profile_with_error_message(); @@ -26,7 +26,7 @@ Page { } } header: PageHeader { - title: qsTr("Select/Edit Profiles") + title: qsTr("Select/edit profiles") } delegate: ListItem { id: delegate diff --git a/qml/pages/SettingsEditor.qml b/qml/pages/SettingsEditor.qml index 9baa51c..f350160 100644 --- a/qml/pages/SettingsEditor.qml +++ b/qml/pages/SettingsEditor.qml @@ -31,11 +31,11 @@ Dialog { width: parent.width bottomPadding: Theme.paddingLarge DialogHeader { - title: qsTr("Edit Settings") + title: qsTr("App settings") } TextSwitch { id: hide_generated_passwordBox - text: qsTr("Hide Generated Password") + text: qsTr("Hide generated password") palette.highlightColor : Theme.highlightColor highlighted: down } @@ -54,7 +54,7 @@ Dialog { width: parent.width valueText: value + " min" visible: clear_generated_passwordBox.checked - label: qsTr("Auto-clear generated pass timeout") + label: qsTr("Auto-clear generated password timeout") value: clear_generated_password/60 || 1 } TextSwitch { @@ -74,7 +74,7 @@ Dialog { width: parent.width valueText: sliderValue + " min" visible: clear_master_passwordBox.checked - label: qsTr("Auto-clear master pass timeout") + label: qsTr("Auto-clear master password timeout") value: clear_master_password/60 || 5 } Label { diff --git a/translations/harbour-passfish-de.qm b/translations/harbour-passfish-de.qm Binary files differdeleted file mode 100644 index abbfafa..0000000 --- a/translations/harbour-passfish-de.qm +++ /dev/null diff --git a/translations/harbour-passfish-de.ts b/translations/harbour-passfish-de.ts index a0fad6d..0a63486 100644 --- a/translations/harbour-passfish-de.ts +++ b/translations/harbour-passfish-de.ts @@ -145,15 +145,31 @@ <message> <source>Used Text:</source> <translatorcomment>Might be too long? Needs testing.</translatorcomment> - <translation>Verwendeter Text:</translation> + <translation type="vanished">Verwendeter Text:</translation> </message> <message> <source>Pass Ready</source> - <translation>Passwort Bereit</translation> + <translation type="vanished">Passwort Bereit</translation> </message> <message> <source>Input Needed</source> - <translation>Input Benötigt</translation> + <translation type="vanished">Input Benötigt</translation> + </message> + <message> + <source>Used text:</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Status:</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Password ready</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Input needed</source> + <translation type="unfinished"></translation> </message> </context> <context> @@ -175,7 +191,7 @@ <name>MainPage</name> <message> <source>App Settings</source> - <translation>Programmeinstellungen</translation> + <translation type="vanished">Programmeinstellungen</translation> </message> <message> <source>About</source> @@ -195,11 +211,11 @@ </message> <message> <source>Master Password</source> - <translation>Hauptschlüssel</translation> + <translation type="vanished">Hauptschlüssel</translation> </message> <message> <source>Used Text</source> - <translation>Verwendeter Text</translation> + <translation type="vanished">Verwendeter Text</translation> </message> <message> <source>Generating</source> @@ -219,26 +235,42 @@ </message> <message> <source>Generated Password</source> - <translation>Generiertes Passwort</translation> + <translation type="vanished">Generiertes Passwort</translation> </message> <message> <source>Saving settings failed.</source> <translation>Fehler beim Speichern der Einstellungen.</translation> </message> + <message> + <source>App settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Master password</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Used text</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Generated password</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>ProfileEditor</name> <message> <source>Edit Profile</source> - <translation>Profil bearbeiten</translation> + <translation type="vanished">Profil bearbeiten</translation> </message> <message> <source>Required Field</source> - <translation>Benötigtes Feld</translation> + <translation type="vanished">Benötigtes Feld</translation> </message> <message> <source>Profile Name</source> - <translation>Profilname</translation> + <translation type="vanished">Profilname</translation> </message> <message> <source>Profile name required.</source> @@ -246,7 +278,7 @@ </message> <message> <source>Use Protocol</source> - <translation>Verwende Protokoll</translation> + <translation type="vanished">Verwende Protokoll</translation> </message> <message> <source>Include URL protocol (e.g. "http://")</source> @@ -258,19 +290,19 @@ </message> <message> <source>Enable to mimic weird behaviour of PasswordMaker Pro.</source> - <translation>Einschalten, um das Verhalten von PasswordMaker Pro zu imitieren.</translation> + <translation type="vanished">Einschalten, um das Verhalten von PasswordMaker Pro zu imitieren.</translation> </message> <message> <source>Use Userinfo</source> - <translation>Verwende Nutzerdaten</translation> + <translation type="vanished">Verwende Nutzerdaten</translation> </message> <message> <source>Include userinfo (e.g "jane_doe:12345"</source> - <translation>Nutze Nutzerinfo (z.B. "jane_doe:12345")</translation> + <translation type="vanished">Nutze Nutzerinfo (z.B. "jane_doe:12345")</translation> </message> <message> <source>Use Subomain(s)</source> - <translation>Verwende Subdomain(s)</translation> + <translation type="vanished">Verwende Subdomain(s)</translation> </message> <message> <source>Include URL subdomain(s) (e.g. "www.")</source> @@ -278,7 +310,7 @@ </message> <message> <source>Use Domain</source> - <translation>Verwende Domain</translation> + <translation type="vanished">Verwende Domain</translation> </message> <message> <source>Include URL domain (e.g. "example.com")</source> @@ -286,7 +318,7 @@ </message> <message> <source>Use Port/Path</source> - <translation>Verwende Port/Pfad</translation> + <translation type="vanished">Verwende Port/Pfad</translation> </message> <message> <source>Include port and path (e.g ":8080/file")</source> @@ -294,15 +326,15 @@ </message> <message> <source>At least one URL part required.</source> - <translation>Mindesteins ein Teil der URL muss genutzt werden.</translation> + <translation type="vanished">Mindesteins ein Teil der URL muss genutzt werden.</translation> </message> <message> <source>Password Length</source> - <translation>Passwortlänge</translation> + <translation type="vanished">Passwortlänge</translation> </message> <message> <source>Hash Algorithm</source> - <translation>Hash-Algorithmus</translation> + <translation type="vanished">Hash-Algorithmus</translation> </message> <message> <source>MD5 Version 0.6</source> @@ -314,7 +346,7 @@ </message> <message> <source>Use L33t</source> - <translation>Verwende L33t</translation> + <translation type="vanished">Verwende L33t</translation> </message> <message> <source>not at all</source> @@ -335,11 +367,11 @@ <message> <source>Leet Level</source> <translatorcomment>Leet genug für diese Welt?</translatorcomment> - <translation>Leet-Stärke</translation> + <translation type="vanished">Leet-Stärke</translation> </message> <message> <source>Default Characters</source> - <translation>Standard-Zeichenliste</translation> + <translation type="vanished">Standard-Zeichenliste</translation> </message> <message> <source>Alphanumeric</source> @@ -367,7 +399,7 @@ </message> <message> <source>Characters Preset</source> - <translation>Zeichenlistenvorlage</translation> + <translation type="vanished">Zeichenlistenvorlage</translation> </message> <message> <source>Need at least 2 characters.</source> @@ -393,16 +425,92 @@ <source>Suffix</source> <translation>Suffix</translation> </message> + <message> + <source>Edit profile</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Required field</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Profile name</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>URL parts to use</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Protocol</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Enable to mimic behaviour of JavaScript PasswordMaker Pro.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Userinfo</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Include userinfo (e.g "jane_doe:12345")</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Subomain(s)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Domain</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Port and path</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>At least one URL part is required.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Password generation settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Password length</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Hash algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Use l33t</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Leet level</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Default characters</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Characters preset</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>ProfilesPage</name> <message> <source>Add Profile</source> - <translation>Neues Profil</translation> + <translation type="vanished">Neues Profil</translation> </message> <message> <source>Select/Edit Profiles</source> - <translation>Profil Auswählen/Bearbeiten</translation> + <translation type="vanished">Profil Auswählen/Bearbeiten</translation> </message> <message> <source>Edit</source> @@ -416,6 +524,14 @@ <source>Saving profiles failed.</source> <translation>Fehler beim Speichern der Profile.</translation> </message> + <message> + <source>Add profile</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Select/edit profiles</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>SecondPage</name> @@ -432,11 +548,11 @@ <name>SettingsEditor</name> <message> <source>Edit Settings</source> - <translation>Einstellungen Anpassen</translation> + <translation type="vanished">Einstellungen Anpassen</translation> </message> <message> <source>Hide Generated Password</source> - <translation>Generiertes Passwort verstecken</translation> + <translation type="vanished">Generiertes Passwort verstecken</translation> </message> <message> <source>Auto-clear generated password</source> @@ -444,7 +560,7 @@ </message> <message> <source>Auto-clear generated pass timeout</source> - <translation>Zeit bis das generierte Passwort gelöscht wird</translation> + <translation type="vanished">Zeit bis das generierte Passwort gelöscht wird</translation> </message> <message> <source>Auto-clear master password</source> @@ -452,11 +568,27 @@ </message> <message> <source>Auto-clear master pass timeout</source> - <translation>Zeit bis der Hauptschlüssel gelöscht wird</translation> + <translation type="vanished">Zeit bis der Hauptschlüssel gelöscht wird</translation> </message> <message> <source>Profiles can be edited directly in the profiles selector.</source> <translation>Der Profileditor ist über die Profilauswahl erreichbar.</translation> </message> + <message> + <source>App settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Hide generated password</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Auto-clear generated password timeout</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Auto-clear master password timeout</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff --git a/translations/harbour-passfish.qm b/translations/harbour-passfish.qm Binary files differdeleted file mode 100644 index 2d1b29c..0000000 --- a/translations/harbour-passfish.qm +++ /dev/null diff --git a/translations/harbour-passfish.ts b/translations/harbour-passfish.ts index 4258996..8ff6778 100644 --- a/translations/harbour-passfish.ts +++ b/translations/harbour-passfish.ts @@ -1,13 +1,15 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> -<TS version="2.1" language="en_GB" sourcelanguage="en_GB"> +<TS version="2.1"> <context> <name>AboutPage</name> <message> + <location filename="../qml/pages/AboutPage.qml" line="17"/> <source>About PassFish</source> - <translation>About PassFish</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/AboutPage.qml" line="26"/> <source> <p> PassFish is a native re-implementation of <a href="https://passwordmaker.org/">PasswordMaker</a> for Sailfish OS. @@ -68,361 +70,399 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>. </p> </source> - <translation> -<p> - PassFish is a native re-implementation of <a href="https://passwordmaker.org/">PasswordMaker</a> for Sailfish OS. - It aims to be mostly compatible to the <a href="https://sourceforge.net/projects/passwordmaker/files/Javascript%20Edition/">Javascript Edition</a>. -</p> -<p> - All credit for the development of the PasswordMaker Pro algorithm goes to the original authors of PasswordMaker Pro, Miquel Burns and Eric H. Jung. -</p> -<p> - As PassFish is not merely a port, but a full reimplementation from scratch, compatibility is not guaranteed. While the original source code was - used as a guideline during implementation, the underlying technology is vastly different. Common use cases are tested by integration tests, but some - edge cases might have been missed. In case you encounter such an issue, please report it on the - <a href="https://github.com/soulsource/passfish/issues">github issue tracker</a> of the project. -</p> -<p> - Speaking of integration tests: The hash algorithms were not re-implemented for this project in order to reduce the risk of introducing bugs. Instead the - QCryptographicHash API is used where possible, and where not, the implementation from the RustCrypto Hashes repository is utilized (see list of dependencies below). -</p> -<p> - This program consists of two parts: The application itself ("<a href="https://github.com/soulsource/passfish">PassFish</a>"), and a Rust crate that contains the - implementation of the business logic ("<a href="https://github.com/soulsource/passwordmaker-rs"><nobr>passwordmaker&#8209;rs</nobr></a>"). - This is important, as the two parts use different licenses. PassFish is published under the GPLv3 license, while <nobr>passwordmaker&#8209;rs</nobr> is published under LGPLv3. Please check the linked github pages for more details. -</p> -<p> - This program utilises several third party libraries. This list is kept up-to-date to the best of my knowledge. Only direct dependencies are listed, - for transitive dependencies please see the linked websites. Similarly, the source code for those third-party dependencies that are published under an - open source license can be found on the linked websites. To my knowledge the only non-open-source dependency is Silica. The listed licenses are just those - used by <i>this</i> project, most libraries are available under multiple licenses. Please see the libraries' websites for details.<br> - These libraries are linked dynamically: - <ul> - <li><a href="https://www.qt.io/">Qt Quick</a>: Used under <a href="https://www.gnu.org/licenses/lgpl-3.0.en.html">LGPLv3</a></li> - <li><a href="https://sailfishos.org/develop/docs/silica/">Sailfish Silica</a>: Proprietary, <a href="https://www.gnu.org/licenses/gpl-3.0">GPL</a> system library exception</li> - <li><a href="https://github.com/sailfishos/libsailfishapp">LibSailfishApp</a>: Used under LGPL 2.1</li> - </ul> - These libraries and their dependencies are linked statically: - <ul> - <li><a href="https://crates.io/crates/libc">libc Rust bindings</a>: Used under MIT license</li> - <li><a href="https://crates.io/crates/serde">serde</a>: Used under MIT license</li> - <li><a href="https://crates.io/crates/toml">toml-rs</a>: Used under MIT license</li> - <li><a href="https://crates.io/crates/dirs">dirs</a>: Used under MIT license</li> - <li><a href="https://crates.io/crates/ripemd">RustCrypto: RIPEMD</a>: Used under MIT license</li> - </ul> - The <nobr>passwordmaker&#8209;rs</nobr> library has the following statically linked runtime dependencies: - <ul> - <li><a href="https://crates.io/crates/unicode-segmentation">unicode-segmentation</a>: Used under MIT license</li> - </ul> - While it is not a runtime dependency, the code generator for the Rust Qt bindings is worth noting: - <ul> - <li><a href="https://invent.kde.org/sdk/rust-qt-binding-generator">Rust Qt Binding Generator</a></li> - </ul> - PassFish uses a modified version, which can be found in the <a href="https://invent.kde.org/soulsource/rust-qt-binding-generator/-/tree/mockall_support">mockall_support</a> branch. -</p> -<p> - This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, - either version 3 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License along with this program. If not, see <a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>. -</p> - </translation> + <translation type="unfinished"></translation> </message> </context> <context> <name>CoverPage</name> <message> + <location filename="../qml/cover/CoverPage.qml" line="12"/> <source>PassFish</source> - <translation>PassFish</translation> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/cover/CoverPage.qml" line="26"/> + <source>Used text:</source> + <translation type="unfinished"></translation> </message> <message> - <source>Used Text:</source> - <translation>Used Text:</translation> + <location filename="../qml/cover/CoverPage.qml" line="45"/> + <source>Status:</source> + <translation type="unfinished"></translation> </message> <message> - <source>Pass Ready</source> - <translation>Password Ready</translation> + <location filename="../qml/cover/CoverPage.qml" line="54"/> + <source>Password ready</source> + <translation type="unfinished"></translation> </message> <message> - <source>Input Needed</source> - <translation>Input Needed</translation> + <location filename="../qml/cover/CoverPage.qml" line="55"/> + <source>Input needed</source> + <translation type="unfinished"></translation> </message> </context> <context> <name>MainPage</name> <message> - <source>App Settings</source> - <translation>App Settings</translation> + <location filename="../qml/pages/MainPage.qml" line="38"/> + <source>App settings</source> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/MainPage.qml" line="61"/> <source>About</source> - <translation>About PassFish</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/MainPage.qml" line="72"/> <source>PassFish</source> - <translation>PassFish</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/MainPage.qml" line="78"/> <source>Profile</source> - <translation>Profile</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/MainPage.qml" line="90"/> + <location filename="../qml/pages/MainPage.qml" line="91"/> <source>URL</source> - <translation>URL</translation> + <translation type="unfinished"></translation> </message> <message> - <source>Master Password</source> - <translation>Master Password</translation> + <location filename="../qml/pages/MainPage.qml" line="106"/> + <location filename="../qml/pages/MainPage.qml" line="107"/> + <source>Master password</source> + <translation type="unfinished"></translation> </message> <message> - <source>Used Text</source> - <translation>Used Text</translation> + <location filename="../qml/pages/MainPage.qml" line="122"/> + <location filename="../qml/pages/MainPage.qml" line="126"/> + <source>Used text</source> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/MainPage.qml" line="153"/> <source>Generating</source> - <translation>Generating</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/MainPage.qml" line="155"/> <source>Missing text to use</source> - <translation>Missing text to use</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/MainPage.qml" line="157"/> <source>Missing master password</source> - <translation>Missing master password</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/MainPage.qml" line="159"/> <source>Error in profile character list</source> - <translation>Error in profile character list</translation> + <translation type="unfinished"></translation> </message> <message> - <source>Generated Password</source> - <translation>Generated Password</translation> + <location filename="../qml/pages/MainPage.qml" line="170"/> + <source>Generated password</source> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/MainPage.qml" line="226"/> <source>Saving settings failed.</source> - <translation>Saving settings failed.</translation> + <translation type="unfinished"></translation> </message> </context> <context> <name>ProfileEditor</name> <message> - <source>Edit Profile</source> - <translation>Edit Profile</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="56"/> + <source>Edit profile</source> + <translation type="unfinished"></translation> </message> <message> - <source>Required Field</source> - <translation>Required Field</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="65"/> + <location filename="../qml/pages/ProfileEditor.qml" line="72"/> + <source>Required field</source> + <translation type="unfinished"></translation> </message> <message> - <source>Profile Name</source> - <translation>Profile Name</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="65"/> + <location filename="../qml/pages/ProfileEditor.qml" line="67"/> + <source>Profile name</source> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="83"/> <source>Profile name required.</source> - <translation>Profile name required.</translation> + <translation type="unfinished"></translation> </message> <message> - <source>Use Protocol</source> - <translation>Use Protocol</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="95"/> + <source>URL parts to use</source> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="105"/> + <source>Protocol</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/ProfileEditor.qml" line="106"/> <source>Include URL protocol (e.g. "http://")</source> - <translation>Include URL protocol (e.g. "http://")</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="113"/> <source>Use "undefined" if protocol is missing</source> - <translation>Use "undefined" if protocol is missing</translation> + <translation type="unfinished"></translation> </message> <message> - <source>Enable to mimic weird behaviour of PasswordMaker Pro.</source> - <translation>Enable to mimic weird behaviour of PasswordMaker Pro.</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="114"/> + <source>Enable to mimic behaviour of JavaScript PasswordMaker Pro.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Use Userinfo</source> - <translation>Use Userinfo</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="120"/> + <source>Userinfo</source> + <translation type="unfinished"></translation> </message> <message> - <source>Include userinfo (e.g "jane_doe:12345"</source> - <translation>Include userinfo (e.g. "jane_doe:12345")</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="121"/> + <source>Include userinfo (e.g "jane_doe:12345")</source> + <translation type="unfinished"></translation> </message> <message> - <source>Use Subomain(s)</source> - <translation>Use Subomain(s)</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="127"/> + <source>Subomain(s)</source> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="128"/> <source>Include URL subdomain(s) (e.g. "www.")</source> - <translation>Include URL subdomain(s) (e.g. "www.")</translation> + <translation type="unfinished"></translation> </message> <message> - <source>Use Domain</source> - <translation>Use Domain</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="134"/> + <source>Domain</source> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="135"/> <source>Include URL domain (e.g. "example.com")</source> - <translation>Include URL domain (e.g. "example.com")</translation> + <translation type="unfinished"></translation> </message> <message> - <source>Use Port/Path</source> - <translation>Use Port/Path</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="141"/> + <source>Port and path</source> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="142"/> <source>Include port and path (e.g ":8080/file")</source> - <translation>Include port and path (e.g ":8080/file")</translation> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/ProfileEditor.qml" line="149"/> + <source>At least one URL part is required.</source> + <translation type="unfinished"></translation> </message> <message> - <source>At least one URL part required.</source> - <translation>At least one URL part required.</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="164"/> + <source>Password generation settings</source> + <translation type="unfinished"></translation> </message> <message> - <source>Password Length</source> - <translation>Password Length</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="178"/> + <source>Password length</source> + <translation type="unfinished"></translation> </message> <message> - <source>Hash Algorithm</source> - <translation>Hash Algorithm</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="182"/> + <source>Hash algorithm</source> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="187"/> <source>MD5 Version 0.6</source> - <translation>MD5 Version 0.6</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="189"/> <source>HMAC-MD5 Version 0.6</source> - <translation>HMAC-MD5 Version 0.6</translation> + <translation type="unfinished"></translation> </message> <message> - <source>Use L33t</source> - <translation>Use L33t</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="200"/> + <source>Use l33t</source> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="202"/> <source>not at all</source> - <translation>not at all</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="203"/> <source>before generating</source> - <translation>before generating</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="204"/> <source>after generating</source> - <translation>after generating</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="205"/> <source>before and after generating</source> - <translation>before and after generating</translation> + <translation type="unfinished"></translation> </message> <message> - <source>Leet Level</source> - <translation>Leet Level</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="216"/> + <source>Leet level</source> + <translation type="unfinished"></translation> </message> <message> - <source>Default Characters</source> - <translation>Default Characters</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="227"/> + <source>Default characters</source> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="232"/> <source>Alphanumeric</source> - <translation>Alphanumeric</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="237"/> <source>Letters only</source> - <translation>Letters only</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="242"/> <source>Numbers only</source> - <translation>Numbers only</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="247"/> <source>Special only</source> - <translation>Special only</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="252"/> <source>Hex</source> - <translation>Hex</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="257"/> <source>Custom</source> - <translation>Custom</translation> + <translation type="unfinished"></translation> </message> <message> - <source>Characters Preset</source> - <translation>Characters Preset</translation> + <location filename="../qml/pages/ProfileEditor.qml" line="278"/> + <source>Characters preset</source> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="297"/> + <location filename="../qml/pages/ProfileEditor.qml" line="309"/> + <location filename="../qml/pages/ProfileEditor.qml" line="325"/> <source>Need at least 2 characters.</source> - <translation>Need at least 2 characters.</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="297"/> + <location filename="../qml/pages/ProfileEditor.qml" line="299"/> <source>Characters</source> - <translation>Characters</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="336"/> + <location filename="../qml/pages/ProfileEditor.qml" line="337"/> <source>Username</source> - <translation>Username</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="344"/> + <location filename="../qml/pages/ProfileEditor.qml" line="345"/> <source>Modifier</source> - <translation>Modifier</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="352"/> + <location filename="../qml/pages/ProfileEditor.qml" line="353"/> <source>Prefix</source> - <translation>Prefix</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfileEditor.qml" line="360"/> + <location filename="../qml/pages/ProfileEditor.qml" line="361"/> <source>Suffix</source> - <translation>Suffix</translation> + <translation type="unfinished"></translation> </message> </context> <context> <name>ProfilesPage</name> <message> - <source>Add Profile</source> - <translation>Add Profile</translation> + <location filename="../qml/pages/ProfilesPage.qml" line="21"/> + <source>Add profile</source> + <translation type="unfinished"></translation> </message> <message> - <source>Select/Edit Profiles</source> - <translation>Select/Edit Profiles</translation> + <location filename="../qml/pages/ProfilesPage.qml" line="29"/> + <source>Select/edit profiles</source> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfilesPage.qml" line="48"/> <source>Edit</source> - <translation>Edit</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfilesPage.qml" line="97"/> <source>Remove</source> - <translation>Remove</translation> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/ProfilesPage.qml" line="123"/> <source>Saving profiles failed.</source> - <translation>Saving profiles failed.</translation> + <translation type="unfinished"></translation> </message> </context> <context> <name>SettingsEditor</name> <message> - <source>Edit Settings</source> - <translation>Edit Settings</translation> + <location filename="../qml/pages/SettingsEditor.qml" line="34"/> + <source>App settings</source> + <translation type="unfinished"></translation> </message> <message> - <source>Hide Generated Password</source> - <translation>Hide Generated Password</translation> + <location filename="../qml/pages/SettingsEditor.qml" line="38"/> + <source>Hide generated password</source> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/SettingsEditor.qml" line="44"/> <source>Auto-clear generated password</source> - <translation>Auto-clear generated password</translation> + <translation type="unfinished"></translation> </message> <message> - <source>Auto-clear generated pass timeout</source> - <translation>Auto-clear generated pass timeout</translation> + <location filename="../qml/pages/SettingsEditor.qml" line="57"/> + <source>Auto-clear generated password timeout</source> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/SettingsEditor.qml" line="62"/> <source>Auto-clear master password</source> - <translation>Auto-clear master password</translation> + <translation type="unfinished"></translation> </message> <message> - <source>Auto-clear master pass timeout</source> - <translation>Auto-clear master pass timeout</translation> + <location filename="../qml/pages/SettingsEditor.qml" line="77"/> + <source>Auto-clear master password timeout</source> + <translation type="unfinished"></translation> </message> <message> + <location filename="../qml/pages/SettingsEditor.qml" line="86"/> <source>Profiles can be edited directly in the profiles selector.</source> - <translation>Profiles can be edited directly in the profiles selector.</translation> + <translation type="unfinished"></translation> </message> </context> </TS> |
