From 7165f670d47c7a06f80096bdcaf9d13722c804db Mon Sep 17 00:00:00 2001 From: Andreas Grois Date: Tue, 11 Oct 2022 08:22:45 +0200 Subject: Improve UI text consistency (mainly casing) German translation needs to be updated. --- .gitignore | 1 + qml/cover/CoverPage.qml | 15 +- qml/pages/MainPage.qml | 12 +- qml/pages/ProfileEditor.qml | 59 ++++-- qml/pages/ProfilesPage.qml | 4 +- qml/pages/SettingsEditor.qml | 8 +- translations/harbour-passfish-de.qm | Bin 23077 -> 0 bytes translations/harbour-passfish-de.ts | 192 ++++++++++++++++--- translations/harbour-passfish.qm | Bin 21417 -> 0 bytes translations/harbour-passfish.ts | 364 ++++++++++++++++++++---------------- 10 files changed, 429 insertions(+), 226 deletions(-) delete mode 100644 translations/harbour-passfish-de.qm delete mode 100644 translations/harbour-passfish.qm diff --git a/.gitignore b/.gitignore index 2c2ff34..728f2f3 100644 --- a/.gitignore +++ b/.gitignore @@ -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 deleted file mode 100644 index abbfafa..0000000 Binary files a/translations/harbour-passfish-de.qm and /dev/null differ 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 @@ Used Text: Might be too long? Needs testing. - Verwendeter Text: + Verwendeter Text: Pass Ready - Passwort Bereit + Passwort Bereit Input Needed - Input Benötigt + Input Benötigt + + + Used text: + + + + Status: + + + + Password ready + + + + Input needed + @@ -175,7 +191,7 @@ MainPage App Settings - Programmeinstellungen + Programmeinstellungen About @@ -195,11 +211,11 @@ Master Password - Hauptschlüssel + Hauptschlüssel Used Text - Verwendeter Text + Verwendeter Text Generating @@ -219,26 +235,42 @@ Generated Password - Generiertes Passwort + Generiertes Passwort Saving settings failed. Fehler beim Speichern der Einstellungen. + + App settings + + + + Master password + + + + Used text + + + + Generated password + + ProfileEditor Edit Profile - Profil bearbeiten + Profil bearbeiten Required Field - Benötigtes Feld + Benötigtes Feld Profile Name - Profilname + Profilname Profile name required. @@ -246,7 +278,7 @@ Use Protocol - Verwende Protokoll + Verwende Protokoll Include URL protocol (e.g. "http://") @@ -258,19 +290,19 @@ Enable to mimic weird behaviour of PasswordMaker Pro. - Einschalten, um das Verhalten von PasswordMaker Pro zu imitieren. + Einschalten, um das Verhalten von PasswordMaker Pro zu imitieren. Use Userinfo - Verwende Nutzerdaten + Verwende Nutzerdaten Include userinfo (e.g "jane_doe:12345" - Nutze Nutzerinfo (z.B. "jane_doe:12345") + Nutze Nutzerinfo (z.B. "jane_doe:12345") Use Subomain(s) - Verwende Subdomain(s) + Verwende Subdomain(s) Include URL subdomain(s) (e.g. "www.") @@ -278,7 +310,7 @@ Use Domain - Verwende Domain + Verwende Domain Include URL domain (e.g. "example.com") @@ -286,7 +318,7 @@ Use Port/Path - Verwende Port/Pfad + Verwende Port/Pfad Include port and path (e.g ":8080/file") @@ -294,15 +326,15 @@ At least one URL part required. - Mindesteins ein Teil der URL muss genutzt werden. + Mindesteins ein Teil der URL muss genutzt werden. Password Length - Passwortlänge + Passwortlänge Hash Algorithm - Hash-Algorithmus + Hash-Algorithmus MD5 Version 0.6 @@ -314,7 +346,7 @@ Use L33t - Verwende L33t + Verwende L33t not at all @@ -335,11 +367,11 @@ Leet Level Leet genug für diese Welt? - Leet-Stärke + Leet-Stärke Default Characters - Standard-Zeichenliste + Standard-Zeichenliste Alphanumeric @@ -367,7 +399,7 @@ Characters Preset - Zeichenlistenvorlage + Zeichenlistenvorlage Need at least 2 characters. @@ -393,16 +425,92 @@ Suffix Suffix + + Edit profile + + + + Required field + + + + Profile name + + + + URL parts to use + + + + Protocol + + + + Enable to mimic behaviour of JavaScript PasswordMaker Pro. + + + + Userinfo + + + + Include userinfo (e.g "jane_doe:12345") + + + + Subomain(s) + + + + Domain + + + + Port and path + + + + At least one URL part is required. + + + + Password generation settings + + + + Password length + + + + Hash algorithm + + + + Use l33t + + + + Leet level + + + + Default characters + + + + Characters preset + + ProfilesPage Add Profile - Neues Profil + Neues Profil Select/Edit Profiles - Profil Auswählen/Bearbeiten + Profil Auswählen/Bearbeiten Edit @@ -416,6 +524,14 @@ Saving profiles failed. Fehler beim Speichern der Profile. + + Add profile + + + + Select/edit profiles + + SecondPage @@ -432,11 +548,11 @@ SettingsEditor Edit Settings - Einstellungen Anpassen + Einstellungen Anpassen Hide Generated Password - Generiertes Passwort verstecken + Generiertes Passwort verstecken Auto-clear generated password @@ -444,7 +560,7 @@ Auto-clear generated pass timeout - Zeit bis das generierte Passwort gelöscht wird + Zeit bis das generierte Passwort gelöscht wird Auto-clear master password @@ -452,11 +568,27 @@ Auto-clear master pass timeout - Zeit bis der Hauptschlüssel gelöscht wird + Zeit bis der Hauptschlüssel gelöscht wird Profiles can be edited directly in the profiles selector. Der Profileditor ist über die Profilauswahl erreichbar. + + App settings + + + + Hide generated password + + + + Auto-clear generated password timeout + + + + Auto-clear master password timeout + + diff --git a/translations/harbour-passfish.qm b/translations/harbour-passfish.qm deleted file mode 100644 index 2d1b29c..0000000 Binary files a/translations/harbour-passfish.qm and /dev/null differ 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 @@ - + AboutPage + About PassFish - About PassFish + + <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> - -<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> - + CoverPage + PassFish - PassFish + + + + + Used text: + - Used Text: - Used Text: + + Status: + - Pass Ready - Password Ready + + Password ready + - Input Needed - Input Needed + + Input needed + MainPage - App Settings - App Settings + + App settings + + About - About PassFish + + PassFish - PassFish + + Profile - Profile + + + URL - URL + - Master Password - Master Password + + + Master password + - Used Text - Used Text + + + Used text + + Generating - Generating + + Missing text to use - Missing text to use + + Missing master password - Missing master password + + Error in profile character list - Error in profile character list + - Generated Password - Generated Password + + Generated password + + Saving settings failed. - Saving settings failed. + ProfileEditor - Edit Profile - Edit Profile + + Edit profile + - Required Field - Required Field + + + Required field + - Profile Name - Profile Name + + + Profile name + + Profile name required. - Profile name required. + - Use Protocol - Use Protocol + + URL parts to use + + + Protocol + + + + Include URL protocol (e.g. "http://") - Include URL protocol (e.g. "http://") + + Use "undefined" if protocol is missing - Use "undefined" if protocol is missing + - Enable to mimic weird behaviour of PasswordMaker Pro. - Enable to mimic weird behaviour of PasswordMaker Pro. + + Enable to mimic behaviour of JavaScript PasswordMaker Pro. + - Use Userinfo - Use Userinfo + + Userinfo + - Include userinfo (e.g "jane_doe:12345" - Include userinfo (e.g. "jane_doe:12345") + + Include userinfo (e.g "jane_doe:12345") + - Use Subomain(s) - Use Subomain(s) + + Subomain(s) + + Include URL subdomain(s) (e.g. "www.") - Include URL subdomain(s) (e.g. "www.") + - Use Domain - Use Domain + + Domain + + Include URL domain (e.g. "example.com") - Include URL domain (e.g. "example.com") + - Use Port/Path - Use Port/Path + + Port and path + + Include port and path (e.g ":8080/file") - Include port and path (e.g ":8080/file") + + + + + At least one URL part is required. + - At least one URL part required. - At least one URL part required. + + Password generation settings + - Password Length - Password Length + + Password length + - Hash Algorithm - Hash Algorithm + + Hash algorithm + + MD5 Version 0.6 - MD5 Version 0.6 + + HMAC-MD5 Version 0.6 - HMAC-MD5 Version 0.6 + - Use L33t - Use L33t + + Use l33t + + not at all - not at all + + before generating - before generating + + after generating - after generating + + before and after generating - before and after generating + - Leet Level - Leet Level + + Leet level + - Default Characters - Default Characters + + Default characters + + Alphanumeric - Alphanumeric + + Letters only - Letters only + + Numbers only - Numbers only + + Special only - Special only + + Hex - Hex + + Custom - Custom + - Characters Preset - Characters Preset + + Characters preset + + + + Need at least 2 characters. - Need at least 2 characters. + + + Characters - Characters + + + Username - Username + + + Modifier - Modifier + + + Prefix - Prefix + + + Suffix - Suffix + ProfilesPage - Add Profile - Add Profile + + Add profile + - Select/Edit Profiles - Select/Edit Profiles + + Select/edit profiles + + Edit - Edit + + Remove - Remove + + Saving profiles failed. - Saving profiles failed. + SettingsEditor - Edit Settings - Edit Settings + + App settings + - Hide Generated Password - Hide Generated Password + + Hide generated password + + Auto-clear generated password - Auto-clear generated password + - Auto-clear generated pass timeout - Auto-clear generated pass timeout + + Auto-clear generated password timeout + + Auto-clear master password - Auto-clear master password + - Auto-clear master pass timeout - Auto-clear master pass timeout + + Auto-clear master password timeout + + Profiles can be edited directly in the profiles selector. - Profiles can be edited directly in the profiles selector. + -- cgit v1.2.3