From 6d60eb621e02854e99026d7e6d2c36b9717d0f65 Mon Sep 17 00:00:00 2001 From: Artem Nikolaev Date: Tue, 18 Oct 2016 15:10:40 +0300 Subject: [PATCH] i18n support added support for i18n --- .gitignore | 1 + src/_locales/en/messages.json | 362 ++++++++++++++++++ src/manifest.json | 7 +- .../app/accounts/accountsHintController.js | 3 +- .../app/accounts/accountsLoginController.js | 3 +- .../accountsLoginTwoFactorController.js | 3 +- .../accounts/accountsRegisterController.js | 7 +- .../app/accounts/views/accountsHint.html | 10 +- .../app/accounts/views/accountsLogin.html | 16 +- .../views/accountsLoginTwoFactor.html | 10 +- .../app/accounts/views/accountsRegister.html | 27 +- src/popup/app/current/currentController.js | 6 +- src/popup/app/current/views/current.html | 10 +- src/popup/app/global/home.html | 6 +- src/popup/app/global/homeController.js | 4 +- src/popup/app/global/tabs.html | 8 +- src/popup/app/global/tabsController.js | 3 +- src/popup/app/services/i18n.js | 92 +++++ .../app/settings/settingsAboutController.js | 3 +- .../settings/settingsAddFolderController.js | 3 +- src/popup/app/settings/settingsController.js | 3 +- .../settings/settingsEditFolderController.js | 3 +- .../app/settings/settingsFoldersController.js | 3 +- .../app/settings/settingsHelpController.js | 3 +- .../app/settings/settingsSyncController.js | 3 +- src/popup/app/settings/views/settings.html | 26 +- .../app/settings/views/settingsAbout.html | 6 +- .../app/settings/views/settingsAddFolder.html | 8 +- .../settings/views/settingsEditFolder.html | 10 +- .../app/settings/views/settingsFolders.html | 6 +- .../app/settings/views/settingsHelp.html | 16 +- .../app/settings/views/settingsSync.html | 8 +- src/popup/app/tools/toolsController.js | 3 +- .../tools/toolsPasswordGeneratorController.js | 5 +- src/popup/app/tools/views/tools.html | 22 +- .../tools/views/toolsPasswordGenerator.html | 18 +- src/popup/app/vault/vaultAddSiteController.js | 3 +- src/popup/app/vault/vaultController.js | 5 +- .../app/vault/vaultEditSiteController.js | 3 +- .../app/vault/vaultViewSiteController.js | 5 +- src/popup/app/vault/views/vault.html | 10 +- src/popup/app/vault/views/vaultAddSite.html | 20 +- src/popup/app/vault/views/vaultEditSite.html | 24 +- src/popup/app/vault/views/vaultViewSite.html | 26 +- src/popup/index.html | 1 + 45 files changed, 651 insertions(+), 173 deletions(-) create mode 100644 src/_locales/en/messages.json create mode 100644 src/popup/app/services/i18n.js diff --git a/.gitignore b/.gitignore index cceb3802062..3f44067e8a1 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 00000000000..a140022152d --- /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 c4f6ba23adf..40c02ea9b4a 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 f4f69d024ed..6d97fd1a6ec 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 7693f4a2a9e..23a00bb8722 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 85e3c1051bb..7df4cb16f04 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 5b4dd042b09..6bae2e8f04d 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 a9a685326c0..bcd508eaa29 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 b9be00fbf76..a2176a5e0c0 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 cf32c968688..28d55954adf 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 9f9ce7e404e..a7c0c9db837 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 68301d2fd64..27874384083 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 50c439c6c3b..2ddd4645b89 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 057548e3767..db19fa8a06e 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 dec8f9534b0..f9f2d6c78cb 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 3bace3569f2..aa9e673f1d5 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 dc3081afcc0..24225996bdb 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 00000000000..78913650c5e --- /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 e946daed36a..76f1577c2a7 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 03e33ec156b..f87c9bb8c7e 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 9a938f8f74d..93de11c7b3d 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 d1c4301e59d..f23174b2d77 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 fff22325af9..c68324d1d77 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 def5b3d6e48..15cfff8af83 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 fbb67d3e5ad..46081aa7a26 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 695e19045c5..dfd068e1937 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 77b423d05d5..9534795c1b1 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 f41dcd87bc8..f13d98a94c4 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 fec85aa945a..fd791f53eaf 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 ea9f42bc6a8..dc628b3cb92 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 f3e3f58c11a..73e8eddc4a1 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 97fd7c84258..fa0f9815872 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 e6a46152b8a..9124b994031 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 cd44239132d..dcd1236520b 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 986941e6d29..377dfc40b62 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 629c5d1d302..d3312de87a5 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 82ec6a5d3eb..39f048868a3 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 e0f1d1f3f64..988309922e1 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 04b12ef4e52..4cf48a4008c 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 1bc0cf53d0e..d523c712a06 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 7164aa07986..3f6cc1111a7 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 48c39e6099b..8c4647765bd 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 221cedd4f75..e846873e37f 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 2f548215ced..c5e7e8fd3e6 100644 --- a/src/popup/index.html +++ b/src/popup/index.html @@ -40,6 +40,7 @@ +