Make all display strings translatable

This patch enables localization of all previously hard-coded display strings.
This commit is contained in:
Sami Vänttinen 2018-09-30 00:37:16 +03:00 committed by Janek Bevendorff
parent 0231f2465a
commit dc4ad0c27d
16 changed files with 1016 additions and 271 deletions

View file

@ -0,0 +1,742 @@
{
"extensionDescription": {
"message": "KeePassXC integration for modern web browsers",
"description": "Name of the extension."
},
"contextMenuFillUsernameAndPassword": {
"message": "Fill Username and Password",
"description": "Context menu item for filling both username and password."
},
"contextMenuFillPassword": {
"message": "Fill Password Only",
"description": "Context menu item for filling password."
},
"contextMenuFillTOTP": {
"message": "Insert TOTP",
"description": "Context menu item for filling Time-based One Time Password."
},
"contextMenuShowPasswordGeneratorIcons": {
"message": "Show Password Generator Icons",
"description": "Show password generator icon on every password input field."
},
"contextMenuSaveCredentials": {
"message": "Save credentials",
"description": "Save credentials using the extension popup icon."
},
"rememberCredentialsPopup": {
"message": "Create or modify the credentials by clicking on the extension icon.",
"description": "Notification text when saving credentials from the context menu."
},
"multipleCredentialsDetected": {
"message": "HTTP authentication with multiple credentials detected. Click on the extension icon to choose the correct one.",
"description": "Notification when HTTP Authentication has multiple credentials detected."
},
"errorMessageUnknown": {
"message": "Unknown error.",
"description": "Unknown error."
},
"errorMessageDatabaseNotOpened": {
"message": "Database not opened.",
"description": "Database not opened."
},
"errorMessageDatabaseHash": {
"message": "Database hash not received.",
"description": "Database hash not received."
},
"errorMessageClientPublicKey": {
"message": "Client public key not received.",
"description": "Client public key not received."
},
"errorMessageDecrypt": {
"message": "Cannot decrypt message.",
"description": "Cannot decrypt message."
},
"errorMessageTimeout": {
"message": "Timeout or not connected to KeePassXC.",
"description": "Timeout or not connected to KeePassXC."
},
"errorMessageCanceled": {
"message": "Action canceled or denied.",
"description": "Action canceled or denied."
},
"errorMessageEncrypt": {
"message": "Cannot encrypt message or public key not found. Is native messaging or support for your browser enabled in KeePassXC?",
"description": "Cannot encrypt message or public key not found. Is native messaging or support for your browser enabled in KeePassXC?"
},
"errorMessageAssociate": {
"message": "KeePassXC association failed, try again.",
"description": "KeePassXC association failed, try again."
},
"errorMessageKeyExchange": {
"message": "Key exchange was not successful.",
"description": "Key exchange was not successful."
},
"errorMessageEncryptionKey": {
"message": "Encryption key is not recognized.",
"description": "Encryption key is not recognized."
},
"errorMessageSavedDatabases": {
"message": "No saved databases found.",
"description": "No saved databases found."
},
"errorMessageIncorrectAction": {
"message": "Incorrect action.",
"description": "Incorrect action."
},
"errorMessageEmptyMessage": {
"message": "Empty message received.",
"description": "Empty message received."
},
"errorMessageNoURL": {
"message": "No URL provided.",
"description": "No URL provided."
},
"errorMessageNoLogins": {
"message": "No logins found.",
"description": "No logins found."
},
"passwordGeneratorPlaceholder": {
"message": "Generated password",
"description": "Input field placeholder for generated password."
},
"passwordGeneratorLabel": {
"message": "Also fill in the next password-field",
"description": "Checkbox text below the password generator input field."
},
"passwordGeneratorBits": {
"message": "??? Bits",
"description": "Bits of the generated password."
},
"passwordGeneratorTitle": {
"message": "Password Generator",
"description": "Password generator dialog title."
},
"passwordGeneratorGenerate": {
"message": "Generate",
"description": "Generate button text in password generator."
},
"passwordGeneratorCopy": {
"message": "Copy",
"description": "Copy button text in password generator."
},
"passwordGeneratorFillAndCopy": {
"message": "Fill and copy",
"description": "Fill and copy button text in password generator."
},
"passwordGeneratorErrorTooLong": {
"message": "Error:\nThe generated password is longer than the allowed length!\nIt has been cut to fit the length.\n\nPlease remember the new password!",
"description": "A warning text shown in the password generator."
},
"passwordGeneratorGenerateText": {
"message": "Generate password",
"description": "Password icon title text."
},
"passwordGeneratorError": {
"message": "Cannot receive generated password.<br />Is KeePassXC running?",
"description": "Password generator error text when KeePassXC is closed."
},
"defineDismiss": {
"message": "Dismiss",
"description": "Dismiss button text when choosing custom login fields."
},
"defineSkip": {
"message": "Skip",
"description": "Skip button text when choosing custom login fields."
},
"defineAgain": {
"message": "Again",
"description": "Again button text when choosing custom login fields."
},
"defineConfirm": {
"message": "Confirm",
"description": "Confirm button text when choosing custom login fields."
},
"defineAlreadySelected": {
"message": "login fields for this page are already selected and will be overwritten.",
"description": "A text shown when custom credentials fields are already set for the page."
},
"defineDiscard": {
"message": "Discard selection",
"description": "Discard selection button text when choosing custom login fields."
},
"defineStringField": {
"message": "String field #",
"description": "Text for string field."
},
"defineChooseUsername": {
"message": "1. Choose a username field",
"description": "Choosing a username field text when choosing custom login fields."
},
"defineChoosePassword": {
"message": "2. Now choose a password field",
"description": "Choosing a password field text when choosing custom login fields."
},
"defineConfirmSelection": {
"message": "3. Confirm selection",
"description": "Confirm a selection text when choosing custom login fields."
},
"defineHelpText": {
"message": "Please confirm your selection or choose more fields as <em>String fields</em>.",
"description": "Confirm a selection text when choosing custom login fields which contains string fields."
},
"username": {
"message": "Username",
"description": "General text for username."
},
"password": {
"message": "Password",
"description": "General text for password."
},
"credentialsNoUsername": {
"message": "- no username -",
"description": "Shown when no username is set in the credentials."
},
"credentialsNoLoginsFound": {
"message": "Error:\nNo logins found.",
"description": "Shown when no credentials are found for the current page."
},
"credentialsMultipleFound": {
"message": "Error:\nMore than one login was found in KeePassXC!\nPress the KeePassXC-Browser icon for more options.",
"description": "Alert message when trying to fill username and/or password when multiple credentials are found."
},
"credentialsNoUsernameFound": {
"message": "Error:\nNo credentials for the given username found.",
"description": "Alert message when no credentials are found for the given username."
},
"fieldsFill": {
"message": "Error:\nCannot find fields to fill in.",
"description": "Alert message when no fields are found to fill in."
},
"fieldsNoPasswordField": {
"message": "Error:\nUnable to find a password field.",
"description": "Message shown when no password fields are found."
},
"rememberNothingChanged": {
"message": "Error:\nCould not detect changed credentials.",
"description": "Message shown when trying to save credentials that haven't changed."
},
"popupTitle": {
"message": "KeePassXC - Popup",
"description": "Popup window title."
},
"popupSettingsText": {
"message": " Settings",
"description": "Popup Settings button text."
},
"popupChooseCredentialsText": {
"message": " Choose custom login fields for this page",
"description": "Popup credential choosing button text."
},
"popupConnectButton": {
"message": " Connect",
"description": "Popup Connect button text."
},
"popupReconnectButton": {
"message": " Reconnect",
"description": "Popup Reconnect button text."
},
"popupRedetectButton": {
"message": " Redetect login fields",
"description": "Popup Redetect login fields button text."
},
"popupReloadButton": {
"message": " Reload",
"description": "Popup Reload button text."
},
"popupReopenButton": {
"message": " Reopen database",
"description": "Popup reopen database button text."
},
"popupErrorEncountered": {
"message": "KeePassXC-Browser has encountered an error:",
"description": "A text shown above error message in the popup."
},
"popupUpdateAvailable": {
"message": "You use an old version of KeePassXC.",
"description": "Popup warning message about old version of KeePassXC."
},
"popupDownloadNewVersion": {
"message": "Please download the latest version from keepassxc.org",
"description": "Popup warning message link when KeePassXC version is not up-to-date."
},
"popupCheckingStatus": {
"message": " Checking status...",
"description": "Checking status message in popup."
},
"popupNotConfigured": {
"message": "KeePassXC-Browser has not been configured. Press the connect button to pair with KeePassXC.",
"description": "A popup message shown when the extension has not been connected to KeePassXC."
},
"popupNeedReconfigure": {
"message": "KeePassXC-Browser has been disconnected from KeePassXC.",
"description": "A popup message shown when the extension has been disconnected from KeePassXC."
},
"popupNeedReconfigureMessage": {
"message": "Press the reconnect button to establish a new connection.",
"description": "A popup message shown when reconnect is needed."
},
"popupConfiguredNotAssociated": {
"message": "KeePassXC-Browser has not yet connected to KeePassXC but has been configured using the identifier: $1",
"description": "A popup message shown when KeePassXC is not connected but configured."
},
"popupConfiguredAndAssociated": {
"message": "KeePassXC-Browser is connected to KeePassXC and has been configured using the following identifier: $1",
"description": "A popuo message when a connection to KeePassXC is succesful."
},
"popupRememberInfoText": {
"message": "Username or password changed! Save it?",
"description": "Popup message when username or password has changed."
},
"popupRememberSaving": {
"message": "Credentials will be saved in connected database with identifier $1",
"description": "A popup message when saving or updating credentials."
},
"popupRememberNewUsername": {
"message": "The following username is currently not saved: $1",
"description": "A popup message shown when a new username is detected when saving credentials."
},
"popupRememberUsernameExists": {
"message": "The credentials with the used username are marked bold: $1",
"description": "A popup message shown when a existing username is detected when saving credentials."
},
"popupRememberChooseCredentials": {
"message": "Please choose the credentials you want to update.",
"description": "A popup message shown choosing what credentials user wants to update."
},
"popupLoginText": {
"message": "Select the login information you would like to get entered into the page.",
"description": "A popup message shown when one or multiple credentials are present."
},
"popupFilterText": {
"message": "Filter:",
"description": "Text for login credentials quick filter."
},
"popupAuthText": {
"message": "Select the login information you would like to get logged in with.",
"description": "A popup message shown when doing HTTP Authentication with multiple credentials present."
},
"popupMultiplePasswordFields": {
"message": "More than one password field found on this page. Right-click one of the password fields, and choose one of:",
"description": "A popup message shown when web page has multiple password fields."
},
"popupURL": {
"message": "URL: ",
"description": "URL. Might not need any translation."
},
"popupUsername": {
"message": "Username: ",
"description": "A username field name shown on credential update."
},
"popupButtonNew": {
"message": " New",
"description": "New button text in popup when updating credentials."
},
"popupButtonUpdate": {
"message": " Update",
"description": "Update button text in popup when updating credentials."
},
"popupButtonDismiss": {
"message": " Dismiss",
"description": "Dismiss button text in popup when updating credentials."
},
"popupButtonIgnore": {
"message": "Never ask for this page",
"description": "Ignore button text in popup or in notification when updating credentials."
},
"popupButtonClose": {
"message": "Close",
"description": "Close button text in popup or in notification."
},
"popupButtonDismissHttpAuth": {
"message": " Dismiss and show the default authentication dialog",
"description": "Dismiss button text when in HTTP Authentication popup."
},
"optionsTitle": {
"message": "Settings | KeePassXC-Browser",
"description": "Options page title."
},
"optionsGeneralSettingsTab": {
"message": "General Settings",
"description": "General Settings tab text."
},
"optionsConnectedDatabasesTab": {
"message": "Connected Databases",
"description": "Connected Databases tab text."
},
"optionsCustomFieldsTab": {
"message": "Custom login fields",
"description": "Saved custom login fields tab text."
},
"optionsSitePreferencesTab": {
"message": "Site preferences",
"description": "Site preferences fields tab text."
},
"optionsAboutTab": {
"message": "About",
"description": "About tab text."
},
"optionsMenuGeneral": {
"message": "General",
"description": "General settings page header."
},
"optionsMenuConnectedDatabases": {
"message": "Connected Databases",
"description": "Connected Databases page header."
},
"optionsMenuCustomFields": {
"message": "Custom login fields",
"description": "Custom login fields page header."
},
"optionsMenuSitePreferences": {
"message": "Site preferences",
"description": "Site preferences page header."
},
"optionsMenuAbout": {
"message": "About",
"description": "About page header."
},
"optionsButtonSave": {
"message": " Save",
"description": "Save button text."
},
"optionsButtonConnect": {
"message": " Connect",
"description": "Connect button text."
},
"optionsButtonRemove": {
"message": " Remove",
"description": "Remove button text."
},
"optionsButtonAdd": {
"message": " Add",
"description": "Add button text."
},
"optionsButtonUpdate": {
"message": " Check for updates",
"description": "Check for updates button text."
},
"optionsButtonRemoveNow": {
"message": " Yes, remove now",
"description": "Confirm button text when removing database key or custom login fields."
},
"optionsButtonCancel": {
"message": " Cancel",
"description": "Cancel button text when removing database key or custom login fields."
},
"optionsLabelBlinkTime": {
"message": "Blink Time:",
"description": "Blink Time option text."
},
"optionsLabelRedirectOffset": {
"message": "Redirect Offset:",
"description": "Redirect Offset option text."
},
"optionsLabelRedirectAllowance": {
"message": "Maximum (Number of) Redirects:",
"description": "RMaximum (Number of) Redirects options text."
},
"optionsCheckboxUsePasswordGenerator": {
"message": "Activate password generator.",
"description": "Activate password generator checkbox text."
},
"optionsCheckboxAutoRetrieveCredentials": {
"message": "Automatically retrieve credentials.",
"description": "Automatically retrieve credentials checkbox text."
},
"optionsCheckboxAutoFillSingleEntry": {
"message": "Automatically fill in single-credential entries.",
"description": "Automatically fill-in single credential entry checkbox text."
},
"optionsCheckboxAutoCompleteUsernames": {
"message": "Activate autocomplete for username fields.",
"description": "Activate autocomplete for username fields checkbox text."
},
"optionsCheckboxShowNotifications": {
"message": "Show notifications.",
"description": "Show notifications checkbox text."
},
"optionsSaveDomainOnly": {
"message": "Save domain only.",
"description": "Save domain only checkbox text."
},
"optionsCheckboxShowLoginNotifications": {
"message": "Show a notification when new credentials can be saved to the database.",
"description": "Show login notifications checkbox text."
},
"optionsCheckboxAutoFillAndSend": {
"message": "Automatically fill in HTTP Basic Auth dialogs and submit them.",
"description": "Auto fill HTTP Basic Auth dialogs and send them checkbox text."
},
"optionsRadioText": {
"message": "Check for updates of KeePassXC:",
"description": "Text above radio buttons in the settings page."
},
"optionsRadioThreeDays": {
"message": " every 3 days",
"description": "Radio button text."
},
"optionsRadioWeek": {
"message": " every week",
"description": "Radio button text."
},
"optionsRadioMonth": {
"message": " every month",
"description": "Radio button text."
},
"optionsRadioNever": {
"message": " never",
"description": "Radio button text."
},
"optionsGeneralHelpText": {
"message": "If you just want to insert username and password into the fields where your focus is, press $1",
"description": "Context menu help text."
},
"optionsGeneralHelpTextSecond": {
"message": "If you only want to insert the password, just press $1",
"description": "Context menu help text."
},
"optionsCustomizeCommandsHelpText": {
"message": "You can customize these shortcuts on page $1",
"descriptions": "Shortcut customize help text."
},
"optionsBlinkTimeHelpText": {
"message": "Maximum time (ms) the icon should blink after detecting new credentials",
"description": "Blink Time option help text."
},
"optionsRedirectOffsetHelpText": {
"message": "Minimum time (ms) the icon should blink before deactivating due to page redirects.",
"description": "Redirect Offset option help text."
},
"optionsRedirectOffsetHelpTextSecond": {
"message": "-1 to only use blink time ignoring Maximum Redirects (old behavior)",
"description": "Redirect Offset option help text, second part."
},
"optionsRedirectAllowanceHelpText": {
"message": "How many pages should the tab cycle through after the redirect offset before deactivating the icon",
"description": "Redirect Allowance option help text."
},
"optionsUsePasswordGeneratorHelpText": {
"message": "Adds a button to password fields for generating a new password.",
"description": "Password Generator option help text."
},
"optionsUsePasswordGeneratorHelpTextSecond": {
"message": "Passwords are generated by KeePassXC using your password generation profile.",
"description": "Password Generator option help text, second part."
},
"optionsAutoRetrieveCredentialsHelpText": {
"message": "KeePassXC-Browser will immediately retrieve credentials when a tab is activated.",
"description": "Auto-Retrive Credentials option help text."
},
"optionsAutoFillSingleEntryHelpText": {
"message": "Let KeePassXC-Browser automatically fill in credentials if it receives only a single entry.",
"description": "Auto-Fill Single Entry option help text."
},
"optionsAutoFillSingleEntryWarning": {
"message": "Warning! Using auto-fill is not safe. Use at your own risk.",
"description": "Auto-Fill Single Entry warning text."
},
"optionsAutocompleteUsernamesHelpText": {
"message": "Show a dropdown list containing available credentials for all username fields on a page.",
"description": "Autocomplete Usernames option help text."
},
"optionsShowNotificationsHelpText": {
"message": "Show notifications for errors and when user interaction is required.",
"description": "Show notifications option help text."
},
"optionsSaveDomainOnlyHelpText": {
"message": "When saving new credentials, save only the domain instead of full URL.",
"description": "Save domain only option help text."
},
"optionsAutoFillAndSendHelpText": {
"message": "If credentials are found for a page and the login-type is an HTTP Basic Auth request, KeePassXC-Browser tries to login with the first given credentials.",
"description": "Auto-Fill And Send option help text."
},
"optionsAutoFillAndSendHelpTextSecond": {
"message": "An HTTP Basic Auth dialog looks like this:",
"description": "HTTP Basic Auth image help text."
},
"optionsVersionInfoText": {
"message": "KeePassXC-Browser needs KeePassXC to retrieve credentials.",
"description": "Settings page version info text."
},
"optionsVersionDownload": {
"message": "You can download the latest stable version from $1",
"description": "Settings page download link."
},
"optionsVersionRunning": {
"message": "You are running KeePassXC version: $1",
"description": "Settings page info text of user's KeePassXC version."
},
"optionsLatestVersion": {
"message": "Latest available version of KeePassXC: $1",
"description": "Settings page info text about the latest KeePassXC version."
},
"optionsDefault": {
"message": "Default: $1",
"description": "Default setting text."
},
"optionsInfinite": {
"message": "Infinite: $1",
"description": "Infinite setting text."
},
"optionsRecommended": {
"message": "Recommended: $1",
"description": "Recommended setting text."
},
"optionsConnectedDatabasesText": {
"message": "The following KeePassXC databases are connected to KeePassXC-Browser.",
"description": "Info text about connected databases."
},
"optionsConnectedDatabasesNotFound": {
"message": "No connected databases found.",
"description": "Shown in the connected databases table when there is no connected databases."
},
"optionsDatabasesRemoveIdentifier": {
"message": "Remove identifier from database list?",
"description": "Confirmation text when removing database from the list."
},
"optionsDatabasesRemoveIdentifierConfirmFirst": {
"message": "Do you really want to remove the following identifier from the database list?",
"description": "Confirmation text when removing database from the list."
},
"optionsDatabasesRemoveIdentifierConfirmSecond": {
"message": "You can reconnect your database at any time.",
"description": "Confirmation text when removing database from the list, second part."
},
"optionsDatabaseIdentifier": {
"message": "Identifier",
"description": "Database list column title."
},
"optionsDatabaseKey": {
"message": "Key",
"description": "Database list column title."
},
"optionsDatabaseLastUsed": {
"message": "Last used",
"description": "Database list column title."
},
"optionsDatabaseCreated": {
"message": "Created",
"description": "Database list column title."
},
"optionsDatabaseDelete": {
"message": "Delete",
"description": "Database list column title."
},
"optionsColumnPageURL": {
"message": "Page URL",
"description": "Site preferences list column title."
},
"optionsColumnIgnore": {
"message": "Ignore",
"description": "Site preferences list column title."
},
"optionsColumnUsernameOnly": {
"message": "Username-only Detection",
"description": "Site preferences list column title."
},
"optionsColumnDelete": {
"message": "Delete",
"description": "Site preferences list column title."
},
"optionsSelectionNothing": {
"message": "Enable all features",
"description": "Site preferences option selection."
},
"optionsSelectionNormal": {
"message": "Disable new/modified credentials",
"description": "Site preferences option selection."
},
"optionsSelectionFull": {
"message": "Disable all features",
"description": "Site preferences option selection."
},
"optionsCustomFieldsNotFound": {
"message": "No saved custom login fields found.",
"description": "Shown when no saved custom credentials are saved."
},
"optionsCustomFieldsTabHelpTextFirst": {
"message": "If KeePassXC-Browser detects the wrong login fields, you are able to specify the correct fields yourself.",
"description": "Saved custom login fields info text, first part."
},
"optionsCustomFieldsTabHelpTextSecond": {
"message": "Go to the page and click on the KeePassXC-Browser icon, then select ",
"description": "Saved custom login fields info text, second part."
},
"optionsCustomFieldsTabHelpTextThird": {
"message": "On this page you can manage saved custom login fields.",
"description": "Saved custom login fields info text, third part."
},
"optionsCustomFieldsRemove": {
"message": "Remove saved custom login fields?",
"description": "Confirmation text when removing saved custom login fields."
},
"optionsCustomFieldsConfirmation": {
"message": "Do you really want to remove the saved custom login fields on the page: $1",
"description": "Confirmation text when removing saved custom login fields."
},
"optionsCustomFieldsConfirmationHelpText": {
"message": "KeePassXC-Browser will automatically detect the login fields next time you visit this page.",
"description": "Part of confirmation text when removing saved custom login fields."
},
"optionsSitePreferencesNotFound": {
"message": "No ignored sites found.",
"description": "Shown when no ignored sites are saved."
},
"optionsSitePreferencesRemove": {
"message": "Remove site?",
"description": "Confirmation text when removing ignored sites from the list."
},
"optionsSitePreferencesTabHelpTextFirst": {
"message": "Sites on this page have special handling methods associated with them.",
"description": "Site preferences info text, first part."
},
"optionsSitePreferencesTabHelpTextSecond": {
"message": "To ignore new/modified credentials on a specific site, add them below or click the blinking KeePassXC-Browser icon and select",
"description": "Site preferences info text, second part."
},
"optionsSitePreferencesTabHelpTextThird": {
"message": "If a site is fully ignored (<em>Disable all features</em> is selected), then the plugin will do nothing when visiting that site.",
"description": "Site preferences info text, third part."
},
"optionsSitePreferencesTabHelpTextFourth": {
"message": "Username-only detection allows KeePassXC-Browser to fill in login details on websites with separate pages for username and password.",
"description": "Site preferences info text, fourth part."
},
"optionsSitePreferencesManualAddText": {
"message": "Add URL manually:",
"description": "Label for adding site manually on Site preferences tab."
},
"optionsSitePreferencesConfirmation": {
"message": "Do you really want to remove the specified site from the list: $1",
"description": "Confirmation text when removing site from site preferences."
},
"optionsSitePreferencesConfirmationHelpText": {
"message": "KeePassXC-Browser will enable all features for this site and remove username-only detection.",
"description": "Part of confirmation text when removing site preferences."
},
"optionsAboutChrome": {
"message": "Visit KeePassXC-Browser in the Chrome Web Store.",
"description": "About page link to Chrome Web Store."
},
"optionsAboutMozilla": {
"message": "Visit KeePassXC-Browser in the Mozilla Add-ons directory.",
"description": "About page link to AMO."
},
"optionsAboutGitHub": {
"message": "Visit KeePassXC-Browser on GitHub.",
"description": "About page link to GitHub."
},
"optionsAboutExtensionVersion": {
"message": "KeePassXC-Browser Version: $1",
"description": "About page text of extension version."
},
"optionsAboutKeePassXCVersion": {
"message": "KeePassXC Version: $1",
"description": "About page text of KeePassXC version."
},
"optionsAboutContributors": {
"message": "Contributors:",
"description": "About page text of contributors."
}
}

View file

@ -252,13 +252,13 @@ browserAction.setRememberPopup = function(tabId, username, password, url, userna
browserAction.show(null, {'id': id});
if (page.settings.showLoginNotifications) {
const message = 'Create or modify the credentials by clicking on the extension icon.';
const message = tr('rememberCredentialsPopup');
const buttons = [
{
'title': 'Close'
'title': tr('popupButtonClose')
},
{
'title': 'Never ask for this page'
'title': tr('popupButtonIgnore')
}];
browser.notifications.create({

View file

@ -85,7 +85,7 @@ httpAuth.loginOrShowCredentials = function(logins, details, resolve, reject) {
});
} else {
if (page.settings.showNotifications) {
showNotification('HTTP authentication with multiple credentials detected. Click on the extension icon to choose the correct one.');
showNotification(tr('multipleCredentialsDetected'));
}
kpxcEvent.onHTTPAuthPopup(null, { 'id': details.tabId }, { 'logins': logins, 'url': details.searchUrl, 'resolve': resolve });
}

View file

@ -84,11 +84,11 @@ browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
browser.runtime.onMessage.addListener(kpxcEvent.onMessage);
const contextMenuItems = [
{title: 'Fill User + Pass', action: 'fill_user_pass'},
{title: 'Fill Pass Only', action: 'fill_pass_only'},
{title: 'Fill TOTP', action: 'fill_totp'},
{title: 'Show Password Generator Icons', action: 'activate_password_generator'},
{title: 'Save credentials', action: 'remember_credentials'}
{title: tr('contextMenuFillUsernameAndPassword'), action: 'fill_user_pass'},
{title: tr('contextMenuFillPassword'), action: 'fill_pass_only'},
{title: tr('contextMenuFillTOTP'), action: 'fill_totp'},
{title: tr('contextMenuShowPasswordGeneratorIcons'), action: 'activate_password_generator'},
{title: tr('contextMenuSaveCredentials'), action: 'remember_credentials'}
];
let menuContexts = ['editable'];

View file

@ -56,22 +56,22 @@ const kpErrors = {
NO_LOGINS_FOUND: 15,
errorMessages : {
0: { msg: 'Unknown error' },
1: { msg: 'Database not opened' },
2: { msg: 'Database hash not received' },
3: { msg: 'Client public key not reveiced' },
4: { msg: 'Cannot decrypt message' },
5: { msg: 'Timeout or not connected to KeePassXC' },
6: { msg: 'Action cancelled or denied' },
7: { msg: 'Cannot encrypt message or public key not found. Is native messaging or support for your browser enabled in KeePassXC?' },
8: { msg: 'KeePassXC association failed, try again.' },
9: { msg: 'Key change was not successful.' },
10: { msg: 'Encryption key is not recognized' },
11: { msg: 'No saved databases found.' },
12: { msg: 'Incorrect action.' },
13: { msg: 'Empty message received.' },
14: { msg: 'No URL provided.' },
15: { msg: 'No logins found.' }
0: { msg: tr('errorMessageUnknown') },
1: { msg: tr('errorMessageDatabaseNotOpened') },
2: { msg: tr('errorMessageDatabaseHash') },
3: { msg: tr('errorMessageClientPublicKey') },
4: { msg: tr('errorMessageDecrypt') },
5: { msg: tr('errorMessageTimeout') },
6: { msg: tr('errorMessageCanceled') },
7: { msg: tr('errorMessageEncrypt') },
8: { msg: tr('errorMessageAssociate') },
9: { msg: tr('errorMessageKeyExchange') },
10: { msg: tr('errorMessageEncryptionKey') },
11: { msg: tr('errorMessageSavedDatabases') },
12: { msg: tr('errorMessageIncorrectAction') },
13: { msg: tr('errorMessageEmptyMessage') },
14: { msg: tr('errorMessageNoURL') },
15: { msg: tr('errorMessageNoLogins') }
},
getError(errorCode) {

View file

@ -96,4 +96,8 @@ var siteMatch = function(site, url) {
var slashNeededForUrl = function(pattern) {
const matchPattern = new RegExp(`^${schemeSegment}://${hostSegment}$`);
return matchPattern.exec(pattern);
};
};
function tr(key, params) {
return browser.i18n.getMessage(key, params);
};

View file

@ -237,7 +237,7 @@ cipPassword.createDialog = function() {
.attr('id', 'cip-genpw-textfield-password')
.attr('type', 'text')
.attr('aria-describedby', 'cip-genpw-quality')
.attr('placeholder', 'Generated password')
.attr('placeholder', tr('passwordGeneratorPlaceholder'))
.addClass('genpw-text ui-widget-content ui-corner-all')
.on('change keypress paste textInput input', function() {
jQuery('#cip-genpw-btn-clipboard:first').removeClass('btn-success');
@ -246,7 +246,7 @@ cipPassword.createDialog = function() {
.addClass('genpw-input-group-addon')
.addClass('b2c-add-on')
.attr('id', 'cip-genpw-quality')
.text('??? Bits');
.text(tr('passwordGeneratorBits'));
$inputGroup.append($textfieldPassword).append($quality);
const $checkGroup = jQuery('<div>').addClass('genpw-input-group');
@ -257,7 +257,7 @@ cipPassword.createDialog = function() {
const $labelNextField = jQuery('<label>')
.append($checkboxNextField)
.addClass('cip-genpw-label')
.append(' also fill in the next password-field');
.append(tr('passwordGeneratorLabel'));
$checkGroup.append($labelNextField);
$inputDiv.append($inputGroup).append($checkGroup);
@ -278,12 +278,12 @@ cipPassword.createDialog = function() {
resizable: false,
minWidth: 300,
minHeight: 80,
title: 'Password Generator',
title: tr('passwordGeneratorTitle'),
classes: {'ui-dialog': 'ui-corner-all'},
buttons: {
'Generate':
{
text: 'Generate',
text: tr('passwordGeneratorGenerate'),
id: 'cip-genpw-btn-generate',
click: (e) => {
e.preventDefault();
@ -296,7 +296,7 @@ cipPassword.createDialog = function() {
},
'Copy':
{
text: 'Copy',
text: tr('passwordGeneratorCopy'),
id: 'cip-genpw-btn-clipboard',
click: (e) => {
e.preventDefault();
@ -305,7 +305,7 @@ cipPassword.createDialog = function() {
},
'Fill & copy':
{
text: 'Fill & copy',
text: tr('passwordGeneratorFillAndCopy'),
id: 'cip-genpw-btn-fillin',
click: (e) => {
e.preventDefault();
@ -320,7 +320,7 @@ cipPassword.createDialog = function() {
$password = $password.substring(0, field.attr('maxlength'));
jQuery('input#cip-genpw-textfield-password:first').val($password);
jQuery('#cip-genpw-btn-clipboard:first').removeClass('b2c-btn-success');
const message = 'Error:\nThe generated password is longer than the allowed length!\nIt has been cut to fit the length.\n\nPlease remember the new password!';
alert(tr('passwordGeneratorErrorTooLong'));
browser.runtime.sendMessage({
action: 'show_notification',
args: [message]
@ -367,7 +367,7 @@ cipPassword.createIcon = function(field) {
.addClass('kpxc')
.addClass('cip-genpw-icon')
.addClass($className)
.attr('title', 'Generate password')
.attr('title', tr('passwordGeneratorGenerateText'))
.css('z-index', '9999')
.css('width', $size)
.css('height', $size)
@ -451,7 +451,7 @@ cipPassword.callbackGeneratedPassword = function(entries) {
}
else {
if (jQuery('div#cip-genpw-error:first').length === 0) {
jQuery('button#cip-genpw-btn-generate:first').after('<div style=\'block\' id=\'cip-genpw-error\'>Cannot receive generated password.<br />Is KeePassXC opened?<br /></div>');
jQuery('button#cip-genpw-btn-generate:first').after('<div style=\'block\' id=\'cip-genpw-error\'>' + tr('passwordGeneratorError') + '<br /></div>');
jQuery('input#cip-genpw-textfield-password:first').parent().hide();
jQuery('input#cip-genpw-checkbox-next-field:first').parent('label').hide();
jQuery('button#cip-genpw-btn-generate').hide();
@ -591,13 +591,13 @@ cipDefine.initDescription = function() {
const $help = jQuery('<div>').addClass('b2c-chooser-help').attr('id', 'b2c-help');
$description.append($help);
const $btnDismiss = jQuery('<button>').text('Dismiss').attr('id', 'b2c-btn-dismiss')
const $btnDismiss = jQuery('<button>').text(tr('defineDismiss')).attr('id', 'b2c-btn-dismiss')
.addClass('btn').addClass('btn-danger')
.click(function(e) {
jQuery('div#b2c-backdrop').remove();
jQuery('div#b2c-cipDefine-fields').remove();
});
const $btnSkip = jQuery('<button>').text('Skip').attr('id', 'b2c-btn-skip')
const $btnSkip = jQuery('<button>').text(tr('defineSkip')).attr('id', 'b2c-btn-skip')
.addClass('btn').addClass('btn-info')
.css('margin-right', '5px')
.click(function() {
@ -612,7 +612,7 @@ cipDefine.initDescription = function() {
cipDefine.markAllStringFields(jQuery('#b2c-cipDefine-fields'));
}
});
const $btnAgain = jQuery('<button>').text('Again').attr('id', 'b2c-btn-again')
const $btnAgain = jQuery('<button>').text(tr('defineAgain')).attr('id', 'b2c-btn-again')
.addClass('btn').addClass('btn-warning')
.css('margin-right', '5px')
.click(function(e) {
@ -621,7 +621,7 @@ cipDefine.initDescription = function() {
cipDefine.markAllUsernameFields(jQuery('#b2c-cipDefine-fields'));
})
.hide();
const $btnConfirm = jQuery('<button>').text('Confirm').attr('id', 'b2c-btn-confirm')
const $btnConfirm = jQuery('<button>').text(tr('defineConfirm')).attr('id', 'b2c-btn-confirm')
.addClass('btn').addClass('btn-primary')
.css('margin-right', '15px')
.click(function(e) {
@ -665,11 +665,11 @@ cipDefine.initDescription = function() {
$description.append($btnDismiss);
const location = cip.getDocumentLocation();
if (cip.settings['defined-custom-fields'] && cip.settings['defined-custom-fields'][location]) {
const $p = jQuery('<p>').html('For this page credential fields are already selected and will be overwritten.<br />');
if (cip.settings['defined-credential-fields'] && cip.settings['defined-custom-fields'][location]) {
const $p = jQuery('<p>').html(tr('defineAlreadySelected') + '<br />');
const $btnDiscard = jQuery('<button>')
.attr('id', 'btn-warning')
.text('Discard selection')
.text(tr('defineDiscard'))
.css('margin-top', '5px')
.addClass('btn')
.addClass('btn-sm')
@ -714,7 +714,7 @@ cipDefine.isFieldSelected = function($cipId) {
cipDefine.markAllUsernameFields = function($chooser) {
cipDefine.eventFieldClick = function(e) {
cipDefine.selection.username = jQuery(this).data('cip-id');
jQuery(this).addClass('b2c-fixed-username-field').text('Username').unbind('click');
jQuery(this).addClass('b2c-fixed-username-field').text(tr('username')).unbind('click');
cipDefine.prepareStep2();
cipDefine.markAllPasswordFields(jQuery('#b2c-cipDefine-fields'));
};
@ -724,7 +724,7 @@ cipDefine.markAllUsernameFields = function($chooser) {
cipDefine.markAllPasswordFields = function($chooser) {
cipDefine.eventFieldClick = function(e) {
cipDefine.selection.password = jQuery(this).data('cip-id');
jQuery(this).addClass('b2c-fixed-password-field').text('Password').unbind('click');
jQuery(this).addClass('b2c-fixed-password-field').text(tr('password')).unbind('click');
cipDefine.prepareStep3();
cipDefine.markAllStringFields(jQuery('#b2c-cipDefine-fields'));
};
@ -735,7 +735,7 @@ cipDefine.markAllStringFields = function($chooser) {
cipDefine.eventFieldClick = function(e) {
cipDefine.selection.fields[jQuery(this).data('cip-id')] = true;
const count = Object.keys(cipDefine.selection.fields).length;
jQuery(this).addClass('b2c-fixed-string-field').text('String field #' + String(count)).unbind('click');
jQuery(this).addClass('b2c-fixed-string-field').text(tr('defineStringField') + String(count)).unbind('click');
jQuery('button#b2c-btn-confirm:first').addClass('b2c-btn-primary').attr('disabled', false);
};
cipDefine.markFields($chooser, cipFields.inputQueryPattern + ', select');
@ -766,7 +766,7 @@ cipDefine.prepareStep1 = function() {
jQuery('div#b2c-cipDefine-fields').removeData('username');
jQuery('div#b2c-cipDefine-fields').removeData('password');
jQuery('div.b2c-fixed-field', jQuery('div#b2c-cipDefine-fields')).remove();
jQuery('div:first', jQuery('div#b2c-cipDefine-description')).text('1. Choose a username field');
jQuery('div:first', jQuery('div#b2c-cipDefine-description')).text(tr('defineChooseUsername'));
jQuery('button#b2c-btn-skip:first').data('step', '1').show();
jQuery('button#b2c-btn-confirm:first').hide();
jQuery('button#b2c-btn-again:first').hide();
@ -775,7 +775,7 @@ cipDefine.prepareStep1 = function() {
cipDefine.prepareStep2 = function() {
jQuery('div#b2c-help').text('').css('margin-bottom', 0);
jQuery('div.b2c-fixed-field:not(.b2c-fixed-username-field)', jQuery('div#b2c-cipDefine-fields')).remove();
jQuery('div:first', jQuery('div#b2c-cipDefine-description')).text('2. Now choose a password field');
jQuery('div:first', jQuery('div#b2c-cipDefine-description')).text(tr('defineChoosePassword'));
jQuery('button#b2c-btn-skip:first').data('step', '2');
jQuery('button#b2c-btn-again:first').show();
};
@ -785,11 +785,11 @@ cipDefine.prepareStep3 = function() {
jQuery('button#b2c-btn-confirm:first').removeClass('b2c-btn-primary').attr('disabled', true);
}
jQuery('div#b2c-help').html('Please confirm your selection or choose more fields as <em>String fields</em>.').css('margin-bottom', '5px');
jQuery('div#b2c-help').html(tr('defineHelpText')).css('margin-bottom', '5px');
jQuery('div.b2c-fixed-field:not(.b2c-fixed-password-field,.b2c-fixed-username-field)', jQuery('div#b2c-cipDefine-fields')).remove();
jQuery('button#b2c-btn-confirm:first').show();
jQuery('button#b2c-btn-skip:first').data('step', '3').hide();
jQuery('div:first', jQuery('div#b2c-cipDefine-description')).text('3. Confirm selection');
jQuery('div:first', jQuery('div#b2c-cipDefine-description')).text(tr('defineConfirmSelection'));
};
@ -1579,7 +1579,7 @@ cip.preparePageForMultipleCredentials = function(credentials) {
cipAutocomplete.elements = [];
let visibleLogin;
for (let i = 0; i < credentials.length; i++) {
visibleLogin = (credentials[i].login.length > 0) ? credentials[i].login : '- no username -';
visibleLogin = (credentials[i].login.length > 0) ? credentials[i].login : tr('credentialsNoUsername');
usernames.push(visibleLogin + ' (' + credentials[i].name + ')');
const item = {
label: visibleLogin + ' (' + credentials[i].name + ')',
@ -1717,7 +1717,7 @@ cip.fillInFromActiveElement = function(suppressWarnings, passOnly = false) {
if (passOnly) {
if (!_f(combination.password)) {
const message = 'Error:\nUnable to find a password field';
const message = tr('fieldsNoPasswordField');
browser.runtime.sendMessage({
action: 'show_notification',
args: [message]
@ -1808,7 +1808,7 @@ cip.setValueWithChange = function(field, value) {
cip.fillIn = function(combination, onlyPassword, suppressWarnings) {
// no credentials available
if (cip.credentials.length === 0 && !suppressWarnings) {
const message = 'Error:\nNo logins found.';
const message = tr('credentialsNoLoginsFound');
browser.runtime.sendMessage({
action: 'show_notification',
args: [message]
@ -1847,7 +1847,7 @@ cip.fillIn = function(combination, onlyPassword, suppressWarnings) {
if (!filledIn) {
if (!suppressWarnings) {
const message = 'Error:\nCannot find fields to fill in.';
const message = tr('fieldsFill');
browser.runtime.sendMessage({
action: 'show_notification',
args: [message]
@ -1883,7 +1883,7 @@ cip.fillIn = function(combination, onlyPassword, suppressWarnings) {
if (!filledIn) {
if (!suppressWarnings) {
const message = 'Error:\nCannot find fields to fill in.';
const message = tr('fieldsFill');
browser.runtime.sendMessage({
action: 'show_notification',
args: [message]
@ -1945,7 +1945,7 @@ cip.fillIn = function(combination, onlyPassword, suppressWarnings) {
}
else if (countPasswords < 1) {
if (!suppressWarnings) {
const message = 'Error:\nNo credentials for given username found.';
const message = tr('credentialsNoUsernameFound');
browser.runtime.sendMessage({
action: 'show_notification',
args: [message]
@ -1994,7 +1994,7 @@ cip.contextMenuRememberCredentials = function() {
}
if (!cip.rememberCredentials(usernameValue, passwordValue)) {
const message = 'Error:\nCould not detect changed credentials.';
const message = tr('rememberNothingChanged');
browser.runtime.sendMessage({
action: 'show_notification',
args: [message]

View file

@ -2,7 +2,7 @@
"manifest_version": 2,
"name": "KeePassXC-Browser",
"version": "1.2.0",
"description": "KeePassXC integration for modern web browsers",
"description": "__MSG_extensionDescription__",
"author": "KeePassXC Team",
"icons": {
"16": "icons/keepassxc_16x16.png",
@ -62,21 +62,21 @@
],
"commands": {
"fill-username-password": {
"description": "Insert username + password",
"description": "__MSG_contextMenuFillUsernameAndPassword__",
"suggested_key": {
"default": "Alt+Shift+U",
"mac": "MacCtrl+Shift+U"
}
},
"fill-password": {
"description": "Insert a password",
"description": "__MSG_contextMenuFillPassword__",
"suggested_key": {
"default": "Alt+Shift+I",
"mac": "MacCtrl+Shift+I"
}
},
"fill-totp": {
"description": "Insert a TOTP",
"description": "__MSG_contextMenuFillTOTP__",
"suggested_key": {
"default": "Alt+Shift+T",
"mac": "MacCtrl+Shift+T"
@ -105,5 +105,6 @@
"id": "keepassxc-browser@keepassxc.org",
"strict_min_version": "52.0"
}
}
},
"default_locale": "en"
}

View file

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<title>Settings | KeePassXC-Browser</title>
<title data-i18n="optionsTitle"></title>
<meta charset="UTF-8">
<link rel="stylesheet" href="bootstrap.min.css" />
<link rel="stylesheet" href="options.css" />
@ -17,71 +17,72 @@
<nav class="navbar navbar-default">
<ul class="nav navbar-nav">
<li class="active"><a href="#general-settings">General</a></li>
<li><a href="#connected-databases">Connected Databases</a></li>
<li><a href="#custom-fields">Custom credential fields</a></li>
<li><a href="#site-preferences">Site preferences</a></li>
<li><a href="#about">About</a></li>
<li class="active"><a href="#general-settings"><span data-i18n="optionsMenuGeneral"/></a></li>
<li><a href="#connected-databases"><span data-i18n="optionsMenuConnectedDatabases"/></a></li>
<li><a href="#custom-fields"><span data-i18n="optionsMenuCustomFields"/></a></li>
<li><a href="#site-preferences"><span data-i18n="optionsMenuSitePreferences"></a></li>
<li><a href="#about"><span data-i18n="optionsMenuAbout"/></a></li>
</ul>
</nav>
<!-- General Settings -->
<div class="tab" id="tab-general-settings">
<h2>General settings</h2>
<h2 data-i18n="optionsGeneralSettingsTab"></h2>
<hr />
<p>
If you just want to insert username + password into the fields where your focus is, press <code><span id="mac-user-shortcut">Ctrl + Shift + U</span><span id="default-user-shortcut">Alt + Shift + U</span></code>.
<span data-i18n="optionsGeneralHelpText" i18n-placeholder="<code><span id='mac-user-shortcut'>Ctrl + Shift + U</span><span id='default-user-shortcut'>Alt + Shift + U</span></code>"></span>.
<br />
If you only want to insert the password, just press <code><span id="mac-pass-shortcut">Ctrl + Shift + I</span><span id="default-pass-shortcut">Alt + Shift + I</span></code>.
<span id="chrome-only">You can customize these shortcuts on <code>chrome://extensions/configureCommands</code> page</span>
<span data-i18n="optionsGeneralHelpTextSecond" i18n-placeholder="<code><span id='mac-pass-shortcut'>Ctrl + Shift + I</span><span id='default-pass-shortcut'>Alt + Shift + I</span></code>"></span>.
<br />
<span id="chrome-only"><span data-i18n="optionsCustomizeCommandsHelpText" i18n-placeholder="<code>chrome://extensions/configureCommands</code>"></span></span>
</p>
<p>
<div class="form-group">
<label for="blinkTimeout">Blink Time:</label>
<label for="blinkTimeout" data-i18n="optionsLabelBlinkTime"></label>
<div class="control-group">
<div class="input-append">
<input type="number" id="blinkTimeout" placeholder="7500" value="7500" min="-1"/>
<button class="btn btn-sm btn-primary" id="blinkTimeoutButton" type="button"><span class="glyphicon glyphicon-floppy-disk"></span> Save</button>
<button class="btn btn-sm btn-primary" id="blinkTimeoutButton" type="button"><span class="glyphicon glyphicon-floppy-disk"></span><span data-i18n="optionsButtonSave"/></button>
</div>
</div>
<span class="help-inline">
What is the maximum time (ms) the icon should blink after detecting new credentials
<span data-i18n="optionsBlinkTimeHelpText"></span>
<br />
Default: 7500, Infinite: -1
<span data-i18n="optionsDefault" i18n-placeholder="7500"></span>, <span data-i18n="optionsInfinite" i18n-placeholder="-1"></span>
</span>
</div>
</p>
<p>
<div class="form-group">
<label for="blinkMinTimeout">Redirect Offset:</label>
<label for="blinkMinTimeout" data-i18n="optionsLabelRedirectOffset"></label>
<div class="control-group">
<div class="input-append">
<input type="number" id="blinkMinTimeout" placeholder="2000" value="2000" min="-1"/>
<button class="btn btn-sm btn-primary" id="blinkMinTimeoutButton" type="button"><span class="glyphicon glyphicon-floppy-disk"></span> Save</button>
<button class="btn btn-sm btn-primary" id="blinkMinTimeoutButton" type="button"><span class="glyphicon glyphicon-floppy-disk"></span><span data-i18n="optionsButtonSave"/></button>
</div>
</div>
<span class="help-inline">
What is the minimum time (ms) the icon should blink before deactivating due to page redirects.
<span data-i18n="optionsRedirectOffsetHelpText"></span>
<br />
-1 to only use <i>Blink Time</i> ignoring Redirect Allowance (old behavior)
<span data-i18n="optionsRedirectOffsetHelpTextSecond"></span>
<br />
Default: -1, Recommended: 2000
<span data-i18n="optionsDefault" i18n-placeholder="-1"></span>, <span data-i18n="optionsRecommended" i18n-placeholder="2000"></span>
</span>
</div>
</p>
<p>
<div class="form-group">
<label for="allowedRedirect">Redirect Allowance:</label>
<label for="allowedRedirect" data-i18n="optionsLabelRedirectAllowance"></label>
<div class="control-group">
<div class="input-append">
<input type="number" id="allowedRedirect" placeholder="1" value="1" min="1"/>
<button class="btn btn-sm btn-primary" id="allowedRedirectButton" type="button"><span class="glyphicon glyphicon-floppy-disk"></span> Save</button>
<button class="btn btn-sm btn-primary" id="allowedRedirectButton" type="button"><span class="glyphicon glyphicon-floppy-disk"></span><span data-i18n="optionsButtonSave"/></button>
</div>
</div>
<span class="help-inline">
How many pages should the tab cycle through after the redirect offset before deactivating the icon
<span data-i18n="optionsRedirectAllowanceHelpText"></span>
<br />
Default: 1
<span data-i18n="optionsDefault"></span>1
</span>
</div>
</p>
@ -89,53 +90,53 @@
<p>
<div class="checkbox">
<label class="checkbox">
<input type="checkbox" name="usePasswordGenerator" value="true" /> Activate password generator.
<input type="checkbox" name="usePasswordGenerator" value="true"/><span data-i18n="optionsCheckboxUsePasswordGenerator"/>
</label>
<span class="help-block">
For all password-fields there will be an icon added to generate a new password.
<span data-i18n="optionsUsePasswordGeneratorHelpText"></span>
<br />
It is generated by KeePassXC with the profile for automatically generated passwords for new entries.</span>
<span data-i18n="optionsUsePasswordGeneratorHelpTextSecond"></span></span>
</div>
</p>
<hr />
<p>
<div class="checkbox">
<label class="checkbox">
<input type="checkbox" name="autoRetrieveCredentials" value="true" /> Automatically retrieve credentials.
<input type="checkbox" name="autoRetrieveCredentials" value="true" /><span data-i18n="optionsCheckboxAutoRetrieveCredentials"/>
</label>
<span class="help-block">KeePassXC-Browser will immediately retrieve the credentials when the tab is activated.</span>
<span class="help-block" data-i18n="optionsAutoRetrieveCredentialsHelpText"></span>
</div>
</p>
<hr />
<p>
<div class="checkbox">
<label class="checkbox">
<input type="checkbox" name="autoFillSingleEntry" value="false" /> Automatically fill-in single credentials entry.
<input type="checkbox" name="autoFillSingleEntry" value="false" /><span data-i18n="optionsCheckboxAutoFillSingleEntry"/>
</label>
<span class="help-block">If KeePassXC-Browser does only receive a single entry from KeePassXC it automatically fills this credentials into the found credential fields.</span>
<span class="bg-danger">Warning! Using auto-fill is not safe. Use at your own risk.</span>
<span class="help-block" data-i18n="optionsAutoFillSingleEntryHelpText"></span>
<span class="bg-danger" data-i18n="optionsAutoFillSingleEntryWarning"></span>
</div>
</p>
<hr />
<p>
<div class="checkbox">
<label class="checkbox">
<input type="checkbox" name="autoCompleteUsernames" value="true" /> Activate autocomplete for username fields.
<input type="checkbox" name="autoCompleteUsernames" value="true" /><span data-i18n="optionsCheckboxAutoCompleteUsernames"/>
</label>
<span class="help-block">For all username fields on a page a dropdown list appears which contains all available credentials.</span>
<span class="help-block" data-i18n="optionsAutocompleteUsernamesHelpText"></span>
</div>
</p>
<hr />
<p>
<div class="checkbox">
<label class="checkbox">
<input type="checkbox" name="showNotifications" value="true" /> Show notifications.
<input type="checkbox" name="showNotifications" value="true" /><span data-i18n="optionsCheckboxShowNotifications"/>
</label>
<span class="help-block">Show notifications for errors and when user interaction is required.</span>
<span class="help-block" data-i18n="optionsShowNotificationsHelpText"></span>
</div>
<div class="checkbox">
<label class="checkbox">
<input type="checkbox" name="showLoginNotifications" value="true" /> Show a notification when new credentials can be saved to the database.
<input type="checkbox" name="showLoginNotifications" value="true" /><span data-i18n="optionsCheckboxShowLoginNotifications"/>
</label>
</div>
</p>
@ -143,44 +144,43 @@
<p>
<div class="checkbox">
<label class="checkbox">
<input type="checkbox" name="saveDomainOnly" value="true" /> Save domain only.
<input type="checkbox" name="saveDomainOnly" value="true" /><span data-i18n="optionsSaveDomainOnly"/>
</label>
<span class="help-block">When saving new credentials save only the domain instead of full URL.</span>
<span class="help-block" data-i18n="optionsSaveDomainOnlyHelpText"></span>
</div>
</p>
<hr />
<p>
Check for updates of KeePassXC:
<br />
<label class="radio-inline"><input type="radio" name="checkUpdateKeePassXC" value="3" checked="true"/> every 3 days</label>
<label class="radio-inline"><input type="radio" name="checkUpdateKeePassXC" value="7" /> every week</label>
<label class="radio-inline"><input type="radio" name="checkUpdateKeePassXC" value="30" /> every month</label>
<label class="radio-inline"><input type="radio" name="checkUpdateKeePassXC" value="0" /> never</label>
<div data-i18n="optionsRadioText"></div>
<label class="radio-inline"><input type="radio" name="checkUpdateKeePassXC" value="3" checked="true"/><span data-i18n="optionsRadioThreeDays"/></label>
<label class="radio-inline"><input type="radio" name="checkUpdateKeePassXC" value="7" /><span data-i18n="optionsRadioWeek"/></label>
<label class="radio-inline"><input type="radio" name="checkUpdateKeePassXC" value="30" /><span data-i18n="optionsRadioMonth"/></label>
<label class="radio-inline"><input type="radio" name="checkUpdateKeePassXC" value="0" /><span data-i18n="optionsRadioNever"/></label>
</p>
<div class="help-block kphVersion">
KeePassXC-Browser needs KeePassXC to retrieve credentials.
<span data-i18n="optionsVersionInfoText"></span>
<br />
You can download the latest stable version from here: <a target="_blank" href="https://keepassxc.org/">https://keepassxc.org/</a>
<span data-i18n="optionsVersionDownload" i18n-placeholder="<a target='_blank' href='https://keepassxc.org/'>https://keepassxc.org/</a>"></span>
<br />
<br />
<div>
You are running KeePassXC version: <em class="yourVersion"></em>
<span data-i18n="optionsVersionRunning" i18n-placeholder="<em class='yourVersion'></em>"></span>
</div>
<div>
Latest available version of KeePassXC: <em class="latestVersion"></em>
<button class="btn btn-sm btn-primary checkUpdateKeePassXC"><span class="glyphicon glyphicon-refresh"></span> Check for updates</button>
<span data-i18n="optionsLatestVersion" i18n-placeholder="<em class='latestVersion'></em>"></span>
<button class="btn btn-sm btn-primary checkUpdateKeePassXC"><span class="glyphicon glyphicon-refresh"></span><span data-i18n="optionsButtonUpdate"/></button>
</div>
</div>
<hr />
<p>
<div class="checkbox">
<label class="checkbox">
<input type="checkbox" name="autoFillAndSend" value="0" /> Auto fill HTTP Auth dialogs and send them.
<input type="checkbox" name="autoFillAndSend" value="0" /><span data-i18n="optionsCheckboxAutoFillAndSend"/>
</label>
<span class="help-block">
If credentials are found for a page and the login-type is an HTTP Auth request, KeePassXC-Browser tries to login with the first given credentials.
<span data-i18n="optionsAutoFillAndSendHelpText"></span>
<br />
An HTTP Auth dialog looks like this:
<span data-i18n="optionsAutoFillAndSendHelpTextSecond"></span>
</span>
</div>
<img src="/options/http-auth-dialog.png" alt="http-auth-dialog" />
@ -189,36 +189,34 @@
<!-- Connected Databases -->
<div class="tab" id="tab-connected-databases">
<h2>Connected databases</h2>
<h2 data-i18n="optionsConnectedDatabasesTab"></h2>
<hr />
<p>
The following KeePassXC databases are connected to KeePassXC-Browser.
</p>
<p data-i18n="optionsConnectedDatabasesText"/>
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Identifier</th>
<th>Key</th>
<th>Last used</th>
<th>Created</th>
<th>Delete</th>
<th><span data-i18n="optionsDatabaseIdentifier"></span></th>
<th><span data-i18n="optionsDatabaseKey"></span></th>
<th><span data-i18n="optionsDatabaseLastUsed"></span></th>
<th><span data-i18n="optionsDatabaseCreated"></span></th>
<th><span data-i18n="optionsDatabaseDelete"></span></th>
</tr>
</thead>
<tbody>
<tr class="empty">
<td colspan="5">No connected databases found.</td>
<td colspan="5"><span data-i18n="optionsConnectedDatabasesNotFound"></span></td>
</tr>
<tr class="clone">
<td></td>
<td></td>
<td class="last-used"></td>
<td class="created"></td>
<td><button class="btn delete btn-danger"><span class="glyphicon glyphicon-remove-sign"></span> Remove</button></td>
<td><button class="btn delete btn-danger"><span class="glyphicon glyphicon-remove-sign"></span><span data-i18n="optionsButtonRemove"></span></button></td>
</tr>
</tbody>
</table>
<div style="text-align: right">
<button id="connect-button" class="btn btn-primary"><span class="glyphicon glyphicon-link"></span> Connect</button>
<button id="connect-button" class="btn btn-primary"><span class="glyphicon glyphicon-link"></span><span data-i18n="optionsButtonConnect"></span></button>
</div>
<div id="dialogDeleteConnectedDatabase" class="modal fade" tabindex="-1" role="dialog">
@ -226,15 +224,16 @@
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 class="modal-title" id="myModalLabel">Remove identifier from database list?</h3>
<h3 class="modal-title" id="myModalLabel" data-i18n="optionsDatabasesRemoveIdentifier"></h3>
</div>
<div class="modal-body">
<p>Do you really want to remove the identifier <span class="bold"></span> from the database list?</p>
<p class="help-block">You can reconnect your database at any time.</p>
<p data-i18n="optionsDatabasesRemoveIdentifierConfirmFirst"></p>
<span class="bold"></span>
<p class="help-block" data-i18n="optionsDatabasesRemoveIdentifierConfirmSecond"></p>
</div>
<div class="modal-footer">
<button class="btn btn-default" data-dismiss="modal" aria-hidden="true"><span class="glyphicon glyphicon-remove"></span> Cancel</button>
<button class="btn yes btn-primary"><span class="glyphicon glyphicon-ok"></span> Yes, remove now</button>
<button class="btn" data-dismiss="modal" aria-hidden="true"><span class="glyphicon glyphicon-remove"></span><span data-i18n="optionsButtonCancel"></span></button>
<button class="btn yes btn-primary"><span class="glyphicon glyphicon-ok"></span><span data-i18n="optionsButtonRemoveNow"></span></button>
</div>
</div>
</div>
@ -243,29 +242,29 @@
<!-- Custom credential fields -->
<div class="tab" id="tab-custom-fields">
<h2>Custom credential fields</h2>
<h2 data-i18n="optionsCustomFieldsTab"></h2>
<hr />
<p>
If KeePassXC-Browser detects the wrong credential fields, you are able to specify the correct fields by yourself.
<span data-i18n="optionsCustomFieldsTabHelpTextFirst"></span>
<br />
Go to the page and click on the KeePassXC-Browser-Icon, now select <em>Choose custom credential fields for this page</em>.
<span data-i18n="optionsCustomFieldsTabHelpTextSecond"></span><em><span data-i18n="popupChooseCredentialsText"></span></em>.
<br />
On this page you can manage saved custom credential fields.
<span data-i18n="optionsCustomFieldsTabHelpTextThird"></span>
</p>
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Page URL</th>
<th>Delete</th>
<th><span data-i18n="optionsColumnPageURL"></span></th>
<th><span data-i18n="optionsColumnDelete"></span></th>
</tr>
</thead>
<tbody>
<tr class="empty">
<td colspan="2">No saved custom credential fields found.</td>
<td colspan="2"><span data-i18n="optionsCustomFieldsNotFound"></span></td>
</tr>
<tr class="clone">
<td></td>
<td><button class="btn delete btn-danger btn"><span class="glyphicon glyphicon-remove-sign"></span> Remove</button></td>
<td><button class="btn delete btn-danger btn"><span class="glyphicon glyphicon-remove-sign"></span><span data-i18n="optionsButtonRemove"></span></button></td>
</tr>
</tbody>
</table>
@ -274,15 +273,15 @@
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="myModalLabel">Remove saved custom credential fields?</h3>
<h3 id="myModalLabel" data-i18n="optionsCustomFieldsRemove"></h3>
</div>
<div class="modal-body">
<p>DDo you really want to remove the saved custom credential fields on the page: <strong></strong>?</p>
<p class="help-block">KeePassXC-Browser will automatically detect the credential fields next time you visit this page.</p>
<p><span data-i18n="optionsCustomFieldsConfirmation" i18n-placeholder="<strong></strong>"></span></p>
<p class="help-block" data-i18n="optionsCustomFieldsConfirmationHelpText"></p>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
<button class="btn yes btn-primary">Yes, remove now</button>
<button class="btn" data-dismiss="modal" aria-hidden="true"><span class="glyphicon glyphicon-remove"></span><span data-i18n="optionsButtonCancel"></span></button>
<button class="btn yes btn-primary"><span class="glyphicon glyphicon-ok"></span><span data-i18n="optionsButtonRemoveNow"></span></button>
</div>
</div>
</div>
@ -291,24 +290,24 @@
<!-- Site preferences -->
<div class="tab" id="tab-site-preferences">
<h2>Site preferences</h2>
<h2 data-i18n="optionsSitePreferencesTab"></h2>
<hr />
<p>
Sites on this page have special handling methods associated with them.
<span data-i18n="optionsSitePreferencesTabHelpTextFirst"></span>
<br />
To ignore new/modified credentials on a specific site, add it below or click the blinking KeePassXC-Browser icon and select <em>Never ask for this page</em>.
<span data-i18n="optionsSitePreferencesTabHelpTextSecond"></span> <em><span data-i18n="popupButtonIgnore"></span></em>.
<br />
If a site is fully ignored (<em>Disable all features</em> is selected), then the plugin will do nothing when visiting that site.
<span data-i18n="optionsSitePreferencesTabHelpTextThird"></span>
<br />
Enabling the <em>Username-Only Detection</em> feature allows KeePassXC-Browser to fill-in pages on sites that do present a separated username and password input.
<span data-i18n="optionsSitePreferencesTabHelpTextFourth"></span>
</p>
<hr />
<div class="form-group">
<label for="sitePreferencesManualAdd">Add URL manually:</label>
<label for="ignoreManualAdd" data-i18n="optionsSitePreferencesManualAddText"></label>
<div class="control-group">
<div class="input-append">
<input type="url" id="manualUrl"/>
<button class="btn btn-sm btn-primary" id="sitePreferencesManualAdd" type="button"><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
<button class="btn btn-sm btn-primary" id="sitePreferencesManualAdd" type="button"><span class="glyphicon glyphicon-plus-sign"></span><span data-i18n="optionsButtonAdd"></span></button>
</div>
</div>
</div>
@ -316,27 +315,27 @@
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Page URL</th>
<th>Ignore</th>
<th>Username-Only Detection</th>
<th>Delete</th>
<th><span data-i18n="optionsColumnPageURL"></span></th>
<th><span data-i18n="optionsColumnIgnore"></span></th>
<th><span data-i18n="optionsColumnUsernameOnly"></span></th>
<th><span data-i18n="optionsColumnDelete"></span></th>
</tr>
</thead>
<tbody>
<tr class="empty">
<td colspan="4">No sites found.</td>
<td colspan="4"><span data-i18n="optionsSitePreferencesNotFound"></span></td>
</tr>
<tr class="clone">
<td></td>
<td>
<select name="ignore">
<option value="ignoreNothing">Enable all features</option>
<option value="ignoreNormal">Disable new/modified credentials</option>
<option value="ignoreFull">Disable all features</option>
<option value="ignoreNothing" data-i18n="optionsSelectionNothing"></option>
<option value="ignoreNormal" data-i18n="optionsSelectionNormal"></option>
<option value="ignoreFull" data-i18n="optionsSelectionFull"></option>
</select>
</td>
<td><input type="checkbox" name="usernameOnly" value="false" /></td>
<td><button class="btn delete btn-danger btn"><span class="glyphicon glyphicon-remove-sign"></span> Remove</button></td>
<td><button class="btn delete btn-danger btn"><span class="glyphicon glyphicon-remove-sign"></span><span data-i18n="optionsButtonRemove"></span></button></td>
</tr>
</tbody>
</table>
@ -345,15 +344,15 @@
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="myModalLabel">Remove site?</h3>
<h3 id="myModalLabel" data-i18n="optionsIgnoredSitesRemove"></h3>
</div>
<div class="modal-body">
<p>Do you really want to remove the specified site from the list?</p>
<p class="help-block">KeePassXC-Browser will enable all features for this site and remove username-only detection.</p>
<p><span data-i18n="optionsSitePreferencesConfirmation" i18n-placeholder="<strong></strong>"></span></p>
<p class="help-block" data-i18n="optionsSitePreferencesConfirmationHelpText"></p>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
<button class="btn yes btn-primary">Yes, remove now</button>
<button class="btn" data-dismiss="modal" aria-hidden="true"><span data-i18n="optionsButtonCancel"></span></button>
<button class="btn yes btn-primary"><span data-i18n="optionsButtonRemoveNow"></span></button>
</div>
</div>
</div>
@ -362,30 +361,30 @@
<!-- About -->
<div class="tab" id="tab-about">
<h2>About</h2>
<h2 data-i18n="optionsAboutTab"></h2>
<hr />
<p>
<a target="_blank" href="https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk">Visit extension's page in Chrome Web store</a>
<a target="_blank" href="https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk"><span data-i18n="optionsAboutChrome"/></a>
</p>
<p>
<a target="_blank" href="https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/">Visit extension's page in Mozilla's Add-ons page</a>
<a target="_blank" href="https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/"><span data-i18n="optionsAboutMozilla"/></a>
</p>
<p>
<a target="_blank" href="https://github.com/keepassxreboot/keepassxc-browser">Visit project's page in GitHub</a>.
<a target="_blank" href="https://github.com/keepassxreboot/keepassxc-browser"><span data-i18n="optionsAboutGitHub"/></a>.
</p>
<hr />
<p>
KeePassXC-Browser Version: <em class="versionCIP"></em>
<span data-i18n="optionsAboutExtensionVersion" i18n-placeholder="<em class='versionCIP'></em>"></span>
</p>
<p>
KeePassXC Version: <em class="versionKPH"></em>
<span data-i18n="optionsAboutKeePassXCVersion" i18n-placeholder="<em class='versionKPH'></em>"></span>
</p>
<hr />
<p>
Contributors:<br>
<span data-i18n="optionsAboutContributors"></span><br>
<a target="_blank" href="https://github.com/pfn/">Perry Nguyen</a>, <a target="_blank" href="http://lukas-schulze.de">Lukas Schulze</a>,
<a target="_blank" href="https://github.com/smorks">Andy Brandt</a>, <a target="_blank" href="https://github.com/varjolintu/">Sami Vänttinen</a>
and <a target="_blank" href="https://github.com/keepassxreboot/keepassxc-browser">KeePassXC Team</a>.
<a target="_blank" href="https://github.com/smorks">Andy Brandt</a>, <a target="_blank" href="https://github.com/varjolintu/">Sami Vänttinen</a>,
<a target="_blank" href="https://github.com/keepassxreboot/keepassxc-browser">KeePassXC Team</a>.
</p>
</div>
<hr>
@ -393,5 +392,7 @@
<p>(C) 2017-2018 - KeePassXC Team</p>
</div>
</div> <!-- /container -->
<script type="text/javascript" src="../translate.js"></script>
</body>
</html>

View file

@ -1,6 +1,6 @@
<html>
<head>
<title>KeePassXC - Popup</title>
<title data-i18n="popupTitle"></title>
<meta charset="UTF-8">
<link rel="stylesheet" href="popup.css" />
<link rel="stylesheet" href="../options/bootstrap.min.css" />
@ -14,86 +14,70 @@
<body>
<div class="container">
<div id="settings" class="settings">
<button id="btn-options" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-cog"></span> Settings</button>
<button id="btn-choose-credential-fields" class="btn btn-sm btn-warning"><span class="glyphicon glyphicon-list-alt"></span> Choose custom credential fields for this page</button>
<button id="btn-options" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-cog"></span><span data-i18n="popupSettingsText"/></button>
<button id="btn-choose-credential-fields" class="btn btn-sm btn-warning"><span class="glyphicon glyphicon-list-alt"></span><span data-i18n="popupChooseCredentialsText"/></button>
<button id="lock-database-button" class="btn btn-danger" title="Lock database"><span class="glyphicon glyphicon-lock"></span></button>
<div id="update-available" class="alert alert-danger">
You use an old version of KeePassXC.
<span data-i18n="popupUpdateAvailable"></span>
<br />
<a target="_blank" class="alert-link" href="https://keepassxc.org/download">Please download the latest version from keepassxc.org</a>.
<a target="_blank" class="alert-link" href="https://keepassxc.org/download"><span data-i18n="popupDownloadNewVersion"/></a>.
</div>
</div>
<div id="initial-state">
<p><img style="margin-right: 1em" src="throbber.gif"/> Checking status...</p>
<p><img style="margin-right: 1em" src="throbber.gif"/><span data-i18n="popupCheckingStatus"/></p>
</div>
<div id="not-configured" style="display: none">
<p>
KeePassXC-Browser has not been configured.
Press the connect button to register and pair with KeePassXC.
</p>
<p data-i18n="popupNotConfigured"/>
<div style="text-align: right">
<button id="connect-button" class="btn btn-sm btn-primary"><span class="glyphicon glyphicon-link"></span> Connect</button>
<button id="connect-button" class="btn btn-sm btn-primary"><span class="glyphicon glyphicon-link"></span><span data-i18n="popupConnectButton"/></button>
</div>
</div>
<div id="need-reconfigure" style="display: none">
<p>
KeePassXC-Browser has been disconnected from KeePassXC.
</p>
<code id="need-reconfigure-message"></code>
<p>
Press the reconnect button to establish a new connection.
<p data-i18n="popupNeedReconfigure"/>
<p style="margin-left: 1em">
<code id="need-reconfigure-message"></code>
</p>
<p data-i18n="popupNeedReconfigureMessage"/>
<div style="text-align: right">
<button id="reconnect-button" class="btn btn-sm btn-primary"><span class="glyphicon glyphicon-refresh"></span> Reconnect</button>
<button id="reconnect-button" class="btn btn-sm btn-primary"><span class="glyphicon glyphicon-refresh"></span><span data-i18n="popupReconnectButton"/></button>
</div>
</div>
<div id="configured-not-associated" style="display: none">
<p>
KeePassXC-Browser has been configured using the identifier
<em id="unassociated-identifier"></em> and has not yet
connected to KeePassXC.
</p>
<span data-i18n="popupConfiguredNotAssociated" i18n-placeholder="<span class='bg-warning' id='unassociated-identifier'></span>"></span>
</div>
<div id="configured-and-associated" style="display: none">
<p>
KeePassXC-Browser has been configured using the identifier
"<em id="associated-identifier"></em>" and is successfully
connected to KeePassXC.
</p>
<span data-i18n="popupConfiguredAndAssociated" i18n-placeholder="<span class='bg-success' id='associated-identifier'></span>"></span>
<div style="text-align: right">
<button id="redetect-fields-button" class="btn btn-sm btn-primary"><span class="glyphicon glyphicon-list-alt"></span> Redetect credential fields</button>
<button id="redetect-fields-button" class="btn btn-sm btn-primary"><span class="glyphicon glyphicon-list-alt"></span><span data-i18n="popupRedetectButton"/></button>
</div>
</div>
<div id="error-encountered" style="display: none">
<p>
KeePassXC-Browser has encountered an error:
</p>
<p data-i18n="popupErrorEncountered"/>
<p style="margin-left: 1em">
<code id="error-message"></code>
</p>
<div style="text-align: right">
<button id="reload-status-button" class="btn btn-sm btn-primary"><span class="glyphicon glyphicon-refresh"></span> Reload</button>
<button id="reload-status-button" class="btn btn-sm btn-primary"><span class="glyphicon glyphicon-refresh"></span><span data-i18n="popupReloadButton"/></button>
</div>
</div>
<div id="database-not-opened" style="display: none">
<p>
KeePassXC-Browser has encountered an error:
</p>
<p data-i18n="popupErrorEncountered"/>
<p style="margin-left: 1em">
<code id="database-error-message"></code>
</p>
<div style="text-align: right">
<button id="reopen-database-button" class="btn btn-sm btn-primary"><span class="glyphicon glyphicon-lock"></span> Reopen database</button>
<button id="reopen-database-button" class="btn btn-sm btn-primary"><span class="glyphicon glyphicon-lock"></span><span data-i18n="popupReopenButton"/></button>
</div>
</div>
</div>
<script type="text/javascript" src="../translate.js"></script>
</body>
</html>

View file

@ -14,26 +14,25 @@
<body>
<div class="container">
<div id="settings" class="settings">
<button id="btn-options" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-cog"></span> Settings</button>
<button id="btn-choose-credential-fields" class="btn btn-sm btn-warning"><span class="glyphicon glyphicon-list-alt"></span> Choose custom credential fields for this page</button>
<button id="btn-options" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-cog"></span><span data-i18n="popupSettingsText"/></button>
<button id="btn-choose-credential-fields" class="btn btn-sm btn-warning"><span class="glyphicon glyphicon-list-alt"></span><span data-i18n="popupChooseCredentialsText"/></button>
<button id="lock-database-button" class="btn btn-danger" title="Lock database"><span class="glyphicon glyphicon-lock"></span></button>
<div id="update-available" class="alert alert-danger">
You use an old version of KeePassXC.
<span data-i18n="popupUpdateAvailable"></span>
<br />
<a target="_blank" class="alert-link" href="https://keepassxc.org/download">Please download the latest version from keepassxc.org</a>.
<a target="_blank" class="alert-link" href="https://keepassxc.org/download"><span data-i18n="popupDownloadNewVersion"/></a>.
</div>
</div>
</div>
<div class="credentials">
<p>
Select the login information you would like to get logged in with:
</p>
<p data-i18n="popupAuthText"></p>
<div id="login-list" class="list-group"></div>
<p>
<button id="btn-dismiss" class="btn btn-sm btn-danger"><span class="glyphicon glyphicon-remove"></span> Dismiss and show the default authentication dialog</button>
<button id="btn-dismiss" class="btn btn-sm btn-danger"><span class="glyphicon glyphicon-remove"></span><span data-i18n="popupButtonDismissHttpAuth"/></button>
</p>
</div>
</div>
<script type="text/javascript" src="../translate.js"></script>
</body>
</html>

View file

@ -14,27 +14,26 @@
<body>
<div class="container">
<div id="settings" class="settings">
<button id="btn-options" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-cog"></span> Settings</button>
<button id="btn-choose-credential-fields" class="btn btn-sm btn-warning"><span class="glyphicon glyphicon-list-alt"></span> Choose custom credential fields for this page</button>
<button id="btn-options" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-cog"></span><span data-i18n="popupSettingsText"/></button>
<button id="btn-choose-credential-fields" class="btn btn-sm btn-warning"><span class="glyphicon glyphicon-list-alt"></span><span data-i18n="popupChooseCredentialsText"/></button>
<button id="lock-database-button" class="btn btn-danger" title="Lock database"><span class="glyphicon glyphicon-lock"></span></button>
<div id="update-available" class="alert alert-danger">
You use an old version of KeePassXC.
<span data-i18n="popupUpdateAvailable"></span>
<br />
<a target="_blank" class="alert-link" href="https://keepassxc.org/download">Please download the latest version from keepassxc.org</a>.
<a target="_blank" class="alert-link" href="https://keepassxc.org/download"><span data-i18n="popupDownloadNewVersion"/></a>.
</div>
</div>
<div class="credentials">
<p>
Select the login information you would like to get entered into the page:
</p>
<p data-i18n="popupLoginText"></p>
<div id="filter-block" style="display: none;">
<label for="login-filter">Filter:</label>
<label for="login-filter" data-i18n="popupFilterText"></label>
<input type="text" id="login-filter">
</div>
<div id="login-list" class="list-group"></div>
</div>
</div>
<script type="text/javascript" src="../translate.js"></script>
</body>
</html>

View file

@ -1,36 +1,36 @@
<html>
<head>
<title>KeePassXC-Browser - Popup</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="popup.css" />
<link rel="stylesheet" href="../options/bootstrap.min.css" />
<script type="text/javascript" src="../browser-polyfill.min.js"></script>
<script type="text/javascript" src="../global.js"></script>
<script type="text/javascript" src="../jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../options/bootstrap.min.js" /></script>
<script type="text/javascript" src="popup_functions.js"></script>
<title>KeePassXC-Browser - Popup</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="popup.css" />
<link rel="stylesheet" href="../options/bootstrap.min.css" />
<script type="text/javascript" src="../browser-polyfill.min.js"></script>
<script type="text/javascript" src="../global.js"></script>
<script type="text/javascript" src="../jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../options/bootstrap.min.js" /></script>
<script type="text/javascript" src="popup_functions.js"></script>
</head>
<body>
<div class="container">
<div id="settings" class="settings">
<button id="btn-options" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-cog"></span> Settings</button>
<button id="btn-choose-credential-fields" class="btn btn-sm btn-warning"><span class="glyphicon glyphicon-list-alt"></span> Choose custom credential fields for this page</button>
<button id="lock-database-button" class="btn btn-danger" title="Lock database"><span class="glyphicon glyphicon-lock"></span></button>
<div class="container">
<div id="settings" class="settings">
<button id="btn-options" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-cog"></span><span data-i18n="popupSettingsText"/></button>
<button id="btn-choose-credential-fields" class="btn btn-sm btn-warning"><span class="glyphicon glyphicon-list-alt"></span><span data-i18n="popupChooseCredentialsText"/></button>
<button id="lock-database-button" class="btn btn-danger" title="Lock database"><span class="glyphicon glyphicon-lock"></span></button>
<div id="update-available" class="alert alert-danger">
You use an old version of KeePassXC.
<br />
<a target="_blank" class="alert-link" href="https://keepassxc.org/download">Please download the latest version from keepassxc.org</a>.
</div>
</div>
<div id="update-available" class="alert alert-danger">
<span data-i18n="popupUpdateAvailable"></span>
<br />
<a target="_blank" class="alert-link" href="https://keepassxc.org/download"><span data-i18n="popupDownloadNewVersion"/></a>.
</div>
</div>
<div>
<p>
KeePassXC-Browser found more than one password field on this page. To enter your
logins, right-click on one of the password fields, and choose either the
"<code>Fill User + Pass</code>" or "<code>Fill Pass Only</code>" command.
</p>
</div>
</div>
<div>
<p>
<span data-i18n="popupMultiplePasswordFields"></span>
"<code><span data-i18n="contextMenuFillUsernameAndPassword"></span></code>", "<code><span data-i18n="contextMenuFillPassword"></span></code>"
</p>
</div>
</div>
<script type="text/javascript" src="../translate.js"></script>
</body>
</html>

View file

@ -17,36 +17,36 @@
.credentials .username-exists {display: none;}
.small { font-weight: bold; }
.small .normal { font-weight: normal; }
.info { font-weight: normal; }
</style>
</head>
<body>
<div class="buttons">
<p>
Username or password changed! Save it?
<span data-i18n="popupRememberInfoText"></span>
<br />
<span class="small information-url">Url: <span class="normal"></span></span>
<span class="small" data-i18n="popupURL"></span><span class="small info information-url"></span>
<br />
<span class="small information-username">Username: <span class="normal"></span></span>
<span class="small" data-i18n="popupUsername"></span><span class="small info information-username"></span>
</p>
<p>
<button id="btn-new" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-pencil"></span> New</button>
<button id="btn-update" class="btn btn-sm btn-warning"><span class="glyphicon glyphicon-refresh"></span> Update</button>
<button id="btn-dismiss" class="btn btn-sm btn-danger"><span class="glyphicon glyphicon-remove"></span> Dismiss</button>
<button id="btn-ignore" class="btn btn-sm btn-default"><span class="glyphicon glyphicon-remove"></span> Never ask for this page</button>
<button id="btn-new" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-pencil"></span><span data-i18n="popupButtonNew"></span></button>
<button id="btn-update" class="btn btn-sm btn-warning"><span class="glyphicon glyphicon-refresh"></span><span data-i18n="popupButtonUpdate"></span></button>
<button id="btn-dismiss" class="btn btn-sm btn-danger"><span class="glyphicon glyphicon-remove"></span><span data-i18n="popupButtonDismiss"></span></button>
<button id="btn-ignore" class="btn btn-sm btn-default"><span class="glyphicon glyphicon-remove"></span><span data-i18n="popupButtonIgnore"></span></button> <!--missing-->
</p>
</div>
<div class="connected-database">
<p>Credentials will be saved in connected database with identifier <em></em>.</p>
<p data-i18n="popupRememberSaving" i18n-placeholder="<span></span><em></em>"></p>
</div>
<div class="credentials">
<p class="username-new">The used username <strong></strong> is currently not saved!</p>
<p class="username-exists">The credentials with the used username <strong></strong> are marked bold.</p>
<p>
Please choose the credentials you want to update:
</p>
<p class="username-new"><span data-i18n="popupRememberNewUsername" i18n-placeholder="<strong></strong>"></span></p>
<p class="username-exists"><span data-i18n="popupRememberUsernameExists" i18n-placeholder="<strong></strong>"></span></p>
<p data-i18n="popupRememberChooseCredentials"></p>
<ul id="list"></ul>
</div>
<script type="text/javascript" src="../translate.js"></script>
</body>
</html>

View file

@ -23,8 +23,8 @@ function _initialize(tab) {
let url = _tab.credentials.url;
url = (url.length > 50) ? url.substring(0, 50) + '...' : url;
$('.information-url:first span:first').text(url);
$('.information-username:first span:first').text(_tab.credentials.username);
$('.information-url:first').text(url);
$('.information-username:first').text(_tab.credentials.username);
$('#btn-new').click(function(e) {
browser.runtime.sendMessage({

View file

@ -0,0 +1,15 @@
'use strict'
const items = document.querySelectorAll('[data-i18n]');
for (let item of items) {
const key = item.getAttribute('data-i18n');
if (key) {
const placeholder = item.getAttribute('i18n-placeholder');
const translation = placeholder ? browser.i18n.getMessage(key, placeholder) : browser.i18n.getMessage(key);
if (item.hasAttribute('href')) {
item.text = translation;
} else {
item.innerHTML = translation;
}
}
}