mirror of
https://github.com/keepassxreboot/keepassxc-browser.git
synced 2026-03-11 08:54:43 +00:00
Merge remote-tracking branch 'origin/develop' into HEAD
This commit is contained in:
commit
910957cae6
47 changed files with 1070 additions and 479 deletions
17
CHANGELOG
17
CHANGELOG
|
|
@ -1,3 +1,20 @@
|
|||
1.9.11 (2025-11-26)
|
||||
=========================
|
||||
- Add support for reseting all settings to defaults [#2720]
|
||||
- Add support for toJSON() with createPublicKeyCredential (passkeys) [#2734]
|
||||
- Add site exception for dei.gr [#2760]
|
||||
- Add submit button exception for Dubverse [#2759]
|
||||
- Add support for selecting a custom submit button with Custom Login Fields [#2756]
|
||||
- Fix check for Firefox browser [#2724, #2725]
|
||||
- Fix JavaScript error in console (thanks ygoe) [#2721]
|
||||
- Fix overlap check with labels [#2731]
|
||||
- Fix checking overlays before fill [#2733]
|
||||
- Fix requerying form if password input changed [#2738]
|
||||
- Fix incorrect fields variable [#2740]
|
||||
- Fix malformed page content with passkeys script injection (thanks a2kolbasov) [#2757]
|
||||
- Fix layout issues with banners [#2764]
|
||||
- Update Playwright libraries [#2727]
|
||||
|
||||
1.9.10 (2025-10-05)
|
||||
=========================
|
||||
- Add Disable passkeys option to Site Preferences [#2694]
|
||||
|
|
|
|||
7
dist/manifest_chromium.json
vendored
7
dist/manifest_chromium.json
vendored
|
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"manifest_version": 3,
|
||||
"name": "KeePassXC-Browser",
|
||||
"version": "1.9.10",
|
||||
"version_name": "1.9.10",
|
||||
"version": "1.9.11",
|
||||
"version_name": "1.9.11",
|
||||
"minimum_chrome_version": "93",
|
||||
"description": "__MSG_extensionDescription__",
|
||||
"author": "KeePassXC Team",
|
||||
|
|
@ -53,7 +53,8 @@
|
|||
"content/fields.js",
|
||||
"content/fill.js",
|
||||
"content/form.js",
|
||||
"content/icons.js",
|
||||
"content/icon.js",
|
||||
"content/icon-handler.js",
|
||||
"content/keepassxc-browser.js",
|
||||
"content/observer-helper.js",
|
||||
"content/pwgen.js",
|
||||
|
|
|
|||
5
dist/manifest_firefox.json
vendored
5
dist/manifest_firefox.json
vendored
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"manifest_version": 2,
|
||||
"name": "KeePassXC-Browser",
|
||||
"version": "1.9.10",
|
||||
"version": "1.9.11",
|
||||
"description": "__MSG_extensionDescription__",
|
||||
"author": "KeePassXC Team",
|
||||
"icons": {
|
||||
|
|
@ -66,7 +66,8 @@
|
|||
"content/fields.js",
|
||||
"content/fill.js",
|
||||
"content/form.js",
|
||||
"content/icons.js",
|
||||
"content/icon.js",
|
||||
"content/icon-handler.js",
|
||||
"content/keepassxc-browser.js",
|
||||
"content/observer-helper.js",
|
||||
"content/pwgen.js",
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "Поле за низ",
|
||||
"message": "Текстово поле",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Изпращащ бутон",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Избиране поле за потребителското име",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Избиране на поле за низ",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Избиране на изпращащ бутон",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Потвърдете избора си или изберете повече полета като полета за низ.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Потвърдете избора си или изберете повече полета като текстови полета.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Също можете да използвате цифрите, за да избирате полета посредством клавиатурата.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Полета за низове",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Изпращащ бутон",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- без потребителско име -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Изнасяне на настройки",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Нулиране на настройките",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Група по подразбиране при добавяне на регистрации:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "Текущите настройки ще бъдат презаписани. Наистина ли желаете да бъдат внесени настройките от файла?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "Желаете ли настройките да бъдат нулирани до подразбираните стойности?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Хранилища, свързани с KeePassXC-Browser.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "Strengfelt",
|
||||
"message": "String Field",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Vælg et brugernavnsfelt",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Vælg strengfelter",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choose submit button",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Bekræft venligst dine valg eller vælge flere felter as strengfelter.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Please confirm your selection or choose more fields as String Fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Du kan også bruge nummeret til at vælge inputfelterne fra tastaturet.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Strengfelter",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- intet brugernavn -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Eksportér indstillinger",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Reset all settings",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Standardgruppe for gemte nye adgangskoder:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "De nuværende indstillinger tilsidesættes. Vil du virkelig importere indstillingsfilen?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "All settings will be reset to defaults. Are you sure?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Databaser som er forbundet til KeePassXC-Browser.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -322,6 +322,10 @@
|
|||
"message": "Zeichenkettenfeld",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Senden-Schaltfläche",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Feld für Benutzernamen auswählen",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Zeichenkettenfelder auswählen",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Senden-Schaltfläche auswählen",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Bitte bestätigen Sie Ihre Auswahl oder wählen Sie weitere Felder als <em>Zeichenkettenfelder</em> aus.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Bitte bestätigen Sie Ihre Auswahl oder wählen Sie weitere Felder als Zeichenkettenfelder aus.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Sie können die Zahlen auch verwenden, um die Eingabefelder über die Tastatur auszuwählen.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Zeichenkettenfelder",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Senden-Schaltfläche",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- kein Benutzername -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Einstellungen exportieren",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Alle Einstellungen zurücksetzen",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Standardgruppe zum Speichern neuer Passwörter:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "Die aktuellen Einstellungen werden überschrieben. Möchten Sie die Einstellungsdatei wirklich importieren?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "Alle Einstellungen werden auf die Standardeinstellungen zurückgesetzt. Sind Sie sicher?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Die folgenden KeePassXC-Datenbanken sind mit dem KeePassXC-Browser verbunden.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "Πεδίο String",
|
||||
"message": "String Field",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Επιλέξτε ένα πεδίο ονόματος χρήστη",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Επιλέξτε Πεδία Strings",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choose submit button",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Επιβεβαιώστε την επιλογή σας ή επιλέξτε περισσότερα πεδία ως πεδία String.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Please confirm your selection or choose more fields as String Fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Μπορείτε επίσης να χρησιμοποιήσετε τους αριθμούς για να επιλέξετε τα πεδία εισαγωγής από το πληκτρολόγιο.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Πεδία Strings",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- χωρίς όνομα χρήστη -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Ρυθμίσεις εξαγωγής",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Reset all settings",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Προεπιλεγμένη ομάδα για την αποθήκευση νέων κωδικών πρόσβασης:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "Οι τρέχουσες ρυθμίσεις θα παρακαμφθούν. Θέλετε πραγματικά να εισαγάγετε το αρχείο ρυθμίσεων;",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "All settings will be reset to defaults. Are you sure?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Συνδεδεμένες βάσεις δεδομένων με το KeePassXC-Browser.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "String field",
|
||||
"message": "String Field",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Choose a username field",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Choose String Fields",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choose submit button",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Please confirm your selection or choose more fields as String fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Please confirm your selection or choose more fields as String Fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "You can also use the numbers to choose the input fields from keyboard.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "String Fields",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- no username -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Export settings",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Reset all settings",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Default group for saving new passwords:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "Current settings will be overridden. Do you really want to import the settings file?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "All settings will be reset to defaults. Are you sure?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Databases connected to KeePassXC-Browser.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -322,6 +322,10 @@
|
|||
"message": "Campo de cadena",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Botón Enviar",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Elija un campo nombre de usuario",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Elija Campos de Cadena",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Seleccione el botón enviar",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Confirme su selección o elija más campos como Campos de cadena.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Confirme su selección o elija más campos como campos de cadena.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "También puede utilizar los números para elegir los campos de entrada desde el teclado.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Campos de Cadena",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Botón Enviar",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- sin nombre de usuario -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Exportar configuración",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Restablecer todos los ajustes",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Grupo predeterminado para guardar nuevas contraseñas:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "La configuración actual será sobrescrita. ¿Desea importar el archivo de configuración?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "Todos los ajustes se restablecerán a los valores predeterminados. ¿Está seguro?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Las siguientes bases de datos KeePassXC están conectadas a KeePassXC-Browser.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "Lisämerkkijonokenttä #",
|
||||
"message": "String Field",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Valitse käyttäjätunnuksen kenttä",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Valitse lisämerkkijonokentät",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choose submit button",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Vahvista valintasi tai merkitse lisää kenttiä <em>lisämerkkijonokentiksi</em>.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Please confirm your selection or choose more fields as String Fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Voit myös valita kenttiä käyttämällä näppäimistön numeroita.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Lisämerkkijonokentät",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- ei käyttäjätunnusta -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Vie asetukset",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Palauta kaikki asetukset oletuksiin",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Oletusryhmä johon uudet salasanat tallennetaan:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "Nykyiset asetukset ylikirjoitetaan. Oletko varma, että haluat tuoda asetustiedoston?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "Kaikki asetukset palautetaan oletuksiin. Oletko varma?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Seuraavat KeePassXC:n tietokannat ovat yhdistettynä selainlaajennukseen.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "Champ de chaîne de caractères",
|
||||
"message": "Champ de chaînes de caractères",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Bouton d’envoi",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Choisissez un champ de nom d’utilisateur",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Choisissez des champs de chaînes de caractères",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choisir le bouton d’envoi",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Confirmez votre choix ou choisissez d’autres champs comme champs de chaînes de caractères.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Vous pouvez aussi utiliser les chiffres pour choisir les champs d’entrée avec le clavier.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Champs de type chaîne",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Bouton d’envoi",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "– aucun nom d’utilisateur –",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Exporter les paramètres",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Réinitialiser tous les paramètres",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Groupe par défaut pour l’enregistrement des nouveaux mots de passe :",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "Les paramètres actuels seront remplacés. Voulez-vous importer le fichier de paramètres ?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "Tous les paramètres seront réinitialisés aux valeurs par défaut. Confirmez-vous ?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Bases de données KeePassXC connectées à KeePassXC-Browser.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "שדה מחרוזת #",
|
||||
"message": "String Field",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "נא לבחור שדה שם משתמש",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "נא לבחור שדה מחרוזת",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choose submit button",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "נא לאשר את הבחירה או לבחור שדות נוספים כשדות מחרוזת.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Please confirm your selection or choose more fields as String Fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "ניתן להשתמש גם במספרים לבחירת שדות הקלט מלוח המקשים.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "שדות מחרוזת",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- אין שם משתמש -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "ייצוא הגדרות",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Reset all settings",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "קבוצת ברירת מחדל לשמירת ססמאות חדשות:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "ההגדרות הנוכחיות יידרסו. האם לייבא את קובץ ההגדרות?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "All settings will be reset to defaults. Are you sure?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "מסדי נתונים מחוברים לדפדפן־KeePassXC.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
"description": "Add button title text on Site Preferences tab."
|
||||
},
|
||||
"editSitePreferenceButtonTitle": {
|
||||
"message": "Edit URL for this Site Preferences.",
|
||||
"message": "URL-cím szerkesztése ezen webhely beállításai számára.",
|
||||
"description": "Edit button title text on Site Preferences tab."
|
||||
},
|
||||
"allowIframeButtonTitle": {
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
"description": "Connect button title text."
|
||||
},
|
||||
"copyDebugInfoButtonTitle": {
|
||||
"message": "Copy debug info to clipboard",
|
||||
"message": "Hibakeresési információk másolása a vágólapra",
|
||||
"description": "Copy debug info button title text on About tab."
|
||||
},
|
||||
"dismissHttpAuthButtonTitle": {
|
||||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "Karakterláncmező",
|
||||
"message": "String Field",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Válasszon egy felhasználónév-mezőt",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Válasszon egy karakterláncmezőt",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choose submit button",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Erősítse meg a választását vagy válasszon több mezőt <em>karakterlánc mezőkként</em>.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Please confirm your selection or choose more fields as String Fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Használhatja a billentyűzeten lévő számokat is a beviteli mezők kiválasztásához.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Karakterláncmezők",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "– nincs felhasználónév –",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -371,7 +383,7 @@
|
|||
"description": "Shown when no credentials are found for the current page."
|
||||
},
|
||||
"credentialsBlockedInIframe": {
|
||||
"message": "Credential fill blocked in untrusted iframe.",
|
||||
"message": "A hitelesítő adatok kitöltése blokkolása a nem megbízható iframe-ben.",
|
||||
"description": "Alert message when filling credentials is blocked due to iframe restrictions."
|
||||
},
|
||||
"credentialsMultipleFound": {
|
||||
|
|
@ -631,11 +643,11 @@
|
|||
"description": "Dismiss button text when in HTTP Authentication popup."
|
||||
},
|
||||
"optionsDefaultSettingsTitle": {
|
||||
"message": "Default settings",
|
||||
"message": "Alapértelmezett beállítások",
|
||||
"description": "Default settings title for Getting Started page."
|
||||
},
|
||||
"optionsWelcomeTitle": {
|
||||
"message": "KeePassXC-Browser",
|
||||
"message": "KeePassXC-böngésző",
|
||||
"description": "Main card title for Getting Started page."
|
||||
},
|
||||
"optionsTitle": {
|
||||
|
|
@ -679,7 +691,7 @@
|
|||
"description": "Site Preferences page header."
|
||||
},
|
||||
"optionsSitePreferencesSettings": {
|
||||
"message": "Settings",
|
||||
"message": "Beállítások",
|
||||
"description": "Site Preferences settings button text."
|
||||
},
|
||||
"optionsMenuAbout": {
|
||||
|
|
@ -707,7 +719,7 @@
|
|||
"description": "Add button text."
|
||||
},
|
||||
"optionsButtonEdit": {
|
||||
"message": "Edit",
|
||||
"message": "Szerkesztés",
|
||||
"description": "Edit button text."
|
||||
},
|
||||
"optionsButtonUpdate": {
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Beállítások exportálása",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Minden beállítás visszaállítása",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Alapértelmezett csoport az új jelszavak mentéséhez:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -791,7 +807,7 @@
|
|||
"description": "Automatically fill-in single credential entry checkbox text."
|
||||
},
|
||||
"optionsCheckboxAutoFillRelevantCredential": {
|
||||
"message": "Automatically fill in relevant credential entries",
|
||||
"message": "Releváns hitelesítésiadat-bejegyzések automatikus kitöltése",
|
||||
"description": "Automatically fill-in relevant credential entry checkbox text."
|
||||
},
|
||||
"optionsCheckboxAutoFillSingleTotp": {
|
||||
|
|
@ -835,11 +851,11 @@
|
|||
"description": "Show login notifications checkbox text."
|
||||
},
|
||||
"optionsDefaultPasswordManager": {
|
||||
"message": "Set as default password manager",
|
||||
"message": "Beállítás alapértelmezett jelszókezelőnek.",
|
||||
"description": "Default password manager checkbox text."
|
||||
},
|
||||
"optionsDefaultPasswordManagerHelpText": {
|
||||
"message": "Sets KeePassXC-Browser as the default password manager for the browser.",
|
||||
"message": "A KeePassXC-böngészőt beállítja alapértelmezett jelszókezelőnek a böngészőben.",
|
||||
"description": "Default password manager help text."
|
||||
},
|
||||
"optionsRedirectAllowance": {
|
||||
|
|
@ -939,7 +955,7 @@
|
|||
"description": "OTP field icon option help text."
|
||||
},
|
||||
"optionsHideIconsAlertText": {
|
||||
"message": "You can also hide icons manually when needed with shift+click.",
|
||||
"message": "Szükség esetén az ikonok manuálisan is elrejthetők Shift+kattintással.",
|
||||
"description": "Hide icons alert text text."
|
||||
},
|
||||
"optionsAutoRetrieveCredentialsHelpText": {
|
||||
|
|
@ -955,7 +971,7 @@
|
|||
"description": "Auto-Fill Single Entry option help text."
|
||||
},
|
||||
"optionsAutoFillRelevantCredentialHelpText": {
|
||||
"message": "Automatically fill in the relevant credential if a second fill is needed.",
|
||||
"message": "Releváns hitelesítésiadat-bejegyzések automatikus kitöltése ha egy második kitöltés is szükséges.",
|
||||
"description": "Auto-Fill Relevant Credential option help text."
|
||||
},
|
||||
"optionsAutoFillSingleEntryWarning": {
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "A jelenlegi beállítások felül lesznek írva. Biztos, hogy importálja a beállításfájlt?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "Minden beállítás alapértelmezett értékre áll vissza. Valóban ezt szeretné?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "A következő KeePassXC adatbázisok vannak kapcsolódva a KeePassXC-böngészőhöz.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
@ -1119,7 +1139,7 @@
|
|||
"description": "Site Preferences list column title."
|
||||
},
|
||||
"optionsColumnFeatures": {
|
||||
"message": "Features",
|
||||
"message": "Képességek",
|
||||
"description": "Site Preferences list column title."
|
||||
},
|
||||
"optionsColumnUsernameOnly": {
|
||||
|
|
@ -1151,7 +1171,7 @@
|
|||
"description": "Site Preferences option selection."
|
||||
},
|
||||
"optionsSelectionPasskeys": {
|
||||
"message": "Disable passkeys",
|
||||
"message": "Jelkulcsok letiltása",
|
||||
"description": "Site Preferences option selection."
|
||||
},
|
||||
"optionsSelectionFull": {
|
||||
|
|
@ -1407,31 +1427,31 @@
|
|||
"description": "Lock database button title text."
|
||||
},
|
||||
"welcomeText": {
|
||||
"message": "Welcome to KeePassXC-Browser!",
|
||||
"message": "Üdvözöljük a KeePassXC-böngészőben!",
|
||||
"description": "Main title of Getting Started page."
|
||||
},
|
||||
"documentationGettingStarted": {
|
||||
"message": "Our Getting Started Guide will get you up and running quickly.",
|
||||
"message": "A bevezető útmutatónk segítségével gyorsan elsajátíthatja a használatot.",
|
||||
"description": "Getting Started document text."
|
||||
},
|
||||
"documentationUserGuide": {
|
||||
"message": "Looking for more comprehensive documentation? Our User Guide is there to help.",
|
||||
"message": "Átfogóbb dokumentációra lenne szüksége? A felhasználói útmutatónk segíthet.",
|
||||
"description": "User Guide text."
|
||||
},
|
||||
"documentationTroubleshootingGuide": {
|
||||
"message": "Need help troubleshooting the browser integration? Check the Troubleshooting Guide.",
|
||||
"message": "Segítségre van szüksége a böngésző integrációjának hibaelhárításában? Olvassa el a hibaelhárítási útmutatót.",
|
||||
"description": "Troubleshooting Guide text."
|
||||
},
|
||||
"gettingStartedWelcomeText": {
|
||||
"message": "Welcome to KeePassXC-Browser, the official browser extension for KeePassXC.",
|
||||
"message": "Üdvözlet a KeePassXC-böngészőben, a KeePassXC hivatalos böngészőbővítményében.",
|
||||
"description": "Welcome to KeePassXC-Browser, the official browser extension for KeePassXC."
|
||||
},
|
||||
"gettingStartedSecondWelcomeText": {
|
||||
"message": "Please go through the default settings and check all your preferred options.",
|
||||
"message": "Kérjük, nézze át az alapértelmezett beállításokat és ellenőrizze az összes kívánt opciót.",
|
||||
"description": "Please go through the default settings and check all your preferred options."
|
||||
},
|
||||
"gettingStartedNewUser": {
|
||||
"message": "Are you a new user? Check links to our documentation.",
|
||||
"message": "Új felhasználó? Nézze meg a hivatkozott dokumentációt!",
|
||||
"description": "Are you a new user? Check links to our documentation."
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "Ruas lema",
|
||||
"message": "String Field",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Pilih ruas nama pengguna",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Pilih Ruas String",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choose submit button",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Harap konfirmasi pilihan Anda atau pilih lebih banyak bidang sebagai bidang String.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Please confirm your selection or choose more fields as String Fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Anda juga dapat menggunakan angka untuk memilih bidang input dari keyboard.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Ruas String",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- tidak ada nama pengguna -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Ekspor pengaturan",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Reset all settings",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Grup baku untuk menyimpan sandi baru:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "Pengaturan saat ini akan diganti. Apakah Anda benar-benar ingin mengimpor berkas pengaturan?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "All settings will be reset to defaults. Are you sure?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Basis data terhubung ke KeePassXC-Browser.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "Campo stringa",
|
||||
"message": "String Field",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Scegli un campo nome utente",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Scegli campi stringa",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choose submit button",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Conferma la selezione o scegli altri campi come campi stringa.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Please confirm your selection or choose more fields as String Fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Puoi anche usare i numeri per scegliere i campi di input dalla tastiera.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Campi stringa",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- nessun nome utente -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -371,7 +383,7 @@
|
|||
"description": "Shown when no credentials are found for the current page."
|
||||
},
|
||||
"credentialsBlockedInIframe": {
|
||||
"message": "Credential fill blocked in untrusted iframe.",
|
||||
"message": "Riempimento delle credenziali bloccato in iframe non attendibile.",
|
||||
"description": "Alert message when filling credentials is blocked due to iframe restrictions."
|
||||
},
|
||||
"credentialsMultipleFound": {
|
||||
|
|
@ -679,7 +691,7 @@
|
|||
"description": "Site Preferences page header."
|
||||
},
|
||||
"optionsSitePreferencesSettings": {
|
||||
"message": "Settings",
|
||||
"message": "Impostazioni",
|
||||
"description": "Site Preferences settings button text."
|
||||
},
|
||||
"optionsMenuAbout": {
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Esporta impostazioni",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Ripristina tutte le impostazioni",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Gruppo predefinito salvataggio nuove password:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "Le impostazioni attuali verranno sovrascritte. Vuoi veramente importare le impostazioni?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "Tutte le impostazioni verranno ripristinate ai valori predefiniti. Sei sicuro?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Database KeePassXC connessi a KeePassXC-Browser.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
@ -1119,7 +1139,7 @@
|
|||
"description": "Site Preferences list column title."
|
||||
},
|
||||
"optionsColumnFeatures": {
|
||||
"message": "Features",
|
||||
"message": "Funzionalità",
|
||||
"description": "Site Preferences list column title."
|
||||
},
|
||||
"optionsColumnUsernameOnly": {
|
||||
|
|
@ -1151,7 +1171,7 @@
|
|||
"description": "Site Preferences option selection."
|
||||
},
|
||||
"optionsSelectionPasskeys": {
|
||||
"message": "Disable passkeys",
|
||||
"message": "Disabilita passkeys",
|
||||
"description": "Site Preferences option selection."
|
||||
},
|
||||
"optionsSelectionFull": {
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "文字列フィールド",
|
||||
"message": "String Field",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "ユーザー名フィールドを選択してください",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "文字列フィールドを選択してください",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choose submit button",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "選択したものを確認するか、文字列フィールドとして別のフィールドを追加で選択してください。",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Please confirm your selection or choose more fields as String Fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "キーボードの数字キーで入力フィールドを選択できます。",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "文字列フィールド",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- ユーザー名なし -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "設定をエクスポート",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Reset all settings",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "新しいパスワードを保存するデフォルトのグループ:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "現在の設定を上書きします。本当に設定ファイルをインポートしますか?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "All settings will be reset to defaults. Are you sure?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "KeePassXC-Browser に接続されているデータベースです。",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "문자열 필드",
|
||||
"message": "String Field",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "사용자 이름 필드 선택",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "문자열 필드 선택",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choose submit button",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "선택 사항을 확인하거나 더 많은 <em>문자열 필드</em>를 선택하십시오.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Please confirm your selection or choose more fields as String Fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "키보드에서 숫자를 눌러서 입력 필드를 선택할 수 있습니다.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "문자열 필드",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- 사용자 이름 없음 -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "설정 내보내기",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Reset all settings",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "새 암호를 저장할 기본 그룹:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "현재 설정을 덮어쓸 것입니다. 설정 파일을 가져오시겠습니까?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "All settings will be reset to defaults. Are you sure?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "다음 KeePassXC 데이터베이스가 KeePassXC-브라우저에 연결되어 있습니다.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "Eilutės laukas",
|
||||
"message": "String Field",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Pasirinkite vartotojo vardo lauką",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Pasirinkite eilučių laukus",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choose submit button",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Patvirtinkite savo pasirinkimą arba pasirinkite daugiau laukų kaip eilutės laukus.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Please confirm your selection or choose more fields as String Fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Taip pat galite naudoti skaičius, kad pasirinktumėte įvesties laukus iš klaviatūros.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Eilučių laukai",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- nėra naudotojo vardo -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Eksportuoti nustatymus",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Reset all settings",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Numatytoji naujų slaptažodžių įrašymo grupė:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "Dabartiniai nustatymai bus nepaisomi. Ar tikrai norite importuoti nustatymų failą?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "All settings will be reset to defaults. Are you sure?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Duomenų bazės, prijungtos prie \"KeePassXC-Browser\".",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "Tekstfelt",
|
||||
"message": "String Field",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Velg et brukernavnfelt",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Velg tekstfelt",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choose submit button",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Bekreft utvalget, eller velg flere felt som tekstfelt.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Please confirm your selection or choose more fields as String Fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Du kan også bruke tallene til å velge innputtfeltene fra tastatur.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Tekstfelt",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- ikke noe brukernavn -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Eksporter innstillinger",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Reset all settings",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Standardgruppe for lagring av nye passord:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "Gjeldende innstillinger vil bli overstyrt. Vil du virkelig importere filen med nye innstillinger?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "All settings will be reset to defaults. Are you sure?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Databaser koblet til KeePassXC–Browser.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -322,6 +322,10 @@
|
|||
"message": "Tekenreeksveld",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Knop Indienen",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Kies een gebruikersnaamveld",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Kies tekenreeksvelden",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Knop Indienen kiezen",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Bevestig je selectie of stel meerdere velden in als <em>tekenreeksvelden</em>.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Bevestig de selectie of kies meer velden als tekenreeksvelden.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Je kunt tevens gebruikmaken van de numerieke toetsen op je toetsenbord.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Tekenreeksvelden",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Knop Indienen",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- geen gebruikersnaam -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Instellingen exporteren",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Alle instellingen opnieuw instellen",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Standaardgroep voor het opslaan van nieuwe wachtwoorden:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "De huidige instellingen worden overschreven. Weet je zeker dat je het instellingenbestand wilt importeren?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "Alle instellingen worden teruggezet naar standaardinstellingen. Weet je het zeker?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Databases verbonden met KeePassXC-Browser.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -322,6 +322,10 @@
|
|||
"message": "Pole ciągu",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Przycisk przesyłania",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Wybierz pole nazwy użytkownika",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Wybierz pola ciągów",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Wybierz przycisk przesyłania",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Potwierdź swój wybór lub wybierz więcej pól jako pola ciągów.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Możesz także użyć liczb, aby wybrać pola wprowadzania z klawiatury.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Pola ciągów",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Przycisk przesyłania",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- brak nazwy użytkownika -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Eksportuj ustawienia",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Resetuj wszystkie ustawienia",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Domyślna grupa do zapisywania nowych haseł:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "Bieżące ustawienia zostaną zastąpione. Czy na pewno chcesz zaimportować plik ustawień?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "Wszystkie ustawienia zostaną przywrócone do wartości domyślnych. Czy na pewno chcesz to zrobić?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Bazy danych podłączone do KeePassXC-Browser.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "Campo para texto",
|
||||
"message": "Campo do Texto",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Botão Enviar",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Escolha um campo para o nome de usuário",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Escolha os campos para texto",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Selecione o botão enviar",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Confirme a sua seleção ou escolha mais campos como texto.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Por favor, confirme sua seleção ou escolha mais campos como Campos de Texto.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Você também pode usar os números para escolher os campos de entrada do teclado.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Campos para texto",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Botão Enviar",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- sem usuário -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Exportar as configurações",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Redefinir todas as configurações",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Grupo padrão para salvar novas senhas:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "As configurações atuais serão substituídas. Deseja realmente importar o arquivo de configuração?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "Todas as configurações serão redefinidas para os padrões. Tem certeza?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Os seguintes bancos de dados do KeePassXC estão conectados ao KeePassXC-Browser.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "Campo de cadeia",
|
||||
"message": "String Field",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Escolha o campo para o nome de utilizador",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Escolha os campos de cadeia",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choose submit button",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Confirme a sua seleção ou escolha mais campos como campos de cadeia",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Please confirm your selection or choose more fields as String Fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Também pode usar os números para escolher os campos com o teclado",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Campos de cadeia",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- sem nome de utilizador -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Exportar definições",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Reset all settings",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Grupo padrão para as novas palavras-passe:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "As definições atuais serão substituídas. Tem a certeza de que deseja importar os dados do ficheiro?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "All settings will be reset to defaults. Are you sure?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Bases de dados conectadas com KeePassXC-Browser",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "String field",
|
||||
"message": "String Field",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Choose a username field",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Choose String Fields",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choose submit button",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Confirmați selecția sau alegeți mai multe câmpuri ca și câmpuri de tip șir de caractere.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Please confirm your selection or choose more fields as String Fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "De asemenea, puteți utiliza numerele pentru a alege câmpurile de intrare de la tastatură.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "String Fields",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "-niciun nume de utilizator-",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Setări de export",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Reset all settings",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Grup implicit pentru salvarea parolelor noi:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "Setările curente vor fi anulate. Doriți cu adevărat să importați fișierul cu setări?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "All settings will be reset to defaults. Are you sure?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Baze de date conectate la KeePassXC-Browser.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@
|
|||
"description": "Name of the extension."
|
||||
},
|
||||
"addSitePreferenceButtonTitle": {
|
||||
"message": "Добавить настройки сайта для этого URL.",
|
||||
"message": "Добавить настройки сайта для этого URL-адреса.",
|
||||
"description": "Add button title text on Site Preferences tab."
|
||||
},
|
||||
"editSitePreferenceButtonTitle": {
|
||||
"message": "Edit URL for this Site Preferences.",
|
||||
"message": "Изменить URL-адрес для этих настроек сайта.",
|
||||
"description": "Edit button title text on Site Preferences tab."
|
||||
},
|
||||
"allowIframeButtonTitle": {
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
"description": "Connect button title text."
|
||||
},
|
||||
"copyDebugInfoButtonTitle": {
|
||||
"message": "Copy debug info to clipboard",
|
||||
"message": "Копировать отладочную информацию в буфер обмена",
|
||||
"description": "Copy debug info button title text on About tab."
|
||||
},
|
||||
"dismissHttpAuthButtonTitle": {
|
||||
|
|
@ -244,7 +244,7 @@
|
|||
"description": "Error notification shown when not connected to KeePassXC."
|
||||
},
|
||||
"errorCurrentDatabaseNotConnected": {
|
||||
"message": "Current database is not connected.",
|
||||
"message": "Текущая база данных не подключена.",
|
||||
"description": "Error notification shown when current database is not connected during action."
|
||||
},
|
||||
"passwordGeneratorErrorTooLong": {
|
||||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "Строковое поле",
|
||||
"message": "String Field",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Выберите поле логина",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Выберите строковые поля",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choose submit button",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Пожалуйста, подтвердите свой выбор или выберите больше строковых полей.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Please confirm your selection or choose more fields as String Fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Вы также можете использовать числа для выбора полей ввода с клавиатуры.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Строковые поля",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- нет логина -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -371,7 +383,7 @@
|
|||
"description": "Shown when no credentials are found for the current page."
|
||||
},
|
||||
"credentialsBlockedInIframe": {
|
||||
"message": "Credential fill blocked in untrusted iframe.",
|
||||
"message": "Заполнение учётных данных заблокировано в ненадежном iframe.",
|
||||
"description": "Alert message when filling credentials is blocked due to iframe restrictions."
|
||||
},
|
||||
"credentialsMultipleFound": {
|
||||
|
|
@ -631,7 +643,7 @@
|
|||
"description": "Dismiss button text when in HTTP Authentication popup."
|
||||
},
|
||||
"optionsDefaultSettingsTitle": {
|
||||
"message": "Default settings",
|
||||
"message": "Настройки по умолчанию",
|
||||
"description": "Default settings title for Getting Started page."
|
||||
},
|
||||
"optionsWelcomeTitle": {
|
||||
|
|
@ -679,7 +691,7 @@
|
|||
"description": "Site Preferences page header."
|
||||
},
|
||||
"optionsSitePreferencesSettings": {
|
||||
"message": "Settings",
|
||||
"message": "Настройки",
|
||||
"description": "Site Preferences settings button text."
|
||||
},
|
||||
"optionsMenuAbout": {
|
||||
|
|
@ -707,7 +719,7 @@
|
|||
"description": "Add button text."
|
||||
},
|
||||
"optionsButtonEdit": {
|
||||
"message": "Edit",
|
||||
"message": "Изменить",
|
||||
"description": "Edit button text."
|
||||
},
|
||||
"optionsButtonUpdate": {
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Экспорт настроек",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Сбросить все настройки",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Группа по умолчанию для сохранения новых паролей:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -791,7 +807,7 @@
|
|||
"description": "Automatically fill-in single credential entry checkbox text."
|
||||
},
|
||||
"optionsCheckboxAutoFillRelevantCredential": {
|
||||
"message": "Automatically fill in relevant credential entries",
|
||||
"message": "Автоматически заполнять соответствующие записи учётных данных",
|
||||
"description": "Automatically fill-in relevant credential entry checkbox text."
|
||||
},
|
||||
"optionsCheckboxAutoFillSingleTotp": {
|
||||
|
|
@ -835,11 +851,11 @@
|
|||
"description": "Show login notifications checkbox text."
|
||||
},
|
||||
"optionsDefaultPasswordManager": {
|
||||
"message": "Set as default password manager",
|
||||
"message": "Установить как менеджер паролей по умолчанию",
|
||||
"description": "Default password manager checkbox text."
|
||||
},
|
||||
"optionsDefaultPasswordManagerHelpText": {
|
||||
"message": "Sets KeePassXC-Browser as the default password manager for the browser.",
|
||||
"message": "Устанавливает KeePassXC-Browser в качестве менеджера паролей по умолчанию для браузера.",
|
||||
"description": "Default password manager help text."
|
||||
},
|
||||
"optionsRedirectAllowance": {
|
||||
|
|
@ -939,7 +955,7 @@
|
|||
"description": "OTP field icon option help text."
|
||||
},
|
||||
"optionsHideIconsAlertText": {
|
||||
"message": "You can also hide icons manually when needed with shift+click.",
|
||||
"message": "При необходимости вы также можете скрыть значки вручную, нажав Shift+клик.",
|
||||
"description": "Hide icons alert text text."
|
||||
},
|
||||
"optionsAutoRetrieveCredentialsHelpText": {
|
||||
|
|
@ -955,7 +971,7 @@
|
|||
"description": "Auto-Fill Single Entry option help text."
|
||||
},
|
||||
"optionsAutoFillRelevantCredentialHelpText": {
|
||||
"message": "Automatically fill in the relevant credential if a second fill is needed.",
|
||||
"message": "Автоматически заполнить соответствующие учётные данные, если требуется повторное заполнение.",
|
||||
"description": "Auto-Fill Relevant Credential option help text."
|
||||
},
|
||||
"optionsAutoFillSingleEntryWarning": {
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "Текущие настройки будут переопределены. Вы действительно хотите импортировать файл настроек?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "Все настройки будут сброшены на значения по умолчанию. Вы уверены?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Базы данных, подключенные к KeePassXC-Browser.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
@ -1119,7 +1139,7 @@
|
|||
"description": "Site Preferences list column title."
|
||||
},
|
||||
"optionsColumnFeatures": {
|
||||
"message": "Features",
|
||||
"message": "Функции",
|
||||
"description": "Site Preferences list column title."
|
||||
},
|
||||
"optionsColumnUsernameOnly": {
|
||||
|
|
@ -1151,7 +1171,7 @@
|
|||
"description": "Site Preferences option selection."
|
||||
},
|
||||
"optionsSelectionPasskeys": {
|
||||
"message": "Disable passkeys",
|
||||
"message": "Отключить ключи доступа",
|
||||
"description": "Site Preferences option selection."
|
||||
},
|
||||
"optionsSelectionFull": {
|
||||
|
|
@ -1407,31 +1427,31 @@
|
|||
"description": "Lock database button title text."
|
||||
},
|
||||
"welcomeText": {
|
||||
"message": "Welcome to KeePassXC-Browser!",
|
||||
"message": "Добро пожаловать в KeePassXC-Browser!",
|
||||
"description": "Main title of Getting Started page."
|
||||
},
|
||||
"documentationGettingStarted": {
|
||||
"message": "Our Getting Started Guide will get you up and running quickly.",
|
||||
"message": "Наше руководство по началу работы поможет вам быстро приступить к работе.",
|
||||
"description": "Getting Started document text."
|
||||
},
|
||||
"documentationUserGuide": {
|
||||
"message": "Looking for more comprehensive documentation? Our User Guide is there to help.",
|
||||
"message": "Ищете более подробную документацию? Наше руководство пользователя вам поможет.",
|
||||
"description": "User Guide text."
|
||||
},
|
||||
"documentationTroubleshootingGuide": {
|
||||
"message": "Need help troubleshooting the browser integration? Check the Troubleshooting Guide.",
|
||||
"message": "Нужна помощь в устранении неполадок интеграции с браузером? Ознакомьтесь с руководством по устранению неполадок.",
|
||||
"description": "Troubleshooting Guide text."
|
||||
},
|
||||
"gettingStartedWelcomeText": {
|
||||
"message": "Welcome to KeePassXC-Browser, the official browser extension for KeePassXC.",
|
||||
"message": "Добро пожаловать в KeePassXC-Browser, официальное расширение браузера для KeePassXC.",
|
||||
"description": "Welcome to KeePassXC-Browser, the official browser extension for KeePassXC."
|
||||
},
|
||||
"gettingStartedSecondWelcomeText": {
|
||||
"message": "Please go through the default settings and check all your preferred options.",
|
||||
"message": "Пожалуйста, проверьте настройки по умолчанию и выберите все предпочтительные параметры.",
|
||||
"description": "Please go through the default settings and check all your preferred options."
|
||||
},
|
||||
"gettingStartedNewUser": {
|
||||
"message": "Are you a new user? Check links to our documentation.",
|
||||
"message": "Вы новый пользователь? Посмотрите ссылки на нашу документацию.",
|
||||
"description": "Are you a new user? Check links to our documentation."
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -322,6 +322,10 @@
|
|||
"message": "Strängfält",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Skicka-knapp",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Välj ett användarnamn-fält",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Välj sträng-fält",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Välj Skicka-knapp",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Vänligen bekräfta ditt val eller välj fler fält som <em>Strängfält</em>.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Bekräfta ditt val eller välj fler fält som strängfält.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "You can also use the numbers to choose the input fields from keyboard.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Strängfält",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Skicka-knapp",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- inget användarnamn -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Exportera inställningar",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Återställ alla inställningar",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Default group for saving new passwords:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "Nuvarande inställningar kommer att skrivas över. Vill du verkligen importera inställningsfilen?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "Alla inställningar kommer att återställas till standardinställning. Är du säker?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Följande KeePassXC-databaser är anslutna till KeePassXC-Browser.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"extensionDescription": {
|
||||
"message": "Modern tarayıcılar için KeePassXC bütünleşmesi",
|
||||
"message": "Modern tarayıcılar için KeePassXC bütünleştirmesi",
|
||||
"description": "Name of the extension."
|
||||
},
|
||||
"addSitePreferenceButtonTitle": {
|
||||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "Metin alanı",
|
||||
"message": "Yazı alanı",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Gönder düğmesi",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Kullanıcı adı alanını seçin",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -335,12 +339,16 @@
|
|||
"description": "Choosing a TOTP field text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseStringFields": {
|
||||
"message": "Metin alanlarını seçin",
|
||||
"message": "Yazı alanlarını seçin",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Gönder düğmesini seçin",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Lütfen seçiminizi onaylayın ya da dizge alanları olarak ek alanlar seçin.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Lütfen seçiminizi onaylayın ya da yazı alanları olarak ek alanlar seçin.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Giriş alanlarını tuş takımıyla seçmek için sayıları kullanabilirsiniz.",
|
||||
|
|
@ -359,9 +367,13 @@
|
|||
"description": "General text for password."
|
||||
},
|
||||
"stringFields": {
|
||||
"message": "Metin alanları",
|
||||
"message": "Yazı alanları",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Gönder düğmesi",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- kullanıcı adı yok -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -403,7 +415,7 @@
|
|||
"description": "Message shown when no password fields are found."
|
||||
},
|
||||
"fieldsPasswordFillNotAccepted": {
|
||||
"message": "Parolanın bir düz metin alanına yazılması engellenir.",
|
||||
"message": "Parolanın bir düz yazı alanına yazılması engellenir.",
|
||||
"description": "Message shown when password fill to a plain text field is prevented."
|
||||
},
|
||||
"rememberNothingChanged": {
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Ayarları dışa aktar",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Tüm ayarları sıfırla",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Yeni parolaların kaydedileceği varsayılan grup:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "Var olan ayarlar değiştirilecek. Ayarlar dosyasını içe aktarmak istediğinize emin misiniz?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "Tüm ayarları varsayılan değerlerine sıfırlamak istediğinize emin misiniz? ",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "KeePassXC-Browser ile bağlantısı kurulmuş KeePassXC veri tabanları.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -319,9 +319,13 @@
|
|||
"description": "Clear save data button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineStringField": {
|
||||
"message": "Поле рядка",
|
||||
"message": "String Field",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "Виберіть поле імені користувача",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "Оберіть поля рядків",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "Choose submit button",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "Підтвердьте свій вибір або виберіть більше полів як рядків.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "Please confirm your selection or choose more fields as String Fields.",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "Ви також можете використовувати числа для вибору полів введення з клавіатури.",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "Поля рядків",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "Submit Button",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- без імені користувача -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "Експортувати налаштування",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "Reset all settings",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "Типова група для збереження нових паролів:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "Поточні налаштування будуть перевизначені. Ви дійсно хочете імпортувати файл налаштувань?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "All settings will be reset to defaults. Are you sure?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "Під'єднані бази даних до KeePassXC-Browser.",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -322,6 +322,10 @@
|
|||
"message": "字符串字段",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "提交按钮",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "选择用户名字段",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "选择字符串字段",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "选择提交按钮",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "请确认您的选择,或选择更多字段作为字符串字段。",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "您也可以使用键盘的数字键选择输入字段。",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "字符串字段",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "提交按钮",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- 没有用户名 -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "导出配置",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "重置所有设置",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "保存新密码的默认群组:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "当前配置将会被覆盖,确定导入?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "所有设置都将重置为默认。您确定吗?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "已连接到 KeePassXC-Browser 的数据库。",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -303,7 +303,7 @@
|
|||
"description": "More button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineReset": {
|
||||
"message": "重置",
|
||||
"message": "重設",
|
||||
"description": "Reset button text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineConfirm": {
|
||||
|
|
@ -322,6 +322,10 @@
|
|||
"message": "字串欄位",
|
||||
"description": "Text for string field."
|
||||
},
|
||||
"defineSubmitButton": {
|
||||
"message": "送出按鈕",
|
||||
"description": "Text for Submit Button."
|
||||
},
|
||||
"defineChooseUsername": {
|
||||
"message": "選擇用戶名稱欄位",
|
||||
"description": "Choosing a username field text when choosing Custom Login Fields."
|
||||
|
|
@ -338,9 +342,13 @@
|
|||
"message": "選擇字串欄位",
|
||||
"description": "Choose String Fields a selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineChooseSubmitButton": {
|
||||
"message": "選擇送出按鈕",
|
||||
"description": "Choose submit button selection text when choosing Custom Login Fields."
|
||||
},
|
||||
"defineHelpText": {
|
||||
"message": "請確認您的選擇,或是選擇更多欄位作為<em>字串欄位</em>。",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains string fields."
|
||||
"message": "請確認您的選擇,或選擇更多欄位作為字串欄位",
|
||||
"description": "Confirm a selection text when choosing Custom Login Fields which contains String Fields."
|
||||
},
|
||||
"defineKeyboardText": {
|
||||
"message": "您也可以使用鍵盤的數字鍵選擇輸入欄位。",
|
||||
|
|
@ -362,6 +370,10 @@
|
|||
"message": "字串欄位",
|
||||
"description": "General text for a String Fields."
|
||||
},
|
||||
"submitButton": {
|
||||
"message": "送出按鈕",
|
||||
"description": "Custom Submit Button text."
|
||||
},
|
||||
"credentialsNoUsername": {
|
||||
"message": "- 無用戶名稱 -",
|
||||
"description": "Shown when no username is set in the credentials."
|
||||
|
|
@ -734,6 +746,10 @@
|
|||
"message": "導出配置",
|
||||
"description": "Export settings button text."
|
||||
},
|
||||
"optionsButtonResetSettings": {
|
||||
"message": "重設所有設定",
|
||||
"description": "Reset all settings button text."
|
||||
},
|
||||
"optionsLabelDefaultGroup": {
|
||||
"message": "儲存新密碼的預設群組:",
|
||||
"description": "Default group options text."
|
||||
|
|
@ -1074,6 +1090,10 @@
|
|||
"message": "目前設定將會被覆寫。真的要匯入設定檔案?",
|
||||
"description": "Import settings confirmation dialog help text."
|
||||
},
|
||||
"optionsResetSettingsDialogText": {
|
||||
"message": "所有設定都將被重置為預設值。您確定嗎?",
|
||||
"description": "Reset all settings dialog text."
|
||||
},
|
||||
"optionsConnectedDatabasesText": {
|
||||
"message": "已連接至 KeePassXC-Browser 的資料庫。",
|
||||
"description": "Info text about connected databases."
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ const defaultSettings = {
|
|||
downloadFaviconAfterSave: false,
|
||||
passkeys: false,
|
||||
passkeysFallback: true,
|
||||
redirectAllowance: 1,
|
||||
redirectAllowance: 3,
|
||||
saveDomainOnly: true,
|
||||
showGettingStartedGuideAlert: true,
|
||||
showGroupNameInAutocomplete: true,
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ kpxcFill.fillAttributeToActiveElementWith = async function(attr) {
|
|||
return;
|
||||
}
|
||||
|
||||
kpxcFill.setValue(el, value[0]);
|
||||
await kpxcFill.setValue(el, value[0]);
|
||||
};
|
||||
|
||||
// Fill requested from the context menu. Active element is used for combination detection
|
||||
|
|
@ -152,20 +152,20 @@ kpxcFill.fillTOTPFromUuid = async function(el, uuid) {
|
|||
return;
|
||||
}
|
||||
|
||||
kpxcFill.setTOTPValue(el, totp);
|
||||
await kpxcFill.setTOTPValue(el, totp);
|
||||
} else if (user.stringFields?.length > 0) {
|
||||
const stringFields = user.stringFields;
|
||||
for (const s of stringFields) {
|
||||
const val = s['KPH: {TOTP}'];
|
||||
if (val) {
|
||||
kpxcFill.setTOTPValue(el, val);
|
||||
await kpxcFill.setTOTPValue(el, val);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Set normal or segmented TOTP value
|
||||
kpxcFill.setTOTPValue = function(elem, val) {
|
||||
kpxcFill.setTOTPValue = async function(elem, val) {
|
||||
if (kpxc.credentials.length === 0) {
|
||||
logDebug('Error: Credential list is empty.');
|
||||
return;
|
||||
|
|
@ -173,22 +173,22 @@ kpxcFill.setTOTPValue = function(elem, val) {
|
|||
|
||||
for (const comb of kpxc.combinations) {
|
||||
if (comb.totpInputs?.length > 0) {
|
||||
kpxcFill.fillSegmentedTotp(elem, val, comb.totpInputs);
|
||||
await kpxcFill.fillSegmentedTotp(elem, val, comb.totpInputs);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
kpxcFill.setValue(elem, val);
|
||||
await kpxcFill.setValue(elem, val);
|
||||
};
|
||||
|
||||
// Fill TOTP in parts
|
||||
kpxcFill.fillSegmentedTotp = function(elem, val, totpInputs) {
|
||||
kpxcFill.fillSegmentedTotp = async function(elem, val, totpInputs) {
|
||||
if (!totpInputs.includes(elem) || val.length < totpInputs.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (let i = 0; i < totpInputs.length; ++i) {
|
||||
kpxcFill.setValue(totpInputs[i], val[i]);
|
||||
await kpxcFill.setValue(totpInputs[i], val[i]);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -271,7 +271,7 @@ kpxcFill.fillInCredentials = async function(combination, predefinedUsername, uui
|
|||
return;
|
||||
}
|
||||
|
||||
kpxcFill.setValueWithChange(combination.password, selectedCredentials.password);
|
||||
await kpxcFill.setValueWithChange(combination.password, selectedCredentials.password);
|
||||
await kpxc.setPasswordFilled(true);
|
||||
}
|
||||
|
||||
|
|
@ -279,20 +279,20 @@ kpxcFill.fillInCredentials = async function(combination, predefinedUsername, uui
|
|||
if (combination.username && usernameValue && combination.username !== combination.password &&
|
||||
(!combination.username.value || combination.username.value !== usernameValue)) {
|
||||
if (!passOnly) {
|
||||
kpxcFill.setValueWithChange(combination.username, usernameValue);
|
||||
await kpxcFill.setValueWithChange(combination.username, usernameValue);
|
||||
}
|
||||
}
|
||||
|
||||
// Fill StringFields
|
||||
if (selectedCredentials.stringFields?.length > 0) {
|
||||
kpxcFill.fillInStringFields(combination.fields, selectedCredentials.stringFields);
|
||||
await kpxcFill.fillInStringFields(combination.fields, selectedCredentials.stringFields);
|
||||
}
|
||||
|
||||
// Fill TOTP
|
||||
if (kpxc.settings.autoFillSingleTotp && kpxc.entryHasTotp(selectedCredentials)) {
|
||||
const totpCombination = combination?.totp || kpxc.combinations?.find(c => c.totp);
|
||||
if (totpCombination?.totp) {
|
||||
kpxcFill.fillTOTPFromUuid(totpCombination.totp, selectedCredentials.uuid);
|
||||
await kpxcFill.fillTOTPFromUuid(totpCombination.totp, selectedCredentials.uuid);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -306,7 +306,7 @@ kpxcFill.fillInCredentials = async function(combination, predefinedUsername, uui
|
|||
};
|
||||
|
||||
// Fills StringFields defined in Custom Fields
|
||||
kpxcFill.fillInStringFields = function(fields, stringFields) {
|
||||
kpxcFill.fillInStringFields = async function(fields, stringFields) {
|
||||
const filledInFields = [];
|
||||
if (fields && stringFields && fields?.length > 0 && stringFields?.length > 0) {
|
||||
for (let i = 0; i < fields.length; i++) {
|
||||
|
|
@ -318,7 +318,7 @@ kpxcFill.fillInStringFields = function(fields, stringFields) {
|
|||
const currentField = fields[i];
|
||||
|
||||
if (currentField && stringFieldValue[0]) {
|
||||
kpxcFill.setValue(currentField, stringFieldValue[0], true);
|
||||
await kpxcFill.setValue(currentField, stringFieldValue[0], true);
|
||||
filledInFields.push(currentField);
|
||||
}
|
||||
}
|
||||
|
|
@ -353,14 +353,14 @@ kpxcFill.performAutoSubmit = async function(combination, skipAutoSubmit) {
|
|||
};
|
||||
|
||||
// Special handling for setting value to select and checkbox elements
|
||||
kpxcFill.setValue = function(field, value, forced = false) {
|
||||
kpxcFill.setValue = async function(field, value, forced = false) {
|
||||
if (field.matches('select')) {
|
||||
value = value.toLowerCase().trim();
|
||||
const options = field.querySelectorAll('option');
|
||||
|
||||
for (const o of options) {
|
||||
if (o.textContent.toLowerCase().trim() === value) {
|
||||
kpxcFill.setValueWithChange(field, o.value);
|
||||
await kpxcFill.setValueWithChange(field, o.value);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -378,11 +378,11 @@ kpxcFill.setValue = function(field, value, forced = false) {
|
|||
}
|
||||
|
||||
|
||||
kpxcFill.setValueWithChange(field, value, forced);
|
||||
await kpxcFill.setValueWithChange(field, value, forced);
|
||||
};
|
||||
|
||||
// Sets a new value to input field and triggers necessary events
|
||||
kpxcFill.setValueWithChange = function(field, value, forced = false) {
|
||||
kpxcFill.setValueWithChange = async function(field, value, forced = false) {
|
||||
if (!field || (field?.readOnly && !forced)) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -401,12 +401,23 @@ kpxcFill.setValueWithChange = function(field, value, forced = false) {
|
|||
};
|
||||
|
||||
field.focus();
|
||||
field.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true, cancelable: false }));
|
||||
field.dispatchEvent(new KeyboardEvent('keypress', { bubbles: true, cancelable: false }));
|
||||
field.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true, cancelable: false }));
|
||||
field.dispatchEvent(new Event('input', { bubbles: true, cancelable: false }));
|
||||
field.dispatchEvent(new Event('change', { bubbles: true, cancelable: false }));
|
||||
|
||||
// Use a delay to allow focus events to trigger and to give some
|
||||
// breathing room to frameworks that rely on promises to update their
|
||||
// state, like React. Not doing so can break OTP input, see issue #2215.
|
||||
await Promise.resolve();
|
||||
|
||||
field.dispatchEvent(new FocusEvent('focus', { bubbles: false, cancelable: false }));
|
||||
field.dispatchEvent(new FocusEvent('focusin', { bubbles: true, cancelable: false }));
|
||||
|
||||
// https://w3c.github.io/uievents/#keypress-event-order
|
||||
field.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true, cancelable: false, key: value }));
|
||||
field.dispatchEvent(new InputEvent('beforeinput', { bubbles: true, cancelable: false, inputType: 'insertText', data: value }));
|
||||
field.dispatchEvent(new KeyboardEvent('keypress', { bubbles: true, cancelable: false, key: value }));
|
||||
field.value = value;
|
||||
field.dispatchEvent(new Event('input', { bubbles: true, cancelable: false }));
|
||||
field.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true, cancelable: false, key: value }));
|
||||
field.dispatchEvent(new Event('change', { bubbles: true, cancelable: false }));
|
||||
|
||||
// Some pages will not accept the value change without dispatching events directly to the document
|
||||
dispatchLegacyEvent(field, 'input');
|
||||
|
|
|
|||
242
keepassxc-browser/content/icon-handler.js
Normal file
242
keepassxc-browser/content/icon-handler.js
Normal file
|
|
@ -0,0 +1,242 @@
|
|||
'use strict';
|
||||
|
||||
/**
|
||||
* @Object kpxcIcons
|
||||
* Icon handling.
|
||||
*/
|
||||
const kpxcIcons = {};
|
||||
kpxcIcons.icons = [];
|
||||
kpxcIcons.iconTypes = {
|
||||
DEFAULT: 0, // Username icon
|
||||
PASSWORD: 1,
|
||||
TOTP: 2
|
||||
};
|
||||
|
||||
// Adds an icon to input field
|
||||
kpxcIcons.addIcon = async function(field, iconType) {
|
||||
if (!field || !Object.values(kpxcIcons.iconTypes).includes(iconType)) {
|
||||
return;
|
||||
}
|
||||
|
||||
let iconSet = false;
|
||||
if (iconType === kpxcIcons.iconTypes.DEFAULT && kpxcUsernameIcons.isValid(field)) {
|
||||
kpxcUsernameIcons.newIcon(field, kpxc.databaseState);
|
||||
iconSet = true;
|
||||
} else if (iconType === kpxcIcons.iconTypes.PASSWORD && kpxcPasswordIcons.isValid(field)) {
|
||||
kpxcPasswordIcons.newIcon(field, kpxc.databaseState);
|
||||
iconSet = true;
|
||||
} else if (iconType === kpxcIcons.iconTypes.TOTP && kpxcTOTPIcons.isValid(field)) {
|
||||
kpxcTOTPIcons.newIcon(field, kpxc.databaseState);
|
||||
iconSet = true;
|
||||
}
|
||||
|
||||
if (iconSet) {
|
||||
kpxcIcons.icons.push({
|
||||
field: field,
|
||||
iconType: iconType
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Adds all icons from a form struct
|
||||
kpxcIcons.addIconsFromForm = async function(form) {
|
||||
const addUsernameIcons = async function(c) {
|
||||
if (kpxc.settings.showLoginFormIcon && await kpxc.passwordFilledWithExceptions(c) === false) {
|
||||
// Special case where everything else has been hidden, but a single password field is now displayed.
|
||||
// For example PayPal and Amazon is handled like this.
|
||||
if (c.username && !c.password && c.passwordInputs.length === 1) {
|
||||
kpxcIcons.addIcon(c.passwordInputs[0], kpxcIcons.iconTypes.DEFAULT);
|
||||
}
|
||||
|
||||
if (c.username && !c.username.readOnly) {
|
||||
kpxcIcons.addIcon(c.username, kpxcIcons.iconTypes.DEFAULT);
|
||||
} else if (c.password && (!c.username || (c.username && c.username.readOnly))) {
|
||||
// Single password field
|
||||
kpxcIcons.addIcon(c.password, kpxcIcons.iconTypes.DEFAULT);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const addPasswordIcons = async function(c) {
|
||||
// Show password icons also with forms without any username field
|
||||
if (kpxc.settings.usePasswordGeneratorIcons
|
||||
&& ((c.username && c.password) || (!c.username && c.passwordInputs.length > 0))) {
|
||||
for (const input of c.passwordInputs) {
|
||||
kpxcIcons.addIcon(input, kpxcIcons.iconTypes.PASSWORD);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const addTOTPIcons = async function(c) {
|
||||
if (c.totp && kpxc.settings.showOTPIcon) {
|
||||
kpxcIcons.addIcon(c.totp, kpxcIcons.iconTypes.TOTP);
|
||||
}
|
||||
};
|
||||
|
||||
await Promise.all([
|
||||
await addUsernameIcons(form),
|
||||
await addPasswordIcons(form),
|
||||
await addTOTPIcons(form)
|
||||
]);
|
||||
};
|
||||
|
||||
kpxcIcons.calculateIconOffset = function(field, size) {
|
||||
const offset = Math.floor((field.offsetHeight / 2) - (size / 2) - 1);
|
||||
return (offset < 0) ? 0 : offset;
|
||||
};
|
||||
|
||||
// Delete all icons that have been hidden from the page view
|
||||
kpxcIcons.deleteAllHiddenIcons = function() {
|
||||
kpxcIcons.deleteIcons(kpxcUsernameIcons.icons);
|
||||
kpxcIcons.deleteIcons(kpxcPasswordIcons.icons);
|
||||
kpxcIcons.deleteIcons(kpxcTOTPIcons.icons);
|
||||
};
|
||||
|
||||
// Delete hidden icons from the list
|
||||
kpxcIcons.deleteIcons = function(iconList) {
|
||||
const deletedIcons = [];
|
||||
for (const icon of iconList) {
|
||||
if (icon.inputField && !kpxcFields.isVisible(icon.inputField)) {
|
||||
const index = iconList.indexOf(icon);
|
||||
icon.removeIcon();
|
||||
iconList.splice(index, 1);
|
||||
deletedIcons.push(icon.inputField);
|
||||
|
||||
// Delete the input field from detected fields so the icon can be detected again
|
||||
const inputFieldIndex = kpxc.inputs.indexOf(icon.inputField);
|
||||
if (inputFieldIndex >= 0) {
|
||||
kpxc.inputs.splice(inputFieldIndex, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Remove the same icons from kpxcIcons.icons array
|
||||
for (const input of deletedIcons) {
|
||||
const index = kpxcIcons.icons.findIndex(e => e.field === input);
|
||||
if (index >= 0) {
|
||||
kpxcIcons.icons.splice(index, 1);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Initializes all icons needed to be shown
|
||||
kpxcIcons.initIcons = async function(combinations = []) {
|
||||
if (combinations.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const form of kpxcForm.savedForms) {
|
||||
await kpxcIcons.addIconsFromForm(form);
|
||||
}
|
||||
|
||||
// Check for other combinations that are not in any form,
|
||||
// or there's a form that wasn't present in savedForms (and it's not null)
|
||||
for (const c of combinations) {
|
||||
if (!c.form || (c.form && !kpxcForm.savedForms.some(sf => sf.form === c.form))) {
|
||||
await kpxcIcons.addIconsFromForm(c);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
kpxcIcons.hasIcon = function(field) {
|
||||
return !field ? false : kpxcIcons.icons.some(i => i.field === field);
|
||||
};
|
||||
|
||||
kpxcIcons.monitorIconPosition = function(iconClass) {
|
||||
// Handle icon position on resize
|
||||
window.addEventListener('resize', function(e) {
|
||||
kpxcIcons.updateIconPosition(iconClass);
|
||||
});
|
||||
|
||||
// Handle icon position on scroll
|
||||
window.addEventListener('scroll', function(e) {
|
||||
kpxcIcons.updateIconPosition(iconClass);
|
||||
});
|
||||
|
||||
window.addEventListener('transitionend', function(e) {
|
||||
if (matchesWithNodeName(e.target, 'INPUT') || matchesWithNodeName(e.target, 'TEXTAREA')) {
|
||||
kpxcIcons.updateIconPosition(iconClass);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
kpxcIcons.setIconPosition = function(icon, field, rtl = false, segmented = false) {
|
||||
const rect = field.getBoundingClientRect();
|
||||
const size = Number(icon.getAttribute('size'));
|
||||
const offset = kpxcIcons.calculateIconOffset(field, size);
|
||||
const zoom = kpxcUI.bodyStyle.zoom || 1;
|
||||
let left = kpxcUI.getRelativeLeftPosition(rect) / zoom;
|
||||
let top = kpxcUI.getRelativeTopPosition(rect) / zoom;
|
||||
|
||||
// Add more space for the icon to show it at the right side of the field if TOTP fields are segmented
|
||||
if (segmented) {
|
||||
left += size + 10;
|
||||
}
|
||||
|
||||
// Adjusts the icon offset for certain sites
|
||||
const iconOffset = kpxcSites.iconOffset(left, top, size, field?.getLowerCaseAttribute('type'));
|
||||
if (iconOffset) {
|
||||
left = iconOffset[0];
|
||||
top = iconOffset[1];
|
||||
}
|
||||
|
||||
const scrollTop = kpxcUI.getScrollTop() / zoom;
|
||||
const scrollLeft = kpxcUI.getScrollLeft() / zoom;
|
||||
icon.style.top = Pixels(top + scrollTop + offset + 1);
|
||||
icon.style.left = rtl
|
||||
? Pixels(left + scrollLeft + offset)
|
||||
: Pixels(left + scrollLeft + field.offsetWidth - size - offset);
|
||||
};
|
||||
|
||||
// Sets the icons to corresponding database lock status
|
||||
kpxcIcons.switchIcons = async function() {
|
||||
const uuid = await sendMessage('page_get_login_id');
|
||||
|
||||
kpxcUsernameIcons.switchIcon(kpxc.databaseState, uuid);
|
||||
kpxcPasswordIcons.switchIcon(kpxc.databaseState, uuid);
|
||||
kpxcTOTPIcons.switchIcon(kpxc.databaseState, uuid);
|
||||
};
|
||||
|
||||
/**
|
||||
* Detects if the input field appears or disappears -> show/hide the icon
|
||||
* - boundingClientRect with slightly (< -10) negative values -> hidden
|
||||
* - intersectionRatio === 0 -> hidden
|
||||
* - isIntersecting === false -> hidden
|
||||
* - intersectionRatio > 0 -> shown
|
||||
* - isIntersecting === true -> shown
|
||||
*/
|
||||
kpxcIcons.updateFromIntersectionObserver = function(iconClass, entries) {
|
||||
for (const entry of entries) {
|
||||
const rect = DOMRectToArray(entry.boundingClientRect);
|
||||
|
||||
if ((entry.intersectionRatio === 0 && !entry.isIntersecting) || (rect.some(x => x < -10))) {
|
||||
iconClass.icon.style.display = 'none';
|
||||
} else if (entry.intersectionRatio > 0 && entry.isIntersecting) {
|
||||
iconClass.icon.style.display = 'block';
|
||||
|
||||
// Wait for possible DOM animations
|
||||
setTimeout(() => {
|
||||
kpxcIcons.setIconPosition(iconClass.icon, entry.target, iconClass.rtl, iconClass.segmented);
|
||||
}, 400);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
kpxcIcons.updateIconPosition = function(iconClass) {
|
||||
if (iconClass.inputField && iconClass.icon) {
|
||||
kpxcIcons.setIconPosition(iconClass.icon, iconClass.inputField, iconClass.rtl, iconClass.segmented);
|
||||
}
|
||||
};
|
||||
|
||||
const DOMRectToArray = function (domRect) {
|
||||
return [
|
||||
domRect.bottom,
|
||||
domRect.height,
|
||||
domRect.left,
|
||||
domRect.right,
|
||||
domRect.top,
|
||||
domRect.width,
|
||||
domRect.x,
|
||||
domRect.y,
|
||||
];
|
||||
};
|
||||
67
keepassxc-browser/content/icon.js
Normal file
67
keepassxc-browser/content/icon.js
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
'use strict';
|
||||
|
||||
const MIN_ICON_SIZE = 14;
|
||||
const MAX_ICON_SIZE = 24;
|
||||
|
||||
// Basic icon class
|
||||
class Icon {
|
||||
constructor(field, databaseState = DatabaseState.DISCONNECTED, segmented = false) {
|
||||
this.databaseState = databaseState;
|
||||
this.icon = null;
|
||||
this.inputField = null;
|
||||
this.rtl = kpxcUI.isRTL(field);
|
||||
this.segmented = segmented;
|
||||
|
||||
try {
|
||||
this.observer = new IntersectionObserver((entries) => {
|
||||
kpxcIcons.updateFromIntersectionObserver(this, entries);
|
||||
});
|
||||
} catch (err) {
|
||||
logError(err);
|
||||
}
|
||||
}
|
||||
|
||||
// Size the icon dynamically, but not greater than 24 or smaller than 14
|
||||
calculateIconSize(field) {
|
||||
return Math.max(Math.min(MAX_ICON_SIZE, field.offsetHeight - 4), MIN_ICON_SIZE);
|
||||
}
|
||||
|
||||
// Creates a wrapper div that has the icon in Shadow DOM
|
||||
createWrapper(styleSheetFilename) {
|
||||
const styleSheet = createStylesheet(styleSheetFilename);
|
||||
const wrapper = document.createElement('div');
|
||||
wrapper.style.all = 'unset';
|
||||
wrapper.style.display = 'none';
|
||||
|
||||
// Make sure the wrapper is positioned correctly without CSS styles affecting to it
|
||||
wrapper.style.position = 'absolute';
|
||||
wrapper.style.top = Pixels(0);
|
||||
wrapper.style.left = Pixels(0);
|
||||
|
||||
// Waits for stylesheet to load before displaying the element
|
||||
styleSheet.addEventListener('load', () => wrapper.style.display = 'block');
|
||||
|
||||
this.shadowRoot = wrapper.attachShadow({ mode: 'closed' });
|
||||
this.shadowRoot.append(styleSheet);
|
||||
this.shadowRoot.append(this.icon);
|
||||
document.body.append(wrapper);
|
||||
kpxcUI.observeWrapper(wrapper);
|
||||
}
|
||||
|
||||
removeIcon() {
|
||||
this.shadowRoot.removeChild(this.icon);
|
||||
document.body.removeChild(this.shadowRoot.host);
|
||||
}
|
||||
|
||||
switchIcon(state, uuid) {
|
||||
if (!this.icon) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (state === DatabaseState.UNLOCKED) {
|
||||
this.icon.style.filter = kpxc.credentials.length === 0 && !uuid ? 'saturate(0%)' : 'saturate(100%)';
|
||||
} else {
|
||||
this.icon.style.filter = 'saturate(0%)';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,116 +0,0 @@
|
|||
'use strict';
|
||||
|
||||
/**
|
||||
* @Object kpxcIcons
|
||||
* Icon handling.
|
||||
*/
|
||||
const kpxcIcons = {};
|
||||
kpxcIcons.icons = [];
|
||||
kpxcIcons.iconTypes = { USERNAME: 0, PASSWORD: 1, TOTP: 2 };
|
||||
|
||||
// Adds an icon to input field
|
||||
kpxcIcons.addIcon = async function(field, iconType) {
|
||||
if (!field || iconType < 0 || iconType > 2) {
|
||||
return;
|
||||
}
|
||||
|
||||
let iconSet = false;
|
||||
if (iconType === kpxcIcons.iconTypes.USERNAME && kpxcUsernameIcons.isValid(field)) {
|
||||
kpxcUsernameIcons.newIcon(field, kpxc.databaseState);
|
||||
iconSet = true;
|
||||
} else if (iconType === kpxcIcons.iconTypes.PASSWORD && kpxcPasswordIcons.isValid(field)) {
|
||||
kpxcPasswordIcons.newIcon(field, kpxc.databaseState);
|
||||
iconSet = true;
|
||||
} else if (iconType === kpxcIcons.iconTypes.TOTP && kpxcTOTPIcons.isValid(field)) {
|
||||
kpxcTOTPIcons.newIcon(field, kpxc.databaseState);
|
||||
iconSet = true;
|
||||
}
|
||||
|
||||
if (iconSet) {
|
||||
kpxcIcons.icons.push({
|
||||
field: field,
|
||||
iconType: iconType
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Adds all icons from a form struct
|
||||
kpxcIcons.addIconsFromForm = async function(form) {
|
||||
const addUsernameIcons = async function(c) {
|
||||
if (kpxc.settings.showLoginFormIcon && await kpxc.passwordFilledWithExceptions(c) === false) {
|
||||
// Special case where everything else has been hidden, but a single password field is now displayed.
|
||||
// For example PayPal and Amazon is handled like this.
|
||||
if (c.username && !c.password && c.passwordInputs.length === 1) {
|
||||
kpxcIcons.addIcon(c.passwordInputs[0], kpxcIcons.iconTypes.USERNAME);
|
||||
}
|
||||
|
||||
if (c.username && !c.username.readOnly) {
|
||||
kpxcIcons.addIcon(c.username, kpxcIcons.iconTypes.USERNAME);
|
||||
} else if (c.password && (!c.username || (c.username && c.username.readOnly))) {
|
||||
// Single password field
|
||||
kpxcIcons.addIcon(c.password, kpxcIcons.iconTypes.USERNAME);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const addPasswordIcons = async function(c) {
|
||||
// Show password icons also with forms without any username field
|
||||
if (kpxc.settings.usePasswordGeneratorIcons
|
||||
&& ((c.username && c.password) || (!c.username && c.passwordInputs.length > 0))) {
|
||||
for (const input of c.passwordInputs) {
|
||||
kpxcIcons.addIcon(input, kpxcIcons.iconTypes.PASSWORD);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const addTOTPIcons = async function(c) {
|
||||
if (c.totp && kpxc.settings.showOTPIcon) {
|
||||
kpxcIcons.addIcon(c.totp, kpxcIcons.iconTypes.TOTP);
|
||||
}
|
||||
};
|
||||
|
||||
await Promise.all([
|
||||
await addUsernameIcons(form),
|
||||
await addPasswordIcons(form),
|
||||
await addTOTPIcons(form)
|
||||
]);
|
||||
};
|
||||
|
||||
// Delete all icons that have been hidden from the page view
|
||||
kpxcIcons.deleteHiddenIcons = function() {
|
||||
kpxcUsernameIcons.deleteHiddenIcons();
|
||||
kpxcPasswordIcons.deleteHiddenIcons();
|
||||
kpxcTOTPIcons.deleteHiddenIcons();
|
||||
};
|
||||
|
||||
// Initializes all icons needed to be shown
|
||||
kpxcIcons.initIcons = async function(combinations = []) {
|
||||
if (combinations.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const form of kpxcForm.savedForms) {
|
||||
await kpxcIcons.addIconsFromForm(form);
|
||||
}
|
||||
|
||||
// Check for other combinations that are not in any form,
|
||||
// or there's a form that wasn't present in savedForms (and it's not null)
|
||||
for (const c of combinations) {
|
||||
if (!c.form || (c.form && !kpxcForm.savedForms.some(sf => sf.form === c.form))) {
|
||||
await kpxcIcons.addIconsFromForm(c);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
kpxcIcons.hasIcon = function(field) {
|
||||
return !field ? false : kpxcIcons.icons.some(i => i.field === field);
|
||||
};
|
||||
|
||||
// Sets the icons to corresponding database lock status
|
||||
kpxcIcons.switchIcons = async function() {
|
||||
const uuid = await sendMessage('page_get_login_id');
|
||||
|
||||
kpxcUsernameIcons.switchIcon(kpxc.databaseState, uuid);
|
||||
kpxcPasswordIcons.switchIcon(kpxc.databaseState, uuid);
|
||||
kpxcTOTPIcons.switchIcon(kpxc.databaseState, uuid);
|
||||
};
|
||||
|
|
@ -939,9 +939,14 @@ browser.runtime.onMessage.addListener(async function(req, sender) {
|
|||
kpxcFill.fillAttributeToActiveElementWith(req.args);
|
||||
} else if (req.action === 'frame_message') {
|
||||
if (req.args?.[0] === 'frame_request_to_frames' && window.self !== window.top) {
|
||||
// Handle message from top window in iframe
|
||||
kpxcCustomLoginFieldsBanner.handleParentWindowMessage(req.args);
|
||||
} else if (req.args?.[0] === 'frame_request_to_parent' && window.self === window.top) {
|
||||
// Handle message from iframe in top window
|
||||
kpxcCustomLoginFieldsBanner.handleTopWindowMessage(req.args);
|
||||
} else if (req.args?.[0] === 'notification_from_frame' && window.self === window.top) {
|
||||
// Handle notification from iframe in top window
|
||||
kpxcUI.createNotification(req?.args[1], req?.args[2]);
|
||||
}
|
||||
} else if (req.action === 'ignore_site') {
|
||||
kpxc.ignoreSite(req.args);
|
||||
|
|
|
|||
|
|
@ -266,7 +266,7 @@ kpxcObserverHelper.handleObserverAdd = async function(target) {
|
|||
kpxc.prepareCredentials();
|
||||
}
|
||||
|
||||
kpxcIcons.deleteHiddenIcons();
|
||||
kpxcIcons.deleteAllHiddenIcons();
|
||||
};
|
||||
|
||||
// Removes monitored elements
|
||||
|
|
@ -280,7 +280,7 @@ kpxcObserverHelper.handleObserverRemove = function(target) {
|
|||
return;
|
||||
}
|
||||
|
||||
kpxcIcons.deleteHiddenIcons();
|
||||
kpxcIcons.deleteAllHiddenIcons();
|
||||
};
|
||||
|
||||
// Handles CSS transitionend event
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@
|
|||
attestationObject: kpxcBase64ToArrayBuffer(publicKey.response.attestationObject),
|
||||
clientDataJSON: kpxcBase64ToArrayBuffer(publicKey.response.clientDataJSON),
|
||||
getAuthenticatorData: () => kpxcBase64ToArrayBuffer(publicKey.response?.authenticatorData),
|
||||
getPublicKey: () => null,
|
||||
getPublicKey: () => publicKey.response?.publicKey ? publicKey.response?.publicKey : null,
|
||||
getPublicKeyAlgorithm: () => publicKey.response?.publicKeyAlgorithm,
|
||||
getTransports: () => [ 'internal' ]
|
||||
};
|
||||
|
|
|
|||
|
|
@ -11,10 +11,6 @@ kpxcPasswordIcons.switchIcon = function(state) {
|
|||
kpxcPasswordIcons.icons.forEach(u => u.switchIcon(state));
|
||||
};
|
||||
|
||||
kpxcPasswordIcons.deleteHiddenIcons = function() {
|
||||
kpxcUI.deleteHiddenIcons(kpxcPasswordIcons.icons);
|
||||
};
|
||||
|
||||
kpxcPasswordIcons.isValid = function(field) {
|
||||
if (!field
|
||||
|| field.readOnly
|
||||
|
|
@ -34,7 +30,7 @@ class PasswordIcon extends Icon {
|
|||
this.nextFieldExists = false;
|
||||
|
||||
this.initField(field);
|
||||
kpxcUI.monitorIconPosition(this);
|
||||
kpxcIcons.monitorIconPosition(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -93,7 +89,7 @@ PasswordIcon.prototype.createIcon = function(field) {
|
|||
icon.addEventListener('mousedown', ev => ev.stopPropagation());
|
||||
icon.addEventListener('mouseup', ev => ev.stopPropagation());
|
||||
|
||||
kpxcUI.setIconPosition(icon, field, this.rtl);
|
||||
kpxcIcons.setIconPosition(icon, field, this.rtl);
|
||||
this.icon = icon;
|
||||
this.createWrapper('css/pwgen.css');
|
||||
if (kpxcFields.popoverSupported) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
const ignoreRegex = /(bank|coupon|postal|user|zip|promo).*code|(en|de)code(d|r)*|comment|author|error/i;
|
||||
const ignoreRegex = /(bank|coupon|post(al)?|user|zip|promo).*code|(en|de)code(d|r)*|comment|author|error/i;
|
||||
const ignoredTypes = [ 'email', 'password', 'username' ];
|
||||
const allowedInputTypes = [ 'number', 'password', 'tel', 'text' ];
|
||||
|
||||
|
|
@ -36,10 +36,6 @@ kpxcTOTPIcons.switchIcon = function(state, uuid) {
|
|||
kpxcTOTPIcons.icons.forEach(u => u.switchIcon(state, uuid));
|
||||
};
|
||||
|
||||
kpxcTOTPIcons.deleteHiddenIcons = function() {
|
||||
kpxcUI.deleteHiddenIcons(kpxcTOTPIcons.icons);
|
||||
};
|
||||
|
||||
kpxcTOTPIcons.autoCompleteIsOneTimeCode = function(field) {
|
||||
if (!field) {
|
||||
return false;
|
||||
|
|
@ -109,7 +105,7 @@ class TOTPFieldIcon extends Icon {
|
|||
super(field, databaseState, segmented);
|
||||
|
||||
this.initField(field, segmented);
|
||||
kpxcUI.monitorIconPosition(this);
|
||||
kpxcIcons.monitorIconPosition(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -185,7 +181,7 @@ TOTPFieldIcon.prototype.createIcon = function(field, segmented = false) {
|
|||
icon.addEventListener('mousedown', ev => ev.stopPropagation());
|
||||
icon.addEventListener('mouseup', ev => ev.stopPropagation());
|
||||
|
||||
kpxcUI.setIconPosition(icon, field, this.rtl, segmented);
|
||||
kpxcIcons.setIconPosition(icon, field, this.rtl, segmented);
|
||||
this.icon = icon;
|
||||
this.createWrapper('css/totp.css');
|
||||
if (kpxcFields.popoverSupported) {
|
||||
|
|
|
|||
|
|
@ -7,9 +7,6 @@ const MIN_INPUT_FIELD_OFFSET_WIDTH = 60;
|
|||
const MIN_OPACITY = 0.7;
|
||||
const MAX_OPACITY = 1;
|
||||
|
||||
const MIN_ICON_SIZE = 14;
|
||||
const MAX_ICON_SIZE = 24;
|
||||
|
||||
const BLUE_BUTTON = 'kpxc-button kpxc-blue-button';
|
||||
const GREEN_BUTTON = 'kpxc-button kpxc-green-button';
|
||||
const ORANGE_BUTTON = 'kpxc-button kpxc-orange-button';
|
||||
|
|
@ -32,69 +29,6 @@ const $ = function(elem) {
|
|||
return document.querySelector(elem);
|
||||
};
|
||||
|
||||
// Basic icon class
|
||||
class Icon {
|
||||
constructor(field, databaseState = DatabaseState.DISCONNECTED, segmented = false) {
|
||||
this.databaseState = databaseState;
|
||||
this.icon = null;
|
||||
this.inputField = null;
|
||||
this.rtl = kpxcUI.isRTL(field);
|
||||
this.segmented = segmented;
|
||||
|
||||
try {
|
||||
this.observer = new IntersectionObserver((entries) => {
|
||||
kpxcUI.updateFromIntersectionObserver(this, entries);
|
||||
});
|
||||
} catch (err) {
|
||||
logError(err);
|
||||
}
|
||||
}
|
||||
|
||||
// Size the icon dynamically, but not greater than 24 or smaller than 14
|
||||
calculateIconSize(field) {
|
||||
return Math.max(Math.min(MAX_ICON_SIZE, field.offsetHeight - 4), MIN_ICON_SIZE);
|
||||
}
|
||||
|
||||
// Creates a wrapper div that has the icon in Shadow DOM
|
||||
createWrapper(styleSheetFilename) {
|
||||
const styleSheet = createStylesheet(styleSheetFilename);
|
||||
const wrapper = document.createElement('div');
|
||||
wrapper.style.all = 'unset';
|
||||
wrapper.style.display = 'none';
|
||||
|
||||
// Make sure the wrapper is positioned correctly without CSS styles affecting to it
|
||||
wrapper.style.position = 'absolute';
|
||||
wrapper.style.top = Pixels(0);
|
||||
wrapper.style.left = Pixels(0);
|
||||
|
||||
// Waits for stylesheet to load before displaying the element
|
||||
styleSheet.addEventListener('load', () => wrapper.style.display = 'block');
|
||||
|
||||
this.shadowRoot = wrapper.attachShadow({ mode: 'closed' });
|
||||
this.shadowRoot.append(styleSheet);
|
||||
this.shadowRoot.append(this.icon);
|
||||
document.body.append(wrapper);
|
||||
kpxcUI.observeWrapper(wrapper);
|
||||
}
|
||||
|
||||
switchIcon(state, uuid) {
|
||||
if (!this.icon) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (state === DatabaseState.UNLOCKED) {
|
||||
this.icon.style.filter = kpxc.credentials.length === 0 && !uuid ? 'saturate(0%)' : 'saturate(100%)';
|
||||
} else {
|
||||
this.icon.style.filter = 'saturate(0%)';
|
||||
}
|
||||
}
|
||||
|
||||
removeIcon() {
|
||||
this.shadowRoot.removeChild(this.icon);
|
||||
document.body.removeChild(this.shadowRoot.host);
|
||||
}
|
||||
}
|
||||
|
||||
const kpxcUI = {};
|
||||
kpxcUI.mouseDown = false;
|
||||
|
||||
|
|
@ -131,63 +65,6 @@ kpxcUI.createElement = function(type, classes, attributes, textContent) {
|
|||
return element;
|
||||
};
|
||||
|
||||
kpxcUI.monitorIconPosition = function(iconClass) {
|
||||
// Handle icon position on resize
|
||||
window.addEventListener('resize', function(e) {
|
||||
kpxcUI.updateIconPosition(iconClass);
|
||||
});
|
||||
|
||||
// Handle icon position on scroll
|
||||
window.addEventListener('scroll', function(e) {
|
||||
kpxcUI.updateIconPosition(iconClass);
|
||||
});
|
||||
|
||||
window.addEventListener('transitionend', function(e) {
|
||||
if (matchesWithNodeName(e.target, 'INPUT') || matchesWithNodeName(e.target, 'TEXTAREA')) {
|
||||
kpxcUI.updateIconPosition(iconClass);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
kpxcUI.updateIconPosition = function(iconClass) {
|
||||
if (iconClass.inputField && iconClass.icon) {
|
||||
kpxcUI.setIconPosition(iconClass.icon, iconClass.inputField, iconClass.rtl, iconClass.segmented);
|
||||
}
|
||||
};
|
||||
|
||||
kpxcUI.calculateIconOffset = function(field, size) {
|
||||
const offset = Math.floor((field.offsetHeight / 2) - (size / 2) - 1);
|
||||
return (offset < 0) ? 0 : offset;
|
||||
};
|
||||
|
||||
kpxcUI.setIconPosition = function(icon, field, rtl = false, segmented = false) {
|
||||
const rect = field.getBoundingClientRect();
|
||||
const size = Number(icon.getAttribute('size'));
|
||||
const offset = kpxcUI.calculateIconOffset(field, size);
|
||||
const zoom = kpxcUI.bodyStyle.zoom || 1;
|
||||
let left = kpxcUI.getRelativeLeftPosition(rect) / zoom;
|
||||
let top = kpxcUI.getRelativeTopPosition(rect) / zoom;
|
||||
|
||||
// Add more space for the icon to show it at the right side of the field if TOTP fields are segmented
|
||||
if (segmented) {
|
||||
left += size + 10;
|
||||
}
|
||||
|
||||
// Adjusts the icon offset for certain sites
|
||||
const iconOffset = kpxcSites.iconOffset(left, top, size, field?.getLowerCaseAttribute('type'));
|
||||
if (iconOffset) {
|
||||
left = iconOffset[0];
|
||||
top = iconOffset[1];
|
||||
}
|
||||
|
||||
const scrollTop = kpxcUI.getScrollTop() / zoom;
|
||||
const scrollLeft = kpxcUI.getScrollLeft() / zoom;
|
||||
icon.style.top = Pixels(top + scrollTop + offset + 1);
|
||||
icon.style.left = rtl
|
||||
? Pixels(left + scrollLeft + offset)
|
||||
: Pixels(left + scrollLeft + field.offsetWidth - size - offset);
|
||||
};
|
||||
|
||||
kpxcUI.getScrollTop = function() {
|
||||
return document.defaultView?.scrollY ?? document.scrollingElement?.scrollTop ?? 0;
|
||||
};
|
||||
|
|
@ -204,32 +81,6 @@ kpxcUI.getRelativeTopPosition = function(rect) {
|
|||
return kpxcUI.bodyStyle.position.toLowerCase() === 'relative' ? rect.top - kpxcUI.bodyRect.top : rect.top;
|
||||
};
|
||||
|
||||
kpxcUI.deleteHiddenIcons = function(iconList) {
|
||||
const deletedIcons = [];
|
||||
for (const icon of iconList) {
|
||||
if (icon.inputField && !kpxcFields.isVisible(icon.inputField)) {
|
||||
const index = iconList.indexOf(icon);
|
||||
icon.removeIcon();
|
||||
iconList.splice(index, 1);
|
||||
deletedIcons.push(icon.inputField);
|
||||
|
||||
// Delete the input field from detected fields so the icon can be detected again
|
||||
const inputFieldIndex = kpxc.inputs.indexOf(icon.inputField);
|
||||
if (inputFieldIndex >= 0) {
|
||||
kpxc.inputs.splice(inputFieldIndex, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Remove the same icons from kpxcIcons.icons array
|
||||
for (const input of deletedIcons) {
|
||||
const index = kpxcIcons.icons.findIndex(e => e.field === input);
|
||||
if (index >= 0) {
|
||||
kpxcIcons.icons.splice(index, 1);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
kpxcUI.isRTL = function(field) {
|
||||
if (!field) {
|
||||
return false;
|
||||
|
|
@ -300,41 +151,22 @@ kpxcUI.makeBannerDraggable = function(banner) {
|
|||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Detects if the input field appears or disappears -> show/hide the icon
|
||||
* - boundingClientRect with slightly (< -10) negative values -> hidden
|
||||
* - intersectionRatio === 0 -> hidden
|
||||
* - isIntersecting === false -> hidden
|
||||
* - intersectionRatio > 0 -> shown
|
||||
* - isIntersecting === true -> shown
|
||||
*/
|
||||
kpxcUI.updateFromIntersectionObserver = function(iconClass, entries) {
|
||||
for (const entry of entries) {
|
||||
const rect = DOMRectToArray(entry.boundingClientRect);
|
||||
|
||||
if ((entry.intersectionRatio === 0 && !entry.isIntersecting) || (rect.some(x => x < -10))) {
|
||||
iconClass.icon.style.display = 'none';
|
||||
} else if (entry.intersectionRatio > 0 && entry.isIntersecting) {
|
||||
iconClass.icon.style.display = 'block';
|
||||
|
||||
// Wait for possible DOM animations
|
||||
setTimeout(() => {
|
||||
kpxcUI.setIconPosition(iconClass.icon, entry.target, iconClass.rtl, iconClass.segmented);
|
||||
}, 400);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a self-disappearing notification banner to DOM
|
||||
* @param {string} type Notification type: (success, info, warning, error)
|
||||
* @param {string} message The message shown
|
||||
*/
|
||||
kpxcUI.createNotification = function(type, message) {
|
||||
kpxcUI.createNotification = async function(type, message) {
|
||||
if (!kpxc.settings.showNotifications || !type || !message) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Send the notification to top window from iframe
|
||||
if (window.self !== window.top) {
|
||||
await sendMessage('frame_message', [ 'notification_from_frame', type, message ]);
|
||||
return;
|
||||
}
|
||||
|
||||
// Removes notification from the body element
|
||||
const removeNotification = function() {
|
||||
// Catch cross-domain exception
|
||||
|
|
@ -431,12 +263,12 @@ kpxcUI.createPageObserver = function() {
|
|||
}
|
||||
});
|
||||
|
||||
kpxcUI.pageObserver.observe(document.documentElement, OBSERVER_OPTIONS);
|
||||
kpxcUI.pageObserver.observe(document.body, OBSERVER_OPTIONS);
|
||||
};
|
||||
|
||||
const DOMRectToArray = function(domRect) {
|
||||
return [ domRect.bottom, domRect.height, domRect.left, domRect.right, domRect.top, domRect.width, domRect.x, domRect.y ];
|
||||
if (document?.documentElement) {
|
||||
kpxcUI.pageObserver.observe(document.documentElement, OBSERVER_OPTIONS);
|
||||
}
|
||||
if (document?.body) {
|
||||
kpxcUI.pageObserver.observe(document.body, OBSERVER_OPTIONS);
|
||||
}
|
||||
};
|
||||
|
||||
const initColorTheme = function(elem) {
|
||||
|
|
|
|||
|
|
@ -12,10 +12,6 @@ kpxcUsernameIcons.switchIcon = function(state) {
|
|||
kpxcUsernameIcons.icons.forEach(u => u.switchIcon(state));
|
||||
};
|
||||
|
||||
kpxcUsernameIcons.deleteHiddenIcons = function() {
|
||||
kpxcUI.deleteHiddenIcons(kpxcUsernameIcons.icons);
|
||||
};
|
||||
|
||||
kpxcUsernameIcons.isValid = function(field) {
|
||||
if (!field
|
||||
|| field.offsetWidth < MIN_INPUT_FIELD_OFFSET_WIDTH
|
||||
|
|
@ -34,7 +30,7 @@ class UsernameFieldIcon extends Icon {
|
|||
super(field, databaseState);
|
||||
|
||||
this.initField(field);
|
||||
kpxcUI.monitorIconPosition(this);
|
||||
kpxcIcons.monitorIconPosition(this);
|
||||
}
|
||||
|
||||
switchIcon(state) {
|
||||
|
|
@ -113,7 +109,7 @@ UsernameFieldIcon.prototype.createIcon = function(field) {
|
|||
icon.addEventListener('mousedown', ev => ev.stopPropagation());
|
||||
icon.addEventListener('mouseup', ev => ev.stopPropagation());
|
||||
|
||||
kpxcUI.setIconPosition(icon, field, this.rtl);
|
||||
kpxcIcons.setIconPosition(icon, field, this.rtl);
|
||||
this.icon = icon;
|
||||
this.createWrapper('css/username.css');
|
||||
if (kpxcFields.popoverSupported) {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"manifest_version": 3,
|
||||
"name": "KeePassXC-Browser",
|
||||
"version": "1.9.10",
|
||||
"version_name": "1.9.10",
|
||||
"version": "1.9.11",
|
||||
"version_name": "1.9.11",
|
||||
"minimum_chrome_version": "93",
|
||||
"description": "__MSG_extensionDescription__",
|
||||
"author": "KeePassXC Team",
|
||||
|
|
@ -53,7 +53,8 @@
|
|||
"content/fields.js",
|
||||
"content/fill.js",
|
||||
"content/form.js",
|
||||
"content/icons.js",
|
||||
"content/icon.js",
|
||||
"content/icon-handler.js",
|
||||
"content/keepassxc-browser.js",
|
||||
"content/observer-helper.js",
|
||||
"content/pwgen.js",
|
||||
|
|
|
|||
|
|
@ -352,8 +352,8 @@
|
|||
|
||||
<!-- Number of allowed redirects -->
|
||||
<div class="form-group w-50 pb-2">
|
||||
<label id="redirectAllowanceLabel" class="font-weight-normal" for="redirectAllowance" data-i18n="optionsRedirectAllowance" data-i18n-placeholder="1"></label>
|
||||
<input type="range" class="form-range" id="redirectAllowance" name="redirectAllowance" min="1" max="11" step="1" value="1">
|
||||
<label id="redirectAllowanceLabel" class="font-weight-normal" for="redirectAllowance" data-i18n="optionsRedirectAllowance" data-i18n-placeholder="3"></label>
|
||||
<input type="range" class="form-range" id="redirectAllowance" name="redirectAllowance" min="1" max="11" step="1" value="3">
|
||||
<div class="form-text help-text" data-i18n="optionsRedirectAllowanceHelpText"></div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
4
package-lock.json
generated
4
package-lock.json
generated
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "keepassxc-browser",
|
||||
"version": "1.9.10",
|
||||
"version": "1.9.11",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "keepassxc-browser",
|
||||
"version": "1.9.10",
|
||||
"version": "1.9.11",
|
||||
"license": "GPL-3.0",
|
||||
"dependencies": {
|
||||
"@npmcli/fs": "^2.1.0"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "keepassxc-browser",
|
||||
"version": "1.9.10",
|
||||
"version": "1.9.11",
|
||||
"description": "KeePassXC-Browser",
|
||||
"main": "build.js",
|
||||
"devDependencies": {
|
||||
|
|
|
|||
|
|
@ -62,6 +62,8 @@ async function testTotpFields() {
|
|||
[ '', { id: '2fa', type: 'text', maxLength: '12' }, 'Ignore if field maxLength too long', false ],
|
||||
[ '', { id: 'promocode', type: 'text', }, 'promocode id is not acceptable', false ],
|
||||
[ '', { id: 'Promotional Code', type: 'text', }, 'Promotional Code id is not acceptable', false ],
|
||||
[ '', { id: 'postcode', type: 'text', }, 'postcode id is not acceptable', false ],
|
||||
[ '', { id: 'postalcode', type: 'text', }, 'postalcode id is not acceptable', false ],
|
||||
[ '', { id: 'encode', type: 'text', }, 'encode id is not acceptable', false ],
|
||||
[ '', { id: 'encodedText', type: 'text', }, 'encodedText is not acceptable', false ],
|
||||
[ '', { id: 'decoder', type: 'text', }, 'decoder id is not acceptable', false ],
|
||||
|
|
|
|||
Loading…
Reference in a new issue