diff options
author | brantje <brantje@gmail.com> | 2016-12-21 16:06:29 +0300 |
---|---|---|
committer | brantje <brantje@gmail.com> | 2016-12-21 16:06:29 +0300 |
commit | b1aebc4a1452d950a5c8f63629e129f17caf5986 (patch) | |
tree | d5a32ef9a39bcbe0adbbd8e8f0b4c7ed801fa440 | |
parent | 5e119ff7ed7191acb6626f96c2bba3de7a9393d7 (diff) |
Add translations to javascript files
-rw-r--r-- | controller/translationcontroller.php | 75 | ||||
-rw-r--r-- | js/app/controllers/bookmarklet.js | 37 | ||||
-rw-r--r-- | js/app/controllers/credential.js | 15 | ||||
-rw-r--r-- | js/app/controllers/edit_credential.js | 36 | ||||
-rw-r--r-- | js/app/controllers/export.js | 8 | ||||
-rw-r--r-- | js/app/controllers/import.js | 17 | ||||
-rw-r--r-- | js/app/controllers/public_shared_credential.js | 4 | ||||
-rw-r--r-- | js/app/controllers/revision.js | 8 | ||||
-rw-r--r-- | js/app/controllers/settings.js | 30 | ||||
-rw-r--r-- | js/app/controllers/share.js | 21 | ||||
-rw-r--r-- | js/app/controllers/vault.js | 10 | ||||
-rw-r--r-- | js/app/directives/credentialfield.js | 14 | ||||
-rw-r--r-- | js/app/directives/passwordgen.js | 13 | ||||
-rw-r--r-- | js/app/directives/progressbar.js | 8 | ||||
-rw-r--r-- | tests/unit/controller/TranslationControllerTest.php | 3 |
15 files changed, 191 insertions, 108 deletions
diff --git a/controller/translationcontroller.php b/controller/translationcontroller.php index e0d25e83..a6c8f8a0 100644 --- a/controller/translationcontroller.php +++ b/controller/translationcontroller.php @@ -34,6 +34,81 @@ class TranslationController extends ApiController { */ public function getLanguageStrings($lang) { $translations = array( + // js/app/controllers/bookmarklet.js + 'generating.sharing.keys' => $this->trans->t('Generating sharing keys ( %step / 2)'), + 'invalid.vault.key' => $this->trans->t('Incorrect vault password!'), + 'password.do.not.match' => $this->trans->t('Passwords do not match'), + 'general' => $this->trans->t('General'), + 'custom.fields' => $this->trans->t('Custom Fields'), + 'error.no.label' => $this->trans->t('Please fill in a label!'), + 'error.no.value' => $this->trans->t('Please fill in a value!'), + 'error.loading.file' => $this->trans->t('Error loading file'), + + // js/app/controllers/credential.js + 'error.decrypt' => $this->trans->t('An error happend during decryption'), + 'credential.created' => $this->trans->t('Credential created!'), + 'credential.deleted' => $this->trans->t('Credential deleted'), + 'credential.updated' => $this->trans->t('Credential updated'), + 'credential.recovered' => $this->trans->t('Credential recovered'), + 'credential.destroyed' => $this->trans->t('Credential recovered'), + 'error.loading.file.perm' => $this->trans->t('Error downloading file, you probably don\'t have enough permissions'), + + // js/app/controllers/edit_credential.js + + + // js/app/controllers/export.js + 'export.starting' => $this->trans->t('Starting export'), + 'export.decrypt' => $this->trans->t('Decrypting credentials'), + 'done' => $this->trans->t('Done'), + + // js/app/controllers/import.js + 'import.file.read' => $this->trans->t('File read successfully!'), + + 'import.no.label' => $this->trans->t('Credential has no label, skipping'), + 'import.adding' => $this->trans->t('Adding {{credential}}'), + 'import.added' => $this->trans->t('Added {{credential}}'), + 'import.loaded' => $this->trans->t('Parsed {{num}} credentials, starting to import'), + + // js/app/controllers/revision.js + 'revision.deleted' => $this->trans->t('Revision deleted'), + 'revision.restored' => $this->trans->t('Revision restored'), + + // js/app/controllers/settings.js + 'bookmarklet.text' => $this->trans->t('Save in passman'), + 'settings.saved' => $this->trans->t('Settings saved'), + 'settings.general' => $this->trans->t('General settings'), + 'settings.audit' => $this->trans->t('Password Audit'), + 'settings.password' => $this->trans->t('Password settings'), + 'settings.import' => $this->trans->t('Import credentials'), + 'settings.export' => $this->trans->t('Export credentials'), + 'settings.sharing' => $this->trans->t('Sharing'), + 'changepw.navigate.away.warning' => $this->trans->t('Are you sure you want to leave? This WILL corrupt all your credentials'), + 'incorrect.password' => $this->trans->t('Your old password is incorrect!'), + 'password.no.match' => $this->trans->t('New passwords do not match!'), + 'login.new.pass' => $this->trans->t('Please login with your new vault password'), + + // js/app/controllers/share.js + 'share.u.g' => $this->trans->t('Share with users and groups'), + 'share.link' => $this->trans->t('Share link'), + 'share.navigate.away.warning' => $this->trans->t('Are you sure you want to leave? This will corrupt this credential'), + 'credential.unshared' => $this->trans->t('Credential unshared'), + 'credential.shared' => $this->trans->t('Credential shared'), + 'saved' => $this->trans->t('Saved!'), + + // js/app/directives/credentialfield.js + 'toggle.visibility' => $this->trans->t('Toggle visibility'), + 'copy' => $this->trans->t('Copy to clipboard'), + 'copied' => $this->trans->t('Copied to clipboard!'), + + // js/app/directives/passwordgen.js + 'password.gen' => $this->trans->t('Generate password'), + 'password.copy' => $this->trans->t('Copy password to clipboard'), + 'password.copied' => $this->trans->t('Password copied to clipboard!'), + + // js/app/directives/progressbar.js + 'complete' => $this->trans->t('Complete'), + + // templates/views/partials/edit_credential/basics.html 'username' => $this->trans->t('Username'), 'password.r' => $this->trans->t('Repeat password'), diff --git a/js/app/controllers/bookmarklet.js b/js/app/controllers/bookmarklet.js index 7696cb0a..ed24686a 100644 --- a/js/app/controllers/bookmarklet.js +++ b/js/app/controllers/bookmarklet.js @@ -32,8 +32,8 @@ * Controller of the passmanApp */ angular.module('passmanApp') - .controller('BookmarkletCtrl', ['$scope', '$rootScope', '$location', 'VaultService', 'CredentialService', 'SettingsService', 'NotificationService', 'EncryptService', 'TagService', 'FileService', 'ShareService', - function ($scope, $rootScope, $location, VaultService, CredentialService, SettingsService, NotificationService, EncryptService, TagService, FileService, ShareService) { + .controller('BookmarkletCtrl', ['$scope', '$rootScope', '$location', 'VaultService', 'CredentialService', 'SettingsService', 'NotificationService', 'EncryptService', 'TagService', 'FileService', 'ShareService', '$translate', + function ($scope, $rootScope, $location, VaultService, CredentialService, SettingsService, NotificationService, EncryptService, TagService, FileService, ShareService, $translate) { $scope.active_vault = false; $scope.http_warning_hidden = true; @@ -114,7 +114,9 @@ var key_size = 1024; ShareService.generateRSAKeys(key_size).progress(function (progress) { var p = progress > 0 ? 2 : 1; - $scope.creating_keys = 'Generating sharing keys (' + p + ' / 2)'; + var msg = $translate.instant('generating.sharing.keys'); + msg = msg.replace('%step', p); + $scope.creating_keys = msg; $scope.$digest(); }).then(function (kp) { var pem = ShareService.rsaKeyPairToPEM(kp); @@ -149,7 +151,7 @@ _loginToVault(vault, vault_key); } catch (e) { - $scope.error = 'Incorrect vault password!'; + $scope.error = $translate.instant('invalid.vault.key'); } }; @@ -157,7 +159,7 @@ $scope.createVault = function (vault_name, vault_key, vault_key2) { if (vault_key !== vault_key2) { - $scope.error = 'Passwords do not match'; + $scope.error = $translate.instant('password.do.not.match'); return; } VaultService.createVault(vault_name).then(function (vault) { @@ -217,29 +219,29 @@ }; $scope.currentTab = { - title: 'General', + title: $translate.instant('general'), url: 'views/partials/forms/edit_credential/basics.html', color: 'blue' }; $scope.tabs = [{ - title: 'General', + title: $translate.instant('general'), url: 'views/partials/forms/edit_credential/basics.html', color: 'blue' }, { - title: 'Password', + title: $translate.instant('password'), url: 'views/partials/forms/edit_credential/password.html', color: 'green' }, { - title: 'Custom fields', + title: $translate.instant('custom.fields'), url: 'views/partials/forms/edit_credential/custom_fields.html', color: 'orange' }, { - title: 'Files', + title: $translate.instant('files'), url: 'views/partials/forms/edit_credential/files.html', color: 'yellow' }, { - title: 'OTP', + title: $translate.instant('otp'), url: 'views/partials/forms/edit_credential/otp.html', color: 'purple' }]; @@ -249,11 +251,6 @@ return TagService.searchTag($query); }; - $scope.currentTab = { - title: 'General', - url: 'views/partials/forms/edit_credential/basics.html', - color: 'blue' - }; $scope.onClickTab = function (tab) { $scope.currentTab = tab; @@ -284,10 +281,10 @@ var _field = angular.copy($scope.new_custom_field); if (!_field.label) { - NotificationService.showNotification('Please fill in a label', 3000); + NotificationService.showNotification($translate.instant('error.no.label'), 3000); } if (!_field.value) { - NotificationService.showNotification('Please fill in a value!', 3000); + NotificationService.showNotification($translate.instant('error.no.value'), 3000); } if (!_field.label || !_field.value) { return; @@ -363,7 +360,7 @@ }; $scope.fileLoadError = function (error) { - console.log('Error loading file', error); + console.log($translate.instant('error.loading.file'), error); }; $scope.selected_file = ''; @@ -409,7 +406,7 @@ $scope.storedCredential.vault_id = $scope.active_vault.vault_id; CredentialService.createCredential($scope.storedCredential).then(function () { - NotificationService.showNotification('Credential created!', 5000); + NotificationService.showNotification($translate.instant('credential.created'), 5000); }); } }; diff --git a/js/app/controllers/credential.js b/js/app/controllers/credential.js index 3366bc21..9da82b14 100644 --- a/js/app/controllers/credential.js +++ b/js/app/controllers/credential.js @@ -33,8 +33,8 @@ */ angular.module('passmanApp') .controller('CredentialCtrl', ['$scope', 'VaultService', 'SettingsService', '$location', 'CredentialService', - '$rootScope', 'FileService', 'EncryptService', 'TagService', '$timeout', 'NotificationService', 'CacheService', 'ShareService', 'SharingACL', '$interval', '$filter', '$routeParams', '$sce', - function ($scope, VaultService, SettingsService, $location, CredentialService, $rootScope, FileService, EncryptService, TagService, $timeout, NotificationService, CacheService, ShareService, SharingACL, $interval, $filter, $routeParams, $sce) { + '$rootScope', 'FileService', 'EncryptService', 'TagService', '$timeout', 'NotificationService', 'CacheService', 'ShareService', 'SharingACL', '$interval', '$filter', '$routeParams', '$sce', '$translate', + function ($scope, VaultService, SettingsService, $location, CredentialService, $rootScope, FileService, EncryptService, TagService, $timeout, NotificationService, CacheService, ShareService, SharingACL, $interval, $filter, $routeParams, $sce, $translate) { $scope.active_vault = VaultService.getActiveVault(); if (!SettingsService.getSetting('defaultVault') || !SettingsService.getSetting('defaultVaultPass')) { if (!$scope.active_vault) { @@ -71,7 +71,8 @@ } _credential.tags_raw = _credential.tags; } catch (e) { - NotificationService.showNotification('An error happend during decryption', 5000); + + NotificationService.showNotification($translate.instant('error.decrypt'), 5000); //$rootScope.$broadcast('logout'); //SettingsService.setSetting('defaultVaultPass', null); //.setSetting('defaultVault', null); @@ -239,7 +240,7 @@ if (notification) { NotificationService.hideNotification(notification); } - notification = NotificationService.showNotification('Credential deleted', 5000, + notification = NotificationService.showNotification($translate.instant('credential.deleted'), 5000, function () { CredentialService.updateCredential(_credential).then(function (result) { if (result.delete_time > 0) { @@ -268,7 +269,7 @@ if (notification) { NotificationService.hideNotification(notification); } - NotificationService.showNotification('Credential recovered', 5000, + NotificationService.showNotification($translate.instant('credential.recovered'), 5000, function () { CredentialService.updateCredential(_credential).then(function () { notification = false; @@ -284,7 +285,7 @@ for (var i = 0; i < $scope.active_vault.credentials.length; i++) { if ($scope.active_vault.credentials[i].credential_id === credential.credential_id) { $scope.active_vault.credentials.splice(i, 1); - NotificationService.showNotification('Credential destroyed', 5000); + NotificationService.showNotification($translate.instant('credential.destroyed)'), 5000); break; } } @@ -389,7 +390,7 @@ var callback = function (result) { var key = null; if (!result.hasOwnProperty('file_data')) { - NotificationService.showNotification('Error downloading file, you probably don\'t have enough permissions', 5000); + NotificationService.showNotification($translate.instant('error.loading.file.perm'), 5000); return; } diff --git a/js/app/controllers/edit_credential.js b/js/app/controllers/edit_credential.js index 930b3ca2..3b432041 100644 --- a/js/app/controllers/edit_credential.js +++ b/js/app/controllers/edit_credential.js @@ -32,8 +32,8 @@ * Controller of the passmanApp */ angular.module('passmanApp') - .controller('CredentialEditCtrl', ['$scope', 'VaultService', 'CredentialService', 'SettingsService', '$location', '$routeParams', 'FileService', 'EncryptService', 'TagService', 'NotificationService', 'ShareService', - function ($scope, VaultService, CredentialService, SettingsService, $location, $routeParams, FileService, EncryptService, TagService, NotificationService, ShareService) { + .controller('CredentialEditCtrl', ['$scope', 'VaultService', 'CredentialService', 'SettingsService', '$location', '$routeParams', 'FileService', 'EncryptService', 'TagService', 'NotificationService', 'ShareService', '$translate', + function ($scope, VaultService, CredentialService, SettingsService, $location, $routeParams, FileService, EncryptService, TagService, NotificationService, ShareService, $translate) { $scope.active_vault = VaultService.getActiveVault(); if (!SettingsService.getSetting('defaultVault') || !SettingsService.getSetting('defaultVaultPass')) { if (!$scope.active_vault) { @@ -67,29 +67,34 @@ }); }); + $scope.currentTab = { + title: $translate.instant('general'), + url: 'views/partials/forms/edit_credential/basics.html', + color: 'blue' + }; + $scope.tabs = [{ - title: 'General', + title: $translate.instant('general'), url: 'views/partials/forms/edit_credential/basics.html', color: 'blue' }, { - title: 'Password', + title: $translate.instant('password'), url: 'views/partials/forms/edit_credential/password.html', color: 'green' }, { - title: 'Custom fields', + title: $translate.instant('custom.fields'), url: 'views/partials/forms/edit_credential/custom_fields.html', color: 'orange' }, { - title: 'Files', + title: $translate.instant('files'), url: 'views/partials/forms/edit_credential/files.html', color: 'yellow' }, { - title: 'OTP', + title: $translate.instant('otp'), url: 'views/partials/forms/edit_credential/otp.html', color: 'purple' }]; - if ($scope.active_vault) { $scope.$parent.selectedVault = true; } @@ -109,11 +114,6 @@ return TagService.searchTag($query); }; - $scope.currentTab = { - title: 'General', - url: 'views/partials/forms/edit_credential/basics.html', - color: 'blue' - }; $scope.onClickTab = function (tab) { $scope.currentTab = tab; @@ -145,10 +145,10 @@ var _field = angular.copy($scope.new_custom_field); if (!_field.label) { - NotificationService.showNotification('Please fill in a label', 3000); + NotificationService.showNotification($translate.instant('error.no.label'), 3000); } if (!_field.value) { - NotificationService.showNotification('Please fill in a value!', 3000); + NotificationService.showNotification($translate.instant('error.no.value'), 3000); } if (!_field.label || !_field.value) { return; @@ -250,7 +250,7 @@ }; $scope.fileLoadError = function (error) { - console.log('Error loading file', error); + console.log($translate.instant('error.loading.file'), error); }; $scope.selected_file = ''; @@ -304,7 +304,7 @@ $scope.storedCredential.vault_id = $scope.active_vault.vault_id; CredentialService.createCredential($scope.storedCredential).then(function () { $location.path('/vault/' + $routeParams.vault_id); - NotificationService.showNotification('Credential created!', 5000); + NotificationService.showNotification($translate.instant('credential.created'), 5000); }); } else { @@ -335,7 +335,7 @@ CredentialService.updateCredential(_credential, _useKey).then(function () { SettingsService.setSetting('edit_credential', null); $location.path('/vault/' + $routeParams.vault_id); - NotificationService.showNotification('Credential updated!', 5000); + NotificationService.showNotification($translate.instant('credential.updated'), 5000); }); } diff --git a/js/app/controllers/export.js b/js/app/controllers/export.js index 51f9ee02..c66523c8 100644 --- a/js/app/controllers/export.js +++ b/js/app/controllers/export.js @@ -31,7 +31,7 @@ * Controller of the passmanApp */ angular.module('passmanApp') - .controller('ExportCtrl', ['$scope', '$window', 'CredentialService', 'VaultService', function ($scope, $window, CredentialService, VaultService) { + .controller('ExportCtrl', ['$scope', '$window', 'CredentialService', 'VaultService', '$translate', function ($scope, $window, CredentialService, VaultService, $translate) { $scope.available_exporters = []; $scope.active_vault = VaultService.getActiveVault(); @@ -58,10 +58,10 @@ $scope.startExport = function () { - _log('Starting export'); + _log($translate.instant('export.starting')); var _credentials = []; VaultService.getVault(VaultService.getActiveVault()).then(function (vault) { - _log('Decrypting credentials'); + _log($translate.instant('export.decrypt')); if (vault.hasOwnProperty('credentials')) { if (vault.credentials.length > 0) { for (var i = 0; i < vault.credentials.length; i++) { @@ -72,7 +72,7 @@ } } $window.PassmanExporter[$scope.selectedExporter.id].export(_credentials).then(function () { - _log('Done'); + _log($translate.instant('done')); }); } diff --git a/js/app/controllers/import.js b/js/app/controllers/import.js index 6ab98d44..75884d0c 100644 --- a/js/app/controllers/import.js +++ b/js/app/controllers/import.js @@ -31,7 +31,7 @@ * Controller of the passmanApp */ angular.module('passmanApp') - .controller('ImportCtrl', ['$scope', '$window', 'CredentialService', 'VaultService', function ($scope, $window, CredentialService, VaultService) { + .controller('ImportCtrl', ['$scope', '$window', 'CredentialService', 'VaultService', '$translate', function ($scope, $window, CredentialService, VaultService, $translate) { $scope.available_importers = []; $scope.active_vault = VaultService.getActiveVault(); @@ -59,12 +59,12 @@ $scope.fileLoaded = function (file) { file_data = file.data.split(','); file_data = decodeURIComponent(escape(window.atob(file_data[1]))); //window.atob(); - _log('File read successfully!'); + _log($translate.instant('import.file.read')); $scope.$digest(); }; $scope.fileLoadError = function (file) { - console.error('Error loading file', file); + console.error($translate.instant('error.loading.file'), file); }; $scope.fileSelectProgress = function () { @@ -84,16 +84,16 @@ var _credential = parsed_data[parsed_data_index]; if (!_credential.label) { if (parsed_data[parsed_data_index + 1]) { - _log('Credential has no label, skipping'); + _log($translate.instant('import.no.label')); addCredential(parsed_data_index + 1); } return; } - _log('Adding ' + _credential.label); + _log($translate.instant('import.adding').replace('{{credential}}', _credential.label)); _credential.vault_id = $scope.active_vault.vault_id; CredentialService.createCredential(_credential).then(function (result) { if (result.credential_id) { - _log('Added ' + _credential.label); + _log($translate.instant('import.added').replace('{{credential}}', _credential.label)); if (parsed_data[parsed_data_index + 1]) { $scope.import_progress = { progress: parsed_data_index / parsed_data.length * 100, @@ -108,7 +108,7 @@ loaded: parsed_data.length, total: parsed_data.length }; - _log('DONE!'); + _log($translate.instant('done')); } } }); @@ -133,7 +133,8 @@ loaded: parsed_data.length, total: parsed_data.length }; - _log('Parsed ' + parsed_data.length + ' credentials, starting to import'); + var msg = $translate.instant('import.loaded').replace('{{num}}', parsed_data.length); + _log(msg); if (parsed_data.length > 0) { addCredential(0); } else { diff --git a/js/app/controllers/public_shared_credential.js b/js/app/controllers/public_shared_credential.js index 07acd850..7f055002 100644 --- a/js/app/controllers/public_shared_credential.js +++ b/js/app/controllers/public_shared_credential.js @@ -31,7 +31,7 @@ * Controller of the passmanApp */ angular.module('passmanApp') - .controller('PublicSharedCredential', ['$scope', 'ShareService', '$window', 'EncryptService', 'NotificationService', function ($scope, ShareService, $window, EncryptService, NotificationService) { + .controller('PublicSharedCredential', ['$scope', 'ShareService', '$window', 'EncryptService', 'NotificationService', '$translate', function ($scope, ShareService, $window, EncryptService, NotificationService, $translate) { var _key; $scope.loading = false; $scope.loadSharedCredential = function () { @@ -54,7 +54,7 @@ $scope.downloadFile = function (credential, file) { ShareService.downloadSharedFile(credential, file).then(function (result) { if (!result.hasOwnProperty('file_data')) { - NotificationService.showNotification('Error downloading file, you probably don\'t have enough permissions', 5000); + NotificationService.showNotification($translate.instant('error.loading.file.perm'), 5000); return; } var file_data = EncryptService.decryptString(result.file_data, _key); diff --git a/js/app/controllers/revision.js b/js/app/controllers/revision.js index 0f9f7011..efe688e6 100644 --- a/js/app/controllers/revision.js +++ b/js/app/controllers/revision.js @@ -32,8 +32,8 @@ * Controller of the passmanApp */ angular.module('passmanApp') - .controller('RevisionCtrl', ['$scope', 'SettingsService', 'VaultService', 'CredentialService', '$location', '$routeParams', '$rootScope', 'NotificationService', '$filter', 'ShareService', 'EncryptService', - function ($scope, SettingsService, VaultService, CredentialService, $location, $routeParams, $rootScope, NotificationService, $filter, ShareService, EncryptService) { + .controller('RevisionCtrl', ['$scope', 'SettingsService', 'VaultService', 'CredentialService', '$location', '$routeParams', '$rootScope', 'NotificationService', '$filter', 'ShareService', 'EncryptService', '$translate', + function ($scope, SettingsService, VaultService, CredentialService, $location, $routeParams, $rootScope, NotificationService, $filter, ShareService, EncryptService, $translate) { $scope.active_vault = VaultService.getActiveVault(); if (!SettingsService.getSetting('defaultVault') || !SettingsService.getSetting('defaultVaultPass')) { if (!$scope.active_vault) { @@ -106,7 +106,7 @@ for (var i = 0; i < $scope.revisions.length; i++) { if ($scope.revisions[i].revision_id === revision.revision_id) { $scope.revisions.splice(i, 1); - NotificationService.showNotification('Revision deleted', 5000); + NotificationService.showNotification($translate.instant('revision.deleted'), 5000); break; } } @@ -137,7 +137,7 @@ SettingsService.setSetting('revision_credential', null); $rootScope.$emit('app_menu', false); $location.path('/vault/' + $routeParams.vault_id); - NotificationService.showNotification('Revision restored!', 5000); + NotificationService.showNotification($translate.instant('revision.restored'), 5000); }); }; diff --git a/js/app/controllers/settings.js b/js/app/controllers/settings.js index a51d07c4..4ee899f0 100644 --- a/js/app/controllers/settings.js +++ b/js/app/controllers/settings.js @@ -32,8 +32,8 @@ * Controller of the passmanApp */ angular.module('passmanApp') - .controller('SettingsCtrl', ['$scope', '$rootScope', 'SettingsService', 'VaultService', 'CredentialService', '$location', '$routeParams', '$http', 'EncryptService', 'NotificationService', '$sce', - function ($scope, $rootScope, SettingsService, VaultService, CredentialService, $location, $routeParams, $http, EncryptService, NotificationService, $sce) { + .controller('SettingsCtrl', ['$scope', '$rootScope', 'SettingsService', 'VaultService', 'CredentialService', '$location', '$routeParams', '$http', 'EncryptService', 'NotificationService', '$sce', '$translate', + function ($scope, $rootScope, SettingsService, VaultService, CredentialService, $location, $routeParams, $http, EncryptService, NotificationService, $sce, $translate) { $scope.vault_settings = {}; $scope.new_vault_name = ''; $scope.active_vault = VaultService.getActiveVault(); @@ -72,9 +72,9 @@ }); - + var btn_txt = $translate.instant('bookmarklet.text'); var http = location.protocol, slashes = http.concat("//"), host = slashes.concat(window.location.hostname), complete = host + location.pathname; - $scope.bookmarklet = $sce.trustAsHtml("<a class=\"button\" href=\"javascript:(function(){var a=window,b=document,c=encodeURIComponent,e=c(document.title),d=a.open('" + complete + "bookmarklet?url='+c(b.location)+'&title='+e,'bkmk_popup','left='+((a.screenX||a.screenLeft)+10)+',top='+((a.screenY||a.screenTop)+10)+',height=750px,width=475px,resizable=0,alwaysRaised=1');a.setTimeout(function(){d.focus()},300);})();\">Save in passman</a>"); + $scope.bookmarklet = $sce.trustAsHtml("<a class=\"button\" href=\"javascript:(function(){var a=window,b=document,c=encodeURIComponent,e=c(document.title),d=a.open('" + complete + "bookmarklet?url='+c(b.location)+'&title='+e,'bkmk_popup','left='+((a.screenX||a.screenLeft)+10)+',top='+((a.screenY||a.screenTop)+10)+',height=750px,width=475px,resizable=0,alwaysRaised=1');a.setTimeout(function(){d.focus()},300);})();\">"+ btn_txt +"</a>"); $scope.saveVaultSettings = function () { @@ -84,38 +84,38 @@ VaultService.updateVault(_vault).then(function () { //VaultService.setActiveVault(_vault); $scope.active_vault.name = angular.copy(_vault.name); - NotificationService.showNotification('Settings saved', 5000); + NotificationService.showNotification($translate.instant('settings.saved'), 5000); }); }; $scope.tabs = [ { - title: 'General settings', + title: $translate.instant('settings.general'), url: 'views/partials/forms/settings/general_settings.html' }, { - title: 'Password Audit', + title: $translate.instant('settings.audit'), url: 'views/partials/forms/settings/tool.html' }, { - title: 'Password settings', + title:$translate.instant('settings.password'), url: 'views/partials/forms/settings/password_settings.html' }, { - title: 'Import credentials', + title: $translate.instant('settings.import'), url: 'views/partials/forms/settings/import.html' }, { - title: 'Export credentials', + title: $translate.instant('settings.export'), url: 'views/partials/forms/settings/export.html' }, { - title: 'Sharing', + title: $translate.instant('settings.sharing'), url: 'views/partials/forms/settings/sharing.html' } ]; @@ -186,7 +186,7 @@ $scope.$on("$locationChangeStart", function(event) { if($scope.change_pw){ if($scope.change_pw.total > 0 && $scope.change_pw.done < $scope.change_pw.total){ - if(!confirm("Are you sure you want to leave?\nThis will corrupt all your credentials")){ + if(!confirm($translate.instant('changepw.navigate.away.warning'))){ event.preventDefault(); } } @@ -196,11 +196,11 @@ $scope.changeVaultPassword = function (oldVaultPass, newVaultPass, newVaultPass2) { if (oldVaultPass !== VaultService.getActiveVault().vaultKey) { - $scope.error = 'Your old password is incorrect!'; + $scope.error = $translate.instant('incorrect.password'); return; } if (newVaultPass !== newVaultPass2) { - $scope.error = 'New passwords do not match!'; + $scope.error = $translate.instant('password.no.match'); return; } VaultService.getVault($scope.active_vault).then(function (vault) { @@ -236,7 +236,7 @@ vault.private_sharing_key = EncryptService.encryptString(vault.private_sharing_key, newVaultPass); VaultService.updateSharingKeys(vault).then(function () { $rootScope.$broadcast('logout'); - NotificationService.showNotification('Please login with your new vault password', 5000); + NotificationService.showNotification($translate.instant('login.new.pass'), 5000); }); } }); diff --git a/js/app/controllers/share.js b/js/app/controllers/share.js index d37d95d9..52178a12 100644 --- a/js/app/controllers/share.js +++ b/js/app/controllers/share.js @@ -32,22 +32,19 @@ * This file is part of passman, licensed under AGPLv3 */ angular.module('passmanApp') - .controller('ShareCtrl', ['$scope', 'VaultService', 'CredentialService', 'SettingsService', '$location', '$routeParams', 'ShareService', 'NotificationService', 'SharingACL', 'EncryptService', - function ($scope, VaultService, CredentialService, SettingsService, $location, $routeParams, ShareService, NotificationService, SharingACL, EncryptService) { + .controller('ShareCtrl', ['$scope', 'VaultService', 'CredentialService', 'SettingsService', '$location', '$routeParams', 'ShareService', 'NotificationService', 'SharingACL', 'EncryptService', '$translate', + function ($scope, VaultService, CredentialService, SettingsService, $location, $routeParams, ShareService, NotificationService, SharingACL, EncryptService, $translate) { $scope.active_vault = VaultService.getActiveVault(); $scope.tabs = [{ - title: 'Share with users and groups', + title: $translate.instant('share.u.g'), url: 'views/partials/forms/share_credential/basics.html' }, { - title: 'Share link', + title: $translate.instant('share.link'), url: 'views/partials/forms/share_credential/link_sharing.html', color: 'green' }]; - $scope.currentTab = { - title: 'General', - url: 'views/partials/forms/share_credential/basics.html' - }; + $scope.currentTab = $scope.tabs[0]; $scope.onClickTab = function (tab) { $scope.currentTab = tab; @@ -224,7 +221,7 @@ _credential = CredentialService.encryptCredential(_credential, old_key); CredentialService.updateCredential(_credential, true).then(function () { - NotificationService.showNotification('Credential unshared', 4000); + NotificationService.showNotification($translate.instant('credential.unshared'), 4000); CredentialService.reencryptCredential(_credential.guid, old_key, new_key).then(function () { getAcl(); }); @@ -266,7 +263,7 @@ $scope.$on("$locationChangeStart", function(event) { if(!$scope.sharing_complete){ - if(!confirm("Are you sure you want to leave?\nThis will corrupt this credential")){ + if(!confirm($translate.instant('share.navigate.away.warning'))){ event.preventDefault(); } } @@ -322,7 +319,7 @@ $scope.applyShareToUser(list[iterator], enc_key); } } - NotificationService.showNotification('Saved!', 4000); + NotificationService.showNotification($translate.instant('saved'), 4000); $scope.sharing_complete = true; } else { @@ -338,7 +335,7 @@ _credential.skip_revision = true; _credential.shared_key = EncryptService.encryptString(key); CredentialService.updateCredential(_credential, true).then(function () { - NotificationService.showNotification('Credential shared', 4000); + NotificationService.showNotification($translate.instant('credential.shared'), 4000); $scope.sharing_complete = true; }); }); diff --git a/js/app/controllers/vault.js b/js/app/controllers/vault.js index d94659d5..c64b71d2 100644 --- a/js/app/controllers/vault.js +++ b/js/app/controllers/vault.js @@ -31,7 +31,7 @@ * Controller of the passmanApp */ angular.module('passmanApp') - .controller('VaultCtrl', ['$scope', 'VaultService', 'SettingsService', 'CredentialService', '$location', 'ShareService', 'EncryptService', function ($scope, VaultService, SettingsService, CredentialService, $location, ShareService, EncryptService) { + .controller('VaultCtrl', ['$scope', 'VaultService', 'SettingsService', 'CredentialService', '$location', 'ShareService', 'EncryptService', '$translate', function ($scope, VaultService, SettingsService, CredentialService, $location, ShareService, EncryptService, $translate) { VaultService.getVaults().then(function (vaults) { $scope.vaults = vaults; if (SettingsService.getSetting('defaultVault') != null) { @@ -96,7 +96,9 @@ var key_size = 1024; ShareService.generateRSAKeys(key_size).progress(function (progress) { var p = progress > 0 ? 2 : 1; - $scope.creating_keys = 'Generating sharing keys (' + p + ' / 2)'; + var msg = $translate.instant('generating.sharing.keys'); + msg = msg.replace('%step', p); + $scope.creating_keys = msg; $scope.$digest(); }).then(function (kp) { var pem = ShareService.rsaKeyPairToPEM(kp); @@ -131,7 +133,7 @@ _loginToVault(vault, vault_key); } catch (e) { - $scope.error = 'Incorrect vault password!'; + $scope.error = $translate.instant('invalid.vault.key') } }; @@ -139,7 +141,7 @@ $scope.createVault = function (vault_name, vault_key, vault_key2) { if (vault_key !== vault_key2) { - $scope.error = 'Passwords do not match'; + $scope.error = $translate.instant('password.do.not.match'); return; } VaultService.createVault(vault_name).then(function (vault) { diff --git a/js/app/directives/credentialfield.js b/js/app/directives/credentialfield.js index 72590f34..ae380236 100644 --- a/js/app/directives/credentialfield.js +++ b/js/app/directives/credentialfield.js @@ -30,7 +30,7 @@ */ angular.module('passmanApp') - .directive('credentialField', ['$timeout', function ($timeout) { + .directive('credentialField', ['$timeout', '$translate', function ($timeout, $translate) { return { scope: { value: '=value', @@ -45,13 +45,17 @@ '<span ng-if="valueVisible">{{value}}</span>' + '</div>' + '<div class="tools">' + - '<div class="cell" ng-if="toggle" tooltip="\'Toggle visibility\'" ng-click="toggleVisibility()"><i class="fa" ng-class="{\'fa-eye\': !valueVisible, \'fa-eye-slash\': valueVisible }"></i></div>' + + '<div class="cell" ng-if="toggle" tooltip="tggltxt" ng-click="toggleVisibility()"><i class="fa" ng-class="{\'fa-eye\': !valueVisible, \'fa-eye-slash\': valueVisible }"></i></div>' + '<div class="cell" ng-if="isLink"><a ng-href="{{value}}" target="_blank"><i tooltip="\'Open in new window\'" class="link fa fa-external-link"></i></a></div>' + '<div class="cell" ngclipboard-success="onSuccess(e);" ngclipboard-error="onError(e);" ngclipboard data-clipboard-text="{{value}}"><i tooltip="copy_msg" class="fa fa-clipboard"></i></div>' + '</div></span>', link: function (scope) { var expression = /(https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})/gi; var regex = new RegExp(expression); + $translate(['toggle.visibility', 'copy', 'copied']).then(function (translations) { + scope.tggltxt = translations['toggle.visibility']; + scope.copy_msg = translations['copy']; + }); scope.$watch("value", function () { if (scope.value) { @@ -69,13 +73,13 @@ scope.toggle = true; } } - scope.copy_msg = 'Copy to clipboard'; + var timer; scope.onSuccess = function () { - scope.copy_msg = 'Copied to clipboard!'; + scope.copy_msg = $translate.instant('copied') ; $timeout.cancel(timer); timer = $timeout(function () { - scope.copy_msg = 'Copy to clipboard'; + scope.copy_msg = $translate.instant('copy'); }, 5000); }; scope.valueVisible = true; diff --git a/js/app/directives/passwordgen.js b/js/app/directives/passwordgen.js index 10fa481a..65fbe9b2 100644 --- a/js/app/directives/passwordgen.js +++ b/js/app/directives/passwordgen.js @@ -31,7 +31,7 @@ */ angular.module('passmanApp') - .directive('passwordGen', function ($timeout) { + .directive('passwordGen', function ($timeout, $translate) { /* jshint ignore:start */ function Arcfour () { this.j = this.i = 0, this.S = [] @@ -152,8 +152,8 @@ "<input ng-show=\"passwordVisible\" type=\"text\" ng-disabled=\"disabled\" class=\"form-control \" ng-model=\"password\" placeholder=\"{{placeholder}}\">" + '<span class="generate_pw">' + - '<div class="cell" tooltip="\'Generate password\'" ng-click="generatePasswordStart()"><i class="fa fa-refresh"></i></div>' + - '<div class="cell" tooltip="\'Toggle password visibility\'" ng-click="toggleVisibility()"><i class="fa" ng-class="{\'fa-eye\': passwordVisible, \'fa-eye-slash\': !passwordVisible }"></i></div>' + + '<div class="cell" tooltip="gen_msg" ng-click="generatePasswordStart()"><i class="fa fa-refresh"></i></div>' + + '<div class="cell" tooltip="tggltxt" ng-click="toggleVisibility()"><i class="fa" ng-class="{\'fa-eye\': passwordVisible, \'fa-eye-slash\': !passwordVisible }"></i></div>' + '<div class="cell" tooltip="\'Copy password to clipboard\'"><i class="fa fa-clipboard" ngclipboard-success="onSuccess(e);" ngclipboard-error="onError(e);" ngclipboard data-clipboard-text="{{password}}"></i></div>' + "</button>" + "</div>" + @@ -177,6 +177,11 @@ } }); + $translate(['password.gen', 'password.copy', 'copied', 'toggle.visibility']).then(function (translations) { + scope.tggltxt = translations['toggle.visibility']; + scope.copy_msg = translations['password.copy']; + scope.gen_msg = translations['password.gen']; + }); scope.$watch("password", function () { scope.model = scope.password; @@ -185,7 +190,7 @@ // scope.onSuccess = function (e) { //@TODO move OC.Notification to a service - OC.Notification.showTemporary('Password copied to clipboard!'); + OC.Notification.showTemporary($translate.instant('password.copied')); e.clearSelection(); }; diff --git a/js/app/directives/progressbar.js b/js/app/directives/progressbar.js index 6b6d6fb8..b7870cf7 100644 --- a/js/app/directives/progressbar.js +++ b/js/app/directives/progressbar.js @@ -29,13 +29,13 @@ * # passwordGen */ angular.module('passmanApp') - .directive('progressBar', [function () { + .directive('progressBar', [function ($translate) { return { restrict: 'A', template: '' + '<div class="progress">' + '<div class="progress-bar" role="progressbar" aria-valuenow="{{progress}}"aria-valuemin="0" aria-valuemax="100" style="width:{{progress}}%;" use-theme>' + - '<span class="sr-only">{{progress}}% Complete</span>' + + '<span class="sr-only">{{progress}}% {{completed_text}}</span>' + '<span ng-if="index && total" class="progress-label" use-theme type="\'color\'" color="\'true\'">{{index}} / {{total}}</span>' + '<span ng-if="!index && !total" class="progress-label" use-theme type="\'color\'" color="\'true\'">{{progress}}%</span>' + '</div>' + @@ -47,7 +47,9 @@ }, link: function () { - + $translate(['complete']).then(function (translations) { + $scope.completed_text = translations['complete']; + }) } }; }]); diff --git a/tests/unit/controller/TranslationControllerTest.php b/tests/unit/controller/TranslationControllerTest.php index b7301bc6..27cf3271 100644 --- a/tests/unit/controller/TranslationControllerTest.php +++ b/tests/unit/controller/TranslationControllerTest.php @@ -31,12 +31,11 @@ use PHPUnit_Framework_TestCase; * Class PageControllerTest * * @package OCA\Passman\Controller - * @coversDefaultClass \OCA\Passman\Controller\PageController + * @coversDefaultClass \OCA\Passman\Controller\TranslationController */ class TranslationControllerTest extends PHPUnit_Framework_TestCase { private $controller; - private $userId = 'john'; public function setUp() { $request = $this->getMockBuilder('OCP\IRequest')->getMock(); |