diff --git a/.gitignore b/.gitignore index cceb380206..3f44067e8a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .vs +.idea node_modules npm-debug.log lib/ diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json new file mode 100644 index 0000000000..a140022152 --- /dev/null +++ b/src/_locales/en/messages.json @@ -0,0 +1,362 @@ +{ + "appName": { + "message": "bitwarden", + "description": "bitwarden" + }, + "extName": { + "message": "bitwarden - Free Password Manager", + "description": "Extension name." + }, + "extDesc": { + "message": "bitwarden is a secure and free password manager for all of your devices.", + "description": "Extension description" + }, + "loginOrCreateNewAccount": { + "message": "Log in or create a new account to access your secure vault.", + "description": "Log in or create a new account to access your secure vault." + }, + "createAccount": { + "message": "Create Account", + "description": "Create Account" + }, + "login": { + "message": "Log In", + "description": "Log In" + }, + "cancel": { + "message": "Cancel", + "description": "Cancel" + }, + "submit": { + "message": "Submit", + "description": "submit" + }, + "emailAddress": { + "message": "Email Address", + "description": "Email Address" + }, + "masterPass": { + "message": "Master Password", + "description": "Master Password" + }, + "masterPassDesc": { + "message": "The master password is the password you use to access your vault. It is very important that you do not forget your master password. There is no way to recover the password in the event that you forget it.", + "description": "The master password is the password you use to access your vault. It is very important that you do not forget your master password. There is no way to recover the password in the event that you forget it." + }, + "reTypeMasterPass": { + "message": "Re-type Master Password", + "description": "Re-type Master Password" + }, + "masterPassHint": { + "message": "Master Password Hint (optional)", + "description": "Master Password Hint (optional)" + }, + "masterPassHintDecs": { + "message": "A master password hint can help you remember your password if you forget it.", + "description": "A master password hint can help you remember your password if you forget it." + }, + "tab": { + "message": "Tab", + "description": "Tab" + }, + "myVault": { + "message": "My Vault", + "description": "My Vault" + }, + "tools": { + "message": "Tools", + "description": "Tools" + }, + "settings": { + "message": "Settings", + "description": "Settings" + }, + "currentTab": { + "message": "Current Tab", + "description": "Current Tab" + }, + "copyPassword": { + "message": "Copy Password", + "description": "Copy Password" + }, + "copyUsername": { + "message": "Copy Username", + "description": "Copy Username" + }, + "autoFillInfo": { + "message": "There are no sites available to auto-fill for the current browser tab.", + "description": "There are no sites available to auto-fill for the current browser tab." + }, + "addSite": { + "message": "Add a Site", + "description": "Add a Site" + }, + "passwordHint": { + "message": "Password Hint", + "description": "Password Hint" + }, + "enterEmailToGetHint": { + "message": "Enter your account email address to receive your master password hint.", + "description": "Enter your account email address to receive your master password hint." + }, + "getMasterPasswordHint": { + "message": "Get master password hint", + "description": "Get master password hint" + }, + "continue": { + "message": "Continue", + "description": "Continue" + }, + "verificationCode": { + "message": "Verification Code", + "description": "Verification Code" + }, + "enterTwoStepVerCode": { + "message": "Enter your two-step verification code.", + "description": "Enter your two-step verification code." + }, + "account": { + "message": "Account", + "description": "Account" + }, + "changeMasterPassword": { + "message": "Change Master Password", + "description": "Change Master Password" + }, + "changeEmail": { + "message": "Change Email", + "description": "Change Email" + }, + "twoStepLogin": { + "message": "Two-step Login", + "description": "Two-step Login" + }, + "logOut": { + "message": "Log Out", + "description": "Log Out" + }, + "about": { + "message": "About", + "description": "About" + }, + "version": { + "message": "Version", + "description": "Version" + }, + "save": { + "message": "Save", + "description": "Save" + }, + "addFolder": { + "message": "Add Folder", + "description": "Add Folder" + }, + "name": { + "message": "Name", + "description": "Name" + }, + "editFolder": { + "message": "Edit Folder", + "description": "Edit Folder" + }, + "deleteFolder": { + "message": "Delete Folder", + "description": "Delete Folder" + }, + "folders": { + "message": "Folders", + "description": "Folders" + }, + "noFolders": { + "message": "There are no folders to list.", + "description": "There are no folders to list." + }, + "helpFeedback": { + "message": "Help and Feedback", + "description": "Help and Feedback" + }, + "emailUs": { + "message": "Email Us", + "description": "Email Us" + }, + "emailUsDirectly": { + "message": "Email us directly to get help or leave feedback.", + "description": "Email us directly to get help or leave feedback." + }, + "visitOurWebsite": { + "message": "Visit Our Website", + "description": "Visit Our Website" + }, + "visitOurWebsiteDirectly": { + "message": "Visit our website to get help, news, email us, and/or learn more about how to use bitwarden.", + "description": "Visit our website to get help, news, email us, and/or learn more about how to use bitwarden." + }, + "fileBugReport": { + "message": "File a Bug Report", + "description": "File a Bug Report" + }, + "gitHubIssue": { + "message": "Open an issue at our GitHub repository.", + "description": "Open an issue at our GitHub repository." + }, + "sync": { + "message": "Sync", + "description": "Sync" + }, + "syncVaultNow": { + "message": "Sync Vault Now", + "description": "Sync Vault Now" + }, + "lastSync": { + "message": "Last Sync:", + "description": "Last Sync:" + }, + "passGen": { + "message": "Password Generator", + "description": "Password Generator" + }, + "passGenInfo": { + "message": "Automatically generate strong, unique passwords for your logins.", + "description": "Automatically generate strong, unique passwords for your logins." + }, + "bitWebVault": { + "message": "bitwarden Web Vault", + "description": "bitwarden Web Vault" + }, + "bitWebVaultInfo": { + "message": "Manage your logins from any web browser with the bitwarden web vault.", + "description": "Manage your logins from any web browser with the bitwarden web vault." + }, + "bitIosVault": { + "message": "bitwarden iOS Vault", + "description": "bitwarden iOS Vault" + }, + "bitIosVaultInfo": { + "message": "Manage your logins from your mobile devices with the bitwarden iOS vault.", + "description": "Manage your logins from your mobile devices with the bitwarden iOS vault." + }, + "bitAndrVault": { + "message": "bitwarden Android Vault", + "description": "bitwarden Android Vault" + }, + "bitAndrVaultInfo": { + "message": "Manage your logins from your mobile devices with the bitwarden Android vault.", + "description": "Manage your logins from your mobile devices with the bitwarden Android vault." + }, + "importLogins": { + "message": "Import Logins", + "description": "Import Logins" + }, + "importLoginsInfo": { + "message": "Quickly bulk import your logins from other password management applications.", + "description": "Quickly bulk import your logins from other password management applications." + }, + "select": { + "message": "Select", + "description": "Select" + }, + "generatePassword": { + "message": "Generate Password", + "description": "Generate Password" + }, + "regeneratePassword": { + "message": "Regenerate Password", + "description": "Regenerate Password" + }, + "options": { + "message": "Options", + "description": "Options" + }, + "length": { + "message": "Length", + "description": "Length" + }, + "minNumbers": { + "message": "Minimum Numbers", + "description": "Minimum Numbers" + }, + "minSpecial": { + "message": "Minimum Special", + "description": "Minimum Special" + }, + "avoidAmbChar": { + "message": "Avoid Ambiguous Characters", + "description": "Avoid Ambiguous Characters" + }, + "searchVault": { + "message": "Search vault", + "description": "Search vault" + }, + "edit": { + "message": "Edit", + "description": "Edit" + }, + "noSitesInList": { + "message": "There are no sites in list.", + "description": "There are no sites in list." + }, + "siteInformation": { + "message": "Site Information", + "description": "Site Information" + }, + "username": { + "message": "Username", + "description": "Username" + }, + "password": { + "message": "Password", + "description": "Password" + }, + "favorite": { + "message": "Favorite", + "description": "Favorite" + }, + "notes": { + "message": "Notes", + "description": "Notes" + }, + "editSite": { + "message": "Edit Site", + "description": "Edit Site" + }, + "folder": { + "message": "Folder", + "description": "Folder" + }, + "deleteSite": { + "message": "Delete Site", + "description": "Delete Site" + }, + "viewSite": { + "message": "View Site", + "description": "View Site" + }, + "launchWebsite": { + "message": "Launch Website", + "description": "Launch Website" + }, + "website": { + "message": "Website", + "description": "Website" + }, + "togglePassword": { + "message": "Toggle Password", + "description": "Toggle Password" + }, + "manage": { + "message": "Manage", + "description": "Manage" + }, + "other": { + "message": "Other", + "description": "Other" + }, + "rateExtension": { + "message": "Rate the Extension", + "description": "Rate the Extension" + }, + "browserNotSupportClipboard": { + "message": "Your web browser does not support easy clipboard copying. Copy it manually instead.", + "description": "Your web browser does not support easy clipboard copying. Copy it manually instead." + } +} diff --git a/src/manifest.json b/src/manifest.json index c4f6ba23ad..40c02ea9b4 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -1,9 +1,10 @@ { "manifest_version": 2, - "name": "bitwarden - Free Password Manager", - "short_name": "bitwarden", + "name": "__MSG_extName__", + "short_name": "__MSG_appName__", "version": "1.1.0", - "description": "bitwarden is a secure and free password manager for all of your devices.", + "description": "__MSG_extDesc__", + "default_locale": "en", "homepage_url": "https://bitwarden.com", "icons": { "16": "images/icon16.png", diff --git a/src/popup/app/accounts/accountsHintController.js b/src/popup/app/accounts/accountsHintController.js index f4f69d024e..6d97fd1a6e 100644 --- a/src/popup/app/accounts/accountsHintController.js +++ b/src/popup/app/accounts/accountsHintController.js @@ -2,7 +2,8 @@ .module('bit.accounts') .controller('accountsHintController', function ($scope, $state, apiService, toastr, $q, utilsService, - $analytics) { + $analytics, i18nService) { + $scope.i18n = i18nService; $scope.model = {}; utilsService.initListSectionItemListeners($(document), angular); diff --git a/src/popup/app/accounts/accountsLoginController.js b/src/popup/app/accounts/accountsLoginController.js index 7693f4a2a9..23a00bb872 100644 --- a/src/popup/app/accounts/accountsLoginController.js +++ b/src/popup/app/accounts/accountsLoginController.js @@ -2,8 +2,9 @@ .module('bit.accounts') .controller('accountsLoginController', function ($scope, $state, $stateParams, loginService, userService, toastr, - utilsService, $analytics) { + utilsService, $analytics, i18nService) { utilsService.initListSectionItemListeners($(document), angular); + $scope.i18n = i18nService; if ($stateParams.email) { $('#master-password').focus(); diff --git a/src/popup/app/accounts/accountsLoginTwoFactorController.js b/src/popup/app/accounts/accountsLoginTwoFactorController.js index 85e3c1051b..7df4cb16f0 100644 --- a/src/popup/app/accounts/accountsLoginTwoFactorController.js +++ b/src/popup/app/accounts/accountsLoginTwoFactorController.js @@ -2,7 +2,8 @@ .module('bit.accounts') .controller('accountsLoginTwoFactorController', function ($scope, $state, loginService, toastr, utilsService, - $analytics) { + $analytics, i18nService) { + $scope.i18n = i18nService; $scope.model = {}; utilsService.initListSectionItemListeners($(document), angular); $('#code').focus(); diff --git a/src/popup/app/accounts/accountsRegisterController.js b/src/popup/app/accounts/accountsRegisterController.js index 5b4dd042b0..6bae2e8f04 100644 --- a/src/popup/app/accounts/accountsRegisterController.js +++ b/src/popup/app/accounts/accountsRegisterController.js @@ -1,8 +1,11 @@ angular .module('bit.accounts') - .controller('accountsRegisterController', function ($scope, $state, cryptoService, toastr, $q, apiService, utilsService, - $analytics) { + .controller( + 'accountsRegisterController', + function ($scope, $state, cryptoService, toastr, $q, apiService, utilsService, $analytics, i18nService) { + $scope.i18n = i18nService; + $scope.model = {}; utilsService.initListSectionItemListeners($(document), angular); $('#email').focus(); diff --git a/src/popup/app/accounts/views/accountsHint.html b/src/popup/app/accounts/views/accountsHint.html index a9a685326c..bcd508eaa2 100644 --- a/src/popup/app/accounts/views/accountsHint.html +++ b/src/popup/app/accounts/views/accountsHint.html @@ -4,10 +4,10 @@ Log In
- +
-
Password Hint
+
{{ i18n.passwordHint }}
@@ -15,12 +15,12 @@
- - + +
diff --git a/src/popup/app/accounts/views/accountsLogin.html b/src/popup/app/accounts/views/accountsLogin.html index b9be00fbf7..a2176a5e0c 100644 --- a/src/popup/app/accounts/views/accountsLogin.html +++ b/src/popup/app/accounts/views/accountsLogin.html @@ -1,13 +1,13 @@ 
- +
-
bitwarden
+
{{ i18n.bitwarden }}
@@ -15,20 +15,20 @@
- - + +
- - {{ i18n.masterPass }} +

- Get master password hint + {{ i18n.getMasterPasswordHint }}

diff --git a/src/popup/app/accounts/views/accountsLoginTwoFactor.html b/src/popup/app/accounts/views/accountsLoginTwoFactor.html index cf32c96868..28d55954ad 100644 --- a/src/popup/app/accounts/views/accountsLoginTwoFactor.html +++ b/src/popup/app/accounts/views/accountsLoginTwoFactor.html @@ -4,10 +4,10 @@ Log In
- +
-
Verification Code
+
{{ i18n.verificationCode }}
@@ -15,12 +15,12 @@
- - + +
diff --git a/src/popup/app/accounts/views/accountsRegister.html b/src/popup/app/accounts/views/accountsRegister.html index 9f9ce7e404..a7c0c9db83 100644 --- a/src/popup/app/accounts/views/accountsRegister.html +++ b/src/popup/app/accounts/views/accountsRegister.html @@ -1,13 +1,13 @@ 
- +
-
Create Account
+
{{ i18n.createAccount }}
@@ -15,38 +15,37 @@
- - + +
- + + placeholder="{{ i18n.masterPass }}" ng-model="model.masterPassword">
- + + placeholder="{{ i18n.reTypeMasterPass }}" ng-model="model.masterPasswordRetype">
- - {{ i18n.masterPassHint }} +
diff --git a/src/popup/app/current/currentController.js b/src/popup/app/current/currentController.js index 68301d2fd6..2787438408 100644 --- a/src/popup/app/current/currentController.js +++ b/src/popup/app/current/currentController.js @@ -2,7 +2,9 @@ angular .module('bit.current') .controller('currentController', function ($scope, siteService, tldjs, toastr, $q, $window, $state, autofillService, - $analytics) { + $analytics, i18nService) { + $scope.i18n = i18nService; + var pageDetails = null, tabId = null, url = null, @@ -51,7 +53,7 @@ angular } $scope.clipboardError = function (e, password) { - toastr.info('Your web browser does not support easy clipboard copying. Copy it manually instead.'); + toastr.info(i18n.browserNotSupportClipboard); }; $scope.clipboardSuccess = function (e, type) { diff --git a/src/popup/app/current/views/current.html b/src/popup/app/current/views/current.html index 50c439c6c3..2ddd4645b8 100644 --- a/src/popup/app/current/views/current.html +++ b/src/popup/app/current/views/current.html @@ -2,7 +2,7 @@
-
Current Tab
+
{{ i18n.currentTab }}
@@ -10,13 +10,13 @@

- There are no sites available to auto-fill for the current browser tab. - + {{ i18n.autoFillInfo }} +

diff --git a/src/popup/app/global/home.html b/src/popup/app/global/home.html index 057548e376..db19fa8a06 100644 --- a/src/popup/app/global/home.html +++ b/src/popup/app/global/home.html @@ -1,15 +1,15 @@ 
diff --git a/src/popup/app/global/homeController.js b/src/popup/app/global/homeController.js index dec8f9534b..f9f2d6c78c 100644 --- a/src/popup/app/global/homeController.js +++ b/src/popup/app/global/homeController.js @@ -1,6 +1,6 @@ angular .module('bit.global') - .controller('homeController', function ($scope) { - + .controller('homeController', function ($scope, i18nService) { + $scope.i18n = i18nService; }); diff --git a/src/popup/app/global/tabs.html b/src/popup/app/global/tabs.html index 3bace3569f..aa9e673f1d 100644 --- a/src/popup/app/global/tabs.html +++ b/src/popup/app/global/tabs.html @@ -2,16 +2,16 @@ diff --git a/src/popup/app/global/tabsController.js b/src/popup/app/global/tabsController.js index dc3081afcc..24225996bd 100644 --- a/src/popup/app/global/tabsController.js +++ b/src/popup/app/global/tabsController.js @@ -1,6 +1,7 @@ angular .module('bit.global') - .controller('tabsController', function ($scope, $state) { + .controller('tabsController', function ($scope, $state, i18nService) { $scope.$state = $state; + $scope.i18n = i18nService; }); diff --git a/src/popup/app/services/i18n.js b/src/popup/app/services/i18n.js new file mode 100644 index 0000000000..78913650c5 --- /dev/null +++ b/src/popup/app/services/i18n.js @@ -0,0 +1,92 @@ +angular +.module('bit.services') + +.factory('i18nService', function () { + return { + loginOrCreateNewAccount: chrome.i18n.getMessage("loginOrCreateNewAccount"), + createAccount: chrome.i18n.getMessage("createAccount"), + login: chrome.i18n.getMessage("login"), + cancel: chrome.i18n.getMessage("cancel"), + submit: chrome.i18n.getMessage("submit"), + emailAddress: chrome.i18n.getMessage("emailAddress"), + masterPass: chrome.i18n.getMessage("masterPass"), + masterPassDesc: chrome.i18n.getMessage("masterPassDesc"), + reTypeMasterPass: chrome.i18n.getMessage("reTypeMasterPass"), + masterPassHint: chrome.i18n.getMessage("masterPassHint"), + masterPassHintDesc: chrome.i18n.getMessage("masterPassHintDesc"), + tab: chrome.i18n.getMessage("tab"), + myVault: chrome.i18n.getMessage("myVault"), + tools: chrome.i18n.getMessage("tools"), + settings: chrome.i18n.getMessage("settings"), + currentTab: chrome.i18n.getMessage("currentTab"), + copyPassword: chrome.i18n.getMessage("copyPassword"), + copyUsername: chrome.i18n.getMessage("copyUsername"), + autoFillInfo: chrome.i18n.getMessage("autoFillInfo"), + addSite: chrome.i18n.getMessage("addSite"), + passwordHint: chrome.i18n.getMessage("passwordHint"), + enterEmailToGetHint: chrome.i18n.getMessage("enterEmailToGetHint"), + getMasterPasswordHint: chrome.i18n.getMessage("getMasterPasswordHint"), + continue: chrome.i18n.getMessage("continue"), + verificationCode: chrome.i18n.getMessage("verificationCode"), + enterTwoStepVerCode: chrome.i18n.getMessage("enterTwoStepVerCode"), + account: chrome.i18n.getMessage("account"), + changeMasterPassword: chrome.i18n.getMessage("changeMasterPassword"), + changeEmail: chrome.i18n.getMessage("changeEmail"), + twoStepLogin: chrome.i18n.getMessage("twoStepLogin"), + logOut: chrome.i18n.getMessage("logOut"), + about: chrome.i18n.getMessage("about"), + version: chrome.i18n.getMessage("version"), + save: chrome.i18n.getMessage("save"), + addFolder: chrome.i18n.getMessage("addFolder"), + name: chrome.i18n.getMessage("name"), + editFolder: chrome.i18n.getMessage("editFolder"), + deleteFolder: chrome.i18n.getMessage("deleteFolder"), + folders: chrome.i18n.getMessage("folders"), + noFolders: chrome.i18n.getMessage("noFolders"), + helpFeedback: chrome.i18n.getMessage("helpFeedback"), + emailUs: chrome.i18n.getMessage("emailUs"), + emailUsDirectly: chrome.i18n.getMessage("emailUsDirectly"), + visitOurWebsite: chrome.i18n.getMessage("visitOurWebsite"), + visitOurWebsiteDirectly: chrome.i18n.getMessage("visitOurWebsiteDirectly"), + fileBugReport: chrome.i18n.getMessage("fileBugReport"), + gitHubIssue: chrome.i18n.getMessage("gitHubIssue"), + sync: chrome.i18n.getMessage("sync"), + syncVaultNow: chrome.i18n.getMessage("syncVaultNow"), + lastSync: chrome.i18n.getMessage("lastSync"), + passGen: chrome.i18n.getMessage("passGen"), + passGenInfo: chrome.i18n.getMessage("passGenInfo"), + bitWebVault: chrome.i18n.getMessage("bitWebVault"), + bitWebVaultInfo: chrome.i18n.getMessage("bitWebVaultInfo"), + bitIosVault: chrome.i18n.getMessage("bitIosVault"), + bitIosVaultInfo: chrome.i18n.getMessage("bitIosVaultInfo"), + bitAndrVault: chrome.i18n.getMessage("bitAndrVault"), + bitAndrVaultInfo: chrome.i18n.getMessage("bitAndrVaultInfo"), + importLogins: chrome.i18n.getMessage("importLogins"), + importLoginsInfo: chrome.i18n.getMessage("importLoginsInfo"), + select: chrome.i18n.getMessage("select"), + generatePassword: chrome.i18n.getMessage("generatePassword"), + regeneratePassword: chrome.i18n.getMessage("regeneratePassword"), + options: chrome.i18n.getMessage("options"), + length: chrome.i18n.getMessage("length"), + minNumbers: chrome.i18n.getMessage("minNumbers"), + minSpecial: chrome.i18n.getMessage("minSpecial"), + avoidAmbChar: chrome.i18n.getMessage("avoidAmbChar"), + searchVault: chrome.i18n.getMessage("searchVault"), + edit: chrome.i18n.getMessage("edit"), + noSitesInList: chrome.i18n.getMessage("noSitesInList"), + siteInformation: chrome.i18n.getMessage("siteInformation"), + username: chrome.i18n.getMessage("username"), + password: chrome.i18n.getMessage("password"), + favorite: chrome.i18n.getMessage("favorite"), + notes: chrome.i18n.getMessage("notes"), + editSite: chrome.i18n.getMessage("editSite"), + folder: chrome.i18n.getMessage("folder"), + deleteSite: chrome.i18n.getMessage("deleteSite"), + viewSite: chrome.i18n.getMessage("viewSite"), + launchWebsite: chrome.i18n.getMessage("launchWebsite"), + website: chrome.i18n.getMessage("website"), + togglePassword: chrome.i18n.getMessage("togglePassword"), + rateExtension: chrome.i18n.getMessage("rateExtension"), + browserNotSupportClipboard: chrome.i18n.getMessage("browserNotSupportClipboard") + }; +}); diff --git a/src/popup/app/settings/settingsAboutController.js b/src/popup/app/settings/settingsAboutController.js index e946daed36..76f1577c2a 100644 --- a/src/popup/app/settings/settingsAboutController.js +++ b/src/popup/app/settings/settingsAboutController.js @@ -1,7 +1,8 @@ angular .module('bit.settings') - .controller('settingsAboutController', function ($scope) { + .controller('settingsAboutController', function ($scope, i18nService) { + $scope.i18n = i18nService; $scope.year = (new Date()).getFullYear(); $scope.version = chrome.runtime.getManifest().version; }); diff --git a/src/popup/app/settings/settingsAddFolderController.js b/src/popup/app/settings/settingsAddFolderController.js index 03e33ec156..f87c9bb8c7 100644 --- a/src/popup/app/settings/settingsAddFolderController.js +++ b/src/popup/app/settings/settingsAddFolderController.js @@ -2,7 +2,8 @@ angular .module('bit.settings') .controller('settingsAddFolderController', function ($scope, $q, folderService, $state, toastr, utilsService, - $analytics) { + $analytics, i18nService) { + $scope.i18n = i18nService; $scope.folder = {}; utilsService.initListSectionItemListeners($(document), angular); $('#name').focus(); diff --git a/src/popup/app/settings/settingsController.js b/src/popup/app/settings/settingsController.js index 9a938f8f74..93de11c7b3 100644 --- a/src/popup/app/settings/settingsController.js +++ b/src/popup/app/settings/settingsController.js @@ -1,7 +1,8 @@ angular .module('bit.settings') - .controller('settingsController', function ($scope, loginService, $state, SweetAlert, utilsService, $analytics) { + .controller('settingsController', function ($scope, loginService, $state, SweetAlert, utilsService, $analytics, i18nService) { + $scope.i18n = i18nService; $scope.logOut = function () { SweetAlert.swal({ title: 'Log Out', diff --git a/src/popup/app/settings/settingsEditFolderController.js b/src/popup/app/settings/settingsEditFolderController.js index d1c4301e59..f23174b2d7 100644 --- a/src/popup/app/settings/settingsEditFolderController.js +++ b/src/popup/app/settings/settingsEditFolderController.js @@ -2,7 +2,8 @@ .module('bit.settings') .controller('settingsEditFolderController', function ($scope, $stateParams, folderService, toastr, $q, $state, SweetAlert, - utilsService, $analytics) { + utilsService, $analytics, i18nService) { + $scope.i18n = i18nService; $scope.folder = {}; var folderId = $stateParams.folderId; diff --git a/src/popup/app/settings/settingsFoldersController.js b/src/popup/app/settings/settingsFoldersController.js index fff22325af..c68324d1d7 100644 --- a/src/popup/app/settings/settingsFoldersController.js +++ b/src/popup/app/settings/settingsFoldersController.js @@ -1,7 +1,8 @@ angular .module('bit.settings') - .controller('settingsFoldersController', function ($scope, folderService, $q, $state) { + .controller('settingsFoldersController', function ($scope, folderService, $q, $state, i18nService) { + $scope.i18n = i18nService; $scope.loaded = false; load(); diff --git a/src/popup/app/settings/settingsHelpController.js b/src/popup/app/settings/settingsHelpController.js index def5b3d6e4..15cfff8af8 100644 --- a/src/popup/app/settings/settingsHelpController.js +++ b/src/popup/app/settings/settingsHelpController.js @@ -1,7 +1,8 @@ angular .module('bit.settings') - .controller('settingsHelpController', function ($scope, $analytics) { + .controller('settingsHelpController', function ($scope, $analytics, i18nService) { + $scope.i18n = i18nService; $scope.email = function () { $analytics.eventTrack('Selected Help Email'); chrome.tabs.create({ url: 'mailto:hello@bitwarden.com' }); diff --git a/src/popup/app/settings/settingsSyncController.js b/src/popup/app/settings/settingsSyncController.js index fbb67d3e5a..46081aa7a2 100644 --- a/src/popup/app/settings/settingsSyncController.js +++ b/src/popup/app/settings/settingsSyncController.js @@ -1,7 +1,8 @@ angular .module('bit.settings') - .controller('settingsSyncController', function ($scope, syncService, toastr, $analytics) { + .controller('settingsSyncController', function ($scope, syncService, toastr, $analytics, i18nService) { + $scope.i18n = i18nService; $scope.lastSync = '--'; $scope.loading = false; setLastSync(); diff --git a/src/popup/app/settings/views/settings.html b/src/popup/app/settings/views/settings.html index 695e19045c..dfd068e193 100644 --- a/src/popup/app/settings/views/settings.html +++ b/src/popup/app/settings/views/settings.html @@ -1,60 +1,60 @@ 
-
Settings
+
{{ i18n.settings }}
- Other + {{ i18n.other }}
diff --git a/src/popup/app/settings/views/settingsAbout.html b/src/popup/app/settings/views/settingsAbout.html index 77b423d05d..9534795c1b 100644 --- a/src/popup/app/settings/views/settingsAbout.html +++ b/src/popup/app/settings/views/settingsAbout.html @@ -1,13 +1,13 @@ 
-
About
+
{{ i18n.about }}
bitwarden - Version {{version}}
+ {{ i18n.version }} {{version}}
© 8bit Solutions LLC 2015-{{year}}
diff --git a/src/popup/app/settings/views/settingsAddFolder.html b/src/popup/app/settings/views/settingsAddFolder.html index f41dcd87bc..f13d98a94c 100644 --- a/src/popup/app/settings/views/settingsAddFolder.html +++ b/src/popup/app/settings/views/settingsAddFolder.html @@ -1,20 +1,20 @@ 
- +
-
Add Folder
+
{{ i18n.addFolder }}
- +
diff --git a/src/popup/app/settings/views/settingsEditFolder.html b/src/popup/app/settings/views/settingsEditFolder.html index fec85aa945..fd791f53ea 100644 --- a/src/popup/app/settings/views/settingsEditFolder.html +++ b/src/popup/app/settings/views/settingsEditFolder.html @@ -1,20 +1,20 @@ 
- +
-
Edit Folder
+
{{ i18n.editFolder }}
- +
@@ -22,7 +22,7 @@ diff --git a/src/popup/app/settings/views/settingsFolders.html b/src/popup/app/settings/views/settingsFolders.html index ea9f42bc6a..dc628b3cb9 100644 --- a/src/popup/app/settings/views/settingsFolders.html +++ b/src/popup/app/settings/views/settingsFolders.html @@ -1,6 +1,6 @@ 
@@ -20,9 +20,9 @@

- There are no folders to list. + {{ i18n.noFolders }} Add a Folder + class="btn btn-link btn-block">{{ i18n.addFolder }}

diff --git a/src/popup/app/settings/views/settingsHelp.html b/src/popup/app/settings/views/settingsHelp.html index f3e3f58c11..73e8eddc4a 100644 --- a/src/popup/app/settings/views/settingsHelp.html +++ b/src/popup/app/settings/views/settingsHelp.html @@ -1,42 +1,42 @@ 
-
Help and Feedback
+
{{ i18n.helpFeedback }}
diff --git a/src/popup/app/settings/views/settingsSync.html b/src/popup/app/settings/views/settingsSync.html index 97fd7c8425..fa0f981587 100644 --- a/src/popup/app/settings/views/settingsSync.html +++ b/src/popup/app/settings/views/settingsSync.html @@ -1,16 +1,16 @@ 
-
Sync
+
{{ i18n.sync }}

- Sync Vault Now + {{ i18n.syncVaultNow }} - Last Sync: {{lastSync}} + {{ i18n.lastSync }} {{lastSync}} diff --git a/src/popup/app/tools/toolsController.js b/src/popup/app/tools/toolsController.js index e6a46152b8..9124b99403 100644 --- a/src/popup/app/tools/toolsController.js +++ b/src/popup/app/tools/toolsController.js @@ -1,7 +1,8 @@ angular .module('bit.tools') - .controller('toolsController', function ($scope, SweetAlert) { + .controller('toolsController', function ($scope, SweetAlert, i18nService) { + $scope.i18n = i18nService; $scope.launchWebVault = function () { chrome.tabs.create({ url: 'https://vault.bitwarden.com' }); }; diff --git a/src/popup/app/tools/toolsPasswordGeneratorController.js b/src/popup/app/tools/toolsPasswordGeneratorController.js index cd44239132..dcd1236520 100644 --- a/src/popup/app/tools/toolsPasswordGeneratorController.js +++ b/src/popup/app/tools/toolsPasswordGeneratorController.js @@ -2,7 +2,8 @@ .module('bit.tools') .controller('toolsPasswordGeneratorController', function ($scope, $state, $stateParams, passwordGenerationService, - toastr, $q, utilsService, $analytics) { + toastr, $q, utilsService, $analytics, i18nService) { + $scope.i18n = i18nService; var addState = $stateParams.addState, editState = $stateParams.editState; @@ -62,7 +63,7 @@ }; $scope.clipboardError = function (e, password) { - toastr.info('Your web browser does not support easy clipboard copying. Copy it manually instead.'); + toastr.info(i18n.browserNotSupportClipboard); }; $scope.clipboardSuccess = function (e) { diff --git a/src/popup/app/tools/views/tools.html b/src/popup/app/tools/views/tools.html index 986941e6d2..377dfc40b6 100644 --- a/src/popup/app/tools/views/tools.html +++ b/src/popup/app/tools/views/tools.html @@ -1,5 +1,5 @@ 

-
Tools
+
{{ i18n.tools }}
-
Generate Password
+
{{ i18n.generatePassword }}
@@ -15,21 +15,21 @@
- Options + {{ i18n.options }}
- + {{slider.value}} @@ -55,12 +55,12 @@
- +
- +
@@ -69,7 +69,7 @@
- +
diff --git a/src/popup/app/vault/vaultAddSiteController.js b/src/popup/app/vault/vaultAddSiteController.js index 629c5d1d30..d3312de87a 100644 --- a/src/popup/app/vault/vaultAddSiteController.js +++ b/src/popup/app/vault/vaultAddSiteController.js @@ -2,7 +2,8 @@ .module('bit.vault') .controller('vaultAddSiteController', function ($scope, $state, $stateParams, siteService, folderService, - cryptoService, $q, toastr, utilsService, $analytics) { + cryptoService, $q, toastr, utilsService, $analytics, i18nService) { + $scope.i18n = i18nService; var returnScrollY = $stateParams.returnScrollY; var returnSearchText = $stateParams.returnSearchText; var fromCurrent = $stateParams.fromCurrent || $stateParams.uri !== null; diff --git a/src/popup/app/vault/vaultController.js b/src/popup/app/vault/vaultController.js index 82ec6a5d3e..39f048868a 100644 --- a/src/popup/app/vault/vaultController.js +++ b/src/popup/app/vault/vaultController.js @@ -2,7 +2,8 @@ .module('bit.vault') .controller('vaultController', function ($scope, $rootScope, siteService, folderService, $q, $state, $stateParams, toastr, - syncService, utilsService, $analytics) { + syncService, utilsService, $analytics, i18nService) { + $scope.i18n = i18nService; $('#search').focus(); var syncOnLoad = $stateParams.syncOnLoad; @@ -109,7 +110,7 @@ }; $scope.clipboardError = function (e) { - toastr.info('Your web browser does not support easy clipboard copying. Copy it manually instead.'); + toastr.info(i18n.browserNotSupportClipboard); }; $scope.clipboardSuccess = function (e, type) { diff --git a/src/popup/app/vault/vaultEditSiteController.js b/src/popup/app/vault/vaultEditSiteController.js index e0f1d1f3f6..988309922e 100644 --- a/src/popup/app/vault/vaultEditSiteController.js +++ b/src/popup/app/vault/vaultEditSiteController.js @@ -2,7 +2,8 @@ angular .module('bit.vault') .controller('vaultEditSiteController', function ($scope, $state, $stateParams, siteService, folderService, - cryptoService, $q, toastr, SweetAlert, utilsService, $analytics) { + cryptoService, $q, toastr, SweetAlert, utilsService, $analytics, i18nService) { + $scope.i18n = i18nService; var returnScrollY = $stateParams.returnScrollY; var returnSearchText = $stateParams.returnSearchText; var siteId = $stateParams.siteId; diff --git a/src/popup/app/vault/vaultViewSiteController.js b/src/popup/app/vault/vaultViewSiteController.js index 04b12ef4e5..4cf48a4008 100644 --- a/src/popup/app/vault/vaultViewSiteController.js +++ b/src/popup/app/vault/vaultViewSiteController.js @@ -2,7 +2,8 @@ angular .module('bit.vault') .controller('vaultViewSiteController', function ($scope, $state, $stateParams, siteService, tldjs, toastr, $q, - $analytics) { + $analytics, i18nService) { + $scope.i18n = i18nService; var returnScrollY = $stateParams.returnScrollY; var returnSearchText = $stateParams.returnSearchText; @@ -66,7 +67,7 @@ angular }; $scope.clipboardError = function (e, password) { - toastr.info('Your web browser does not support easy clipboard copying. Copy it manually instead.'); + toastr.info(i18n.browserNotSupportClipboard); }; $scope.clipboardSuccess = function (e, type) { diff --git a/src/popup/app/vault/views/vault.html b/src/popup/app/vault/views/vault.html index 1bc0cf53d0..d523c712a0 100644 --- a/src/popup/app/vault/views/vault.html +++ b/src/popup/app/vault/views/vault.html @@ -3,7 +3,7 @@
@@ -16,7 +16,7 @@ {{folder.name}}
- @@ -38,8 +38,8 @@

- There are no sites to list. - + {{ i18n.noSitesInList }} +

diff --git a/src/popup/app/vault/views/vaultAddSite.html b/src/popup/app/vault/views/vaultAddSite.html index 7164aa0798..3f6cc1111a 100644 --- a/src/popup/app/vault/views/vaultAddSite.html +++ b/src/popup/app/vault/views/vaultAddSite.html @@ -1,23 +1,23 @@ 
- +
-
Add Site
+
{{ i18n.addSite }}
- Site Information + {{ i18n.siteInformation }}
- +
@@ -25,15 +25,15 @@
- +
- +
- Generate Password + {{ i18n.generatePassword }}
@@ -49,14 +49,14 @@
- +
- +
diff --git a/src/popup/app/vault/views/vaultEditSite.html b/src/popup/app/vault/views/vaultEditSite.html index 48c39e6099..8c4647765b 100644 --- a/src/popup/app/vault/views/vaultEditSite.html +++ b/src/popup/app/vault/views/vaultEditSite.html @@ -1,23 +1,23 @@ 
- +
-
Edit Site
+
{{ i18n.editSite }}
- Site Information + {{ i18n.siteInformation }}
- +
@@ -25,15 +25,15 @@
- +
- +
- Generate Password + {{ i18n.generatePassword }}
@@ -41,7 +41,7 @@
- +
- +
- +
@@ -67,7 +67,7 @@ diff --git a/src/popup/app/vault/views/vaultViewSite.html b/src/popup/app/vault/views/vaultViewSite.html index 221cedd4f7..e846873e37 100644 --- a/src/popup/app/vault/views/vaultViewSite.html +++ b/src/popup/app/vault/views/vaultViewSite.html @@ -1,48 +1,48 @@ 
-
View Site
+
{{ i18n.viewSite }}
- Site Information + {{ i18n.siteInformation }}
- Name + {{ i18n.name }} {{site.name}}
- - Website + {{ i18n.website }} {{site.website}}
- - Username + {{ i18n.username }} {{site.username}}
- - + - Password + {{ i18n.password }} {{site.maskedPassword}} {{site.password}}
@@ -50,7 +50,7 @@
- Notes + {{ i18n.notes }}
diff --git a/src/popup/index.html b/src/popup/index.html index 2f548215ce..c5e7e8fd3e 100644 --- a/src/popup/index.html +++ b/src/popup/index.html @@ -40,6 +40,7 @@ +