From 443a81f750c4dad2533840581b970d145059ad50 Mon Sep 17 00:00:00 2001 From: frenauvh Date: Fri, 15 Jan 2021 10:03:48 +0100 Subject: [PATCH] feat(service): add allowNamespace parameter #1910 If not used, disabling namespaces can improve performance --- src/service/translate.js | 39 +++++++++++++++++++++++++++++ test/unit/service/translate.spec.js | 28 +++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/src/service/translate.js b/src/service/translate.js index ef2686f1c..9dad8312b 100644 --- a/src/service/translate.js +++ b/src/service/translate.js @@ -36,6 +36,7 @@ function $translate($STORAGE_KEY, $windowProvider, $translateSanitizationProvide $notFoundIndicatorRight, $postCompilingEnabled = false, $forceAsyncReloadEnabled = false, + $allowNamespaces = true, $nestedObjectDelimeter = '.', $isReady = false, $keepContent = false, @@ -310,6 +311,27 @@ function $translate($STORAGE_KEY, $windowProvider, $translateSanitizationProvide return this; }; + /** + * @ngdoc function + * @name pascalprecht.translate.$translateProvider#allowNamespaces + * @methodOf pascalprecht.translate.$translateProvider + * + * @description + * Let's you disable namespaces, if you don't need nested translation + * object files. Disabling namespaces can improve performance. + * + * Default value is `true`. Namespaces are enabled by default. + * + * @param {boolean} namespacesEnabled - namespaces are enabled or not + */ + this.allowNamespaces = function (namespacesEnabled) { + if (namespacesEnabled === undefined) { + return $allowNamespaces; + } + $allowNamespaces = namespacesEnabled; + return this; + }; + /** * @ngdoc function * @name pascalprecht.translate.$translateProvider#nestedObjectDelimeter @@ -347,6 +369,9 @@ function $translate($STORAGE_KEY, $windowProvider, $translateSanitizationProvide if (!result) { result = {}; } + if (!$allowNamespaces) { + return data; + } for (key in data) { if (!Object.prototype.hasOwnProperty.call(data, key)) { continue; @@ -1761,6 +1786,20 @@ function $translate($STORAGE_KEY, $windowProvider, $translateSanitizationProvide return $cloakClassName; }; + /** + * @ngdoc function + * @name pascalprecht.translate.$translate#allowNamespaces + * @methodOf pascalprecht.translate.$translate + * + * @description + * Returns if namespaces are enabled + * + * @return {boolean} allowNamespaces value + */ + $translate.allowNamespaces = function () { + return $allowNamespaces; + }; + /** * @ngdoc function * @name pascalprecht.translate.$translate#nestedObjectDelimeter diff --git a/test/unit/service/translate.spec.js b/test/unit/service/translate.spec.js index 66eb91c9b..ea05f289f 100644 --- a/test/unit/service/translate.spec.js +++ b/test/unit/service/translate.spec.js @@ -198,6 +198,17 @@ describe('pascalprecht.translate', function () { }); }); + describe('$translate#allowNamespaces()', function () { + + it('should be a function', function () { + expect(typeof $translate.allowNamespaces).toBe('function'); + }); + + it('should return \'true\' if no value is specified', function () { + expect($translate.allowNamespaces()).toEqual(true); + }); + }); + describe('$translate#nestedObjectDelimeter()', function () { it('should be a function', function () { @@ -472,6 +483,23 @@ describe('pascalprecht.translate', function () { }); }); + describe('$translate#allowNamespaces()', function () { + + beforeEach(module('pascalprecht.translate', function ($translateProvider) { + $translateProvider.allowNamespaces(false); + })); + + var $translate; + + beforeEach(inject(function (_$translate_) { + $translate = _$translate_; + })); + + it('should return \'false\' if namespaces were disabled', function () { + expect($translate.allowNamespaces()).toEqual(false); + }); + }); + describe('$translate#nestedObjectDelimeter()', function () { beforeEach(module('pascalprecht.translate', function ($translateProvider) {