mirror of
https://github.com/wahyd4/cdnjs.git
synced 2026-08-13 06:46:12 +10:00
Adding bower-angular-translate
Sources: https://github.com/angular-translate/bower-angular-translate/releases/*. zip 1 of 4 libraries required to fix #2714
This commit is contained in:
+129
@@ -0,0 +1,129 @@
|
||||
angular.module('ngTranslate', ['ng', 'ngCookies'])
|
||||
|
||||
.run(['$translate', '$COOKIE_KEY', '$cookieStore', function ($translate, $COOKIE_KEY, $cookieStore) {
|
||||
|
||||
if ($translate.rememberLanguage()) {
|
||||
if (!$cookieStore.get($COOKIE_KEY)) {
|
||||
$cookieStore.put($COOKIE_KEY, $translate.uses());
|
||||
} else {
|
||||
$translate.uses($cookieStore.get($COOKIE_KEY));
|
||||
}
|
||||
}
|
||||
}]);
|
||||
|
||||
angular.module('ngTranslate')
|
||||
|
||||
.directive('translate', ['$filter', '$interpolate', function ($filter, $interpolate) {
|
||||
|
||||
var translate = $filter('translate');
|
||||
|
||||
return {
|
||||
restrict: 'A',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId , '')) {
|
||||
scope.translationId = $interpolate(element.text())(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
|
||||
attr.$observe('values', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
|
||||
scope.$watch('translationId + interpolateParams', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
});
|
||||
}
|
||||
};
|
||||
}]);
|
||||
|
||||
angular.module('ngTranslate')
|
||||
|
||||
.filter('translate', ['$parse', '$translate', function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams) {
|
||||
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams);
|
||||
};
|
||||
}]);
|
||||
|
||||
angular.module('ngTranslate').constant('$COOKIE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
|
||||
angular.module('ngTranslate').provider('$translate', function () {
|
||||
|
||||
var $translationTable = {},
|
||||
$uses,
|
||||
$rememberLanguage = false;
|
||||
|
||||
this.translations = function (langKey, translationTable) {
|
||||
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
$translationTable = langKey;
|
||||
}
|
||||
} else {
|
||||
$translationTable[langKey] = translationTable;
|
||||
}
|
||||
};
|
||||
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey]) {
|
||||
throw new Error("$translateProvider couldn't find translationTable for langKey: '" + langKey + "'");
|
||||
}
|
||||
$uses = langKey;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
|
||||
this.rememberLanguage = function (boolVal) {
|
||||
if (angular.isUndefined(boolVal)) {
|
||||
return $rememberLanguage;
|
||||
}
|
||||
$rememberLanguage = boolVal;
|
||||
};
|
||||
|
||||
this.$get = ['$interpolate', '$log', '$cookieStore', '$COOKIE_KEY', function ($interpolate, $log, $cookieStore, $COOKIE_KEY) {
|
||||
|
||||
$translate = function (translationId, interpolateParams) {
|
||||
var translation = ($uses) ?
|
||||
$translationTable[$uses][translationId] :
|
||||
$translationTable[translationId];
|
||||
|
||||
if (translation) {
|
||||
return $interpolate(translation)(interpolateParams);
|
||||
}
|
||||
$log.warn("Translation for " + translationId + " doesn't exist");
|
||||
return translationId;
|
||||
};
|
||||
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
$uses = key;
|
||||
if ($rememberLanguage) {
|
||||
$cookieStore.put($COOKIE_KEY, $uses);
|
||||
}
|
||||
};
|
||||
|
||||
$translate.rememberLanguage = function () {
|
||||
return $rememberLanguage;
|
||||
};
|
||||
|
||||
return $translate;
|
||||
}];
|
||||
});
|
||||
+1
@@ -0,0 +1 @@
|
||||
angular.module("ngTranslate",["ng","ngCookies"]).run(["$translate","$COOKIE_KEY","$cookieStore",function(n,t,r){n.rememberLanguage()&&(r.get(t)?n.uses(r.get(t)):r.put(t,n.uses()))}]),angular.module("ngTranslate").directive("translate",["$filter","$interpolate",function(n,t){var r=n("translate");return{restrict:"A",scope:!0,link:function(n,a,e){e.$observe("translate",function(r){n.translationId=angular.equals(r,"")?t(a.text())(n.$parent):r}),e.$observe("values",function(t){n.interpolateParams=t}),n.$watch("translationId + interpolateParams",function(){a.html(r(n.translationId,n.interpolateParams))})}}}]),angular.module("ngTranslate").filter("translate",["$parse","$translate",function(n,t){return function(r,a){return angular.isObject(a)||(a=n(a)()),t(r,a)}}]),angular.module("ngTranslate").constant("$COOKIE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("ngTranslate").provider("$translate",function(){var n,t={},r=!1;this.translations=function(n,r){if(!n&&!r)return t;if(n&&!r){if(angular.isString(n))return t[n];t=n}else t[n]=r},this.uses=function(r){if(!r)return n;if(!t[r])throw Error("$translateProvider couldn't find translationTable for langKey: '"+r+"'");n=r},this.rememberLanguage=function(n){return angular.isUndefined(n)?r:(r=n,void 0)},this.$get=["$interpolate","$log","$cookieStore","$COOKIE_KEY",function(a,e,i,o){return $translate=function(r,i){var o=n?t[n][r]:t[r];return o?a(o)(i):(e.warn("Translation for "+r+" doesn't exist"),r)},$translate.uses=function(t){return t?(n=t,r&&i.put(o,n),void 0):n},$translate.rememberLanguage=function(){return r},$translate}]});
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
angular.module('ngTranslate', ['ng', 'ngCookies'])
|
||||
|
||||
.run(['$translate', '$COOKIE_KEY', '$cookieStore', function ($translate, $COOKIE_KEY, $cookieStore) {
|
||||
|
||||
if ($translate.rememberLanguage()) {
|
||||
if (!$cookieStore.get($COOKIE_KEY)) {
|
||||
$cookieStore.put($COOKIE_KEY, $translate.uses());
|
||||
} else {
|
||||
$translate.uses($cookieStore.get($COOKIE_KEY));
|
||||
}
|
||||
}
|
||||
}]);
|
||||
|
||||
angular.module('ngTranslate')
|
||||
|
||||
.directive('translate', ['$filter', '$interpolate', function ($filter, $interpolate) {
|
||||
|
||||
var translate = $filter('translate');
|
||||
|
||||
return {
|
||||
restrict: 'A',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId , '')) {
|
||||
scope.translationId = $interpolate(element.text())(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
|
||||
attr.$observe('values', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
|
||||
scope.$on('translationChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
});
|
||||
|
||||
scope.$watch('translationId + interpolateParams', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
});
|
||||
}
|
||||
};
|
||||
}]);
|
||||
|
||||
angular.module('ngTranslate')
|
||||
|
||||
.filter('translate', ['$parse', '$translate', function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams) {
|
||||
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams);
|
||||
};
|
||||
}]);
|
||||
|
||||
angular.module('ngTranslate').constant('$COOKIE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
|
||||
angular.module('ngTranslate').provider('$translate', function () {
|
||||
|
||||
var $translationTable = {},
|
||||
$uses,
|
||||
$rememberLanguage = false;
|
||||
|
||||
this.translations = function (langKey, translationTable) {
|
||||
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
$translationTable = langKey;
|
||||
}
|
||||
} else {
|
||||
$translationTable[langKey] = translationTable;
|
||||
}
|
||||
};
|
||||
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey]) {
|
||||
throw new Error("$translateProvider couldn't find translationTable for langKey: '" + langKey + "'");
|
||||
}
|
||||
$uses = langKey;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
|
||||
this.rememberLanguage = function (boolVal) {
|
||||
if (angular.isUndefined(boolVal)) {
|
||||
return $rememberLanguage;
|
||||
}
|
||||
$rememberLanguage = boolVal;
|
||||
};
|
||||
|
||||
this.$get = ['$interpolate', '$log', '$cookieStore', '$rootScope', '$COOKIE_KEY', function ($interpolate, $log, $cookieStore, $rootScope, $COOKIE_KEY) {
|
||||
|
||||
$translate = function (translationId, interpolateParams) {
|
||||
var translation = ($uses) ?
|
||||
$translationTable[$uses][translationId] :
|
||||
$translationTable[translationId];
|
||||
|
||||
if (translation) {
|
||||
return $interpolate(translation)(interpolateParams);
|
||||
}
|
||||
$log.warn("Translation for " + translationId + " doesn't exist");
|
||||
return translationId;
|
||||
};
|
||||
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
if ($uses !== key) {
|
||||
$uses = key;
|
||||
if ($rememberLanguage) {
|
||||
$cookieStore.put($COOKIE_KEY, $uses);
|
||||
}
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
}
|
||||
};
|
||||
|
||||
$translate.rememberLanguage = function () {
|
||||
return $rememberLanguage;
|
||||
};
|
||||
|
||||
return $translate;
|
||||
}];
|
||||
});
|
||||
+1
@@ -0,0 +1 @@
|
||||
angular.module("ngTranslate",["ng","ngCookies"]).run(["$translate","$COOKIE_KEY","$cookieStore",function(n,t,a){n.rememberLanguage()&&(a.get(t)?n.uses(a.get(t)):a.put(t,n.uses()))}]),angular.module("ngTranslate").directive("translate",["$filter","$interpolate",function(n,t){var a=n("translate");return{restrict:"A",scope:!0,link:function(n,r,e){e.$observe("translate",function(a){n.translationId=angular.equals(a,"")?t(r.text())(n.$parent):a}),e.$observe("values",function(t){n.interpolateParams=t}),n.$on("translationChangeSuccess",function(){r.html(a(n.translationId,n.interpolateParams))}),n.$watch("translationId + interpolateParams",function(){r.html(a(n.translationId,n.interpolateParams))})}}}]),angular.module("ngTranslate").filter("translate",["$parse","$translate",function(n,t){return function(a,r){return angular.isObject(r)||(r=n(r)()),t(a,r)}}]),angular.module("ngTranslate").constant("$COOKIE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("ngTranslate").provider("$translate",function(){var n,t={},a=!1;this.translations=function(n,a){if(!n&&!a)return t;if(n&&!a){if(angular.isString(n))return t[n];t=n}else t[n]=a},this.uses=function(a){if(!a)return n;if(!t[a])throw Error("$translateProvider couldn't find translationTable for langKey: '"+a+"'");n=a},this.rememberLanguage=function(n){return angular.isUndefined(n)?a:(a=n,void 0)},this.$get=["$interpolate","$log","$cookieStore","$rootScope","$COOKIE_KEY",function(r,e,o,s,i){return $translate=function(a,o){var s=n?t[n][a]:t[a];return s?r(s)(o):(e.warn("Translation for "+a+" doesn't exist"),a)},$translate.uses=function(t){return t?(n!==t&&(n=t,a&&o.put(i,n),s.$broadcast("translationChangeSuccess")),void 0):n},$translate.rememberLanguage=function(){return a},$translate}]});
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
angular.module('ngTranslate', ['ng', 'ngCookies'])
|
||||
|
||||
.run(['$translate', '$COOKIE_KEY', '$cookieStore', function ($translate, $COOKIE_KEY, $cookieStore) {
|
||||
|
||||
if ($translate.rememberLanguage()) {
|
||||
if (!$cookieStore.get($COOKIE_KEY)) {
|
||||
$cookieStore.put($COOKIE_KEY, $translate.uses());
|
||||
} else {
|
||||
$translate.uses($cookieStore.get($COOKIE_KEY));
|
||||
}
|
||||
}
|
||||
}]);
|
||||
|
||||
angular.module('ngTranslate')
|
||||
|
||||
.directive('translate', ['$filter', '$interpolate', function ($filter, $interpolate) {
|
||||
|
||||
var translate = $filter('translate');
|
||||
|
||||
return {
|
||||
restrict: 'A',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId , '')) {
|
||||
scope.translationId = $interpolate(element.text())(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
|
||||
attr.$observe('values', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
|
||||
scope.$on('translationChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
});
|
||||
|
||||
scope.$watch('translationId + interpolateParams', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
});
|
||||
}
|
||||
};
|
||||
}]);
|
||||
|
||||
angular.module('ngTranslate')
|
||||
|
||||
.filter('translate', ['$parse', '$translate', function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams) {
|
||||
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams);
|
||||
};
|
||||
}]);
|
||||
|
||||
angular.module('ngTranslate').constant('$COOKIE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
|
||||
angular.module('ngTranslate').provider('$translate', function () {
|
||||
|
||||
var $translationTable = {},
|
||||
$uses,
|
||||
$rememberLanguage = false;
|
||||
|
||||
this.translations = function (langKey, translationTable) {
|
||||
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
$translationTable = langKey;
|
||||
}
|
||||
} else {
|
||||
$translationTable[langKey] = translationTable;
|
||||
}
|
||||
};
|
||||
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey]) {
|
||||
throw new Error("$translateProvider couldn't find translationTable for langKey: '" + langKey + "'");
|
||||
}
|
||||
$uses = langKey;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
|
||||
this.rememberLanguage = function (boolVal) {
|
||||
if (angular.isUndefined(boolVal)) {
|
||||
return $rememberLanguage;
|
||||
}
|
||||
$rememberLanguage = boolVal;
|
||||
};
|
||||
|
||||
this.$get = ['$interpolate', '$log', '$cookieStore', '$rootScope', '$COOKIE_KEY', function ($interpolate, $log, $cookieStore, $rootScope, $COOKIE_KEY) {
|
||||
|
||||
$translate = function (translationId, interpolateParams) {
|
||||
var translation = ($uses) ?
|
||||
$translationTable[$uses][translationId] :
|
||||
$translationTable[translationId];
|
||||
|
||||
if (translation) {
|
||||
return $interpolate(translation)(interpolateParams);
|
||||
}
|
||||
$log.warn("Translation for " + translationId + " doesn't exist");
|
||||
return translationId;
|
||||
};
|
||||
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
if ($uses !== key) {
|
||||
$uses = key;
|
||||
if ($rememberLanguage) {
|
||||
$cookieStore.put($COOKIE_KEY, $uses);
|
||||
}
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
}
|
||||
};
|
||||
|
||||
$translate.rememberLanguage = function () {
|
||||
return $rememberLanguage;
|
||||
};
|
||||
|
||||
return $translate;
|
||||
}];
|
||||
});
|
||||
+1
@@ -0,0 +1 @@
|
||||
angular.module("ngTranslate",["ng","ngCookies"]).run(["$translate","$COOKIE_KEY","$cookieStore",function(n,t,a){n.rememberLanguage()&&(a.get(t)?n.uses(a.get(t)):a.put(t,n.uses()))}]),angular.module("ngTranslate").directive("translate",["$filter","$interpolate",function(n,t){var a=n("translate");return{restrict:"A",scope:!0,link:function(n,r,e){e.$observe("translate",function(a){n.translationId=angular.equals(a,"")?t(r.text())(n.$parent):a}),e.$observe("values",function(t){n.interpolateParams=t}),n.$on("translationChangeSuccess",function(){r.html(a(n.translationId,n.interpolateParams))}),n.$watch("translationId + interpolateParams",function(){r.html(a(n.translationId,n.interpolateParams))})}}}]),angular.module("ngTranslate").filter("translate",["$parse","$translate",function(n,t){return function(a,r){return angular.isObject(r)||(r=n(r)()),t(a,r)}}]),angular.module("ngTranslate").constant("$COOKIE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("ngTranslate").provider("$translate",function(){var n,t={},a=!1;this.translations=function(n,a){if(!n&&!a)return t;if(n&&!a){if(angular.isString(n))return t[n];t=n}else t[n]=a},this.uses=function(a){if(!a)return n;if(!t[a])throw Error("$translateProvider couldn't find translationTable for langKey: '"+a+"'");n=a},this.rememberLanguage=function(n){return angular.isUndefined(n)?a:(a=n,void 0)},this.$get=["$interpolate","$log","$cookieStore","$rootScope","$COOKIE_KEY",function(r,e,o,s,i){return $translate=function(a,o){var s=n?t[n][a]:t[a];return s?r(s)(o):(e.warn("Translation for "+a+" doesn't exist"),a)},$translate.uses=function(t){return t?(n!==t&&(n=t,a&&o.put(i,n),s.$broadcast("translationChangeSuccess")),void 0):n},$translate.rememberLanguage=function(){return a},$translate}]});
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
angular.module('ngTranslate', ['ng', 'ngCookies'])
|
||||
|
||||
.run(['$translate', '$COOKIE_KEY', '$cookieStore', function ($translate, $COOKIE_KEY, $cookieStore) {
|
||||
|
||||
if ($translate.rememberLanguage()) {
|
||||
if (!$cookieStore.get($COOKIE_KEY)) {
|
||||
$cookieStore.put($COOKIE_KEY, $translate.uses());
|
||||
} else {
|
||||
$translate.uses($cookieStore.get($COOKIE_KEY));
|
||||
}
|
||||
}
|
||||
}]);
|
||||
|
||||
angular.module('ngTranslate')
|
||||
|
||||
.directive('translate', ['$filter', '$interpolate', function ($filter, $interpolate) {
|
||||
|
||||
var translate = $filter('translate');
|
||||
|
||||
return {
|
||||
restrict: 'A',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId , '')) {
|
||||
scope.translationId = $interpolate(element.text())(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
|
||||
attr.$observe('values', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
|
||||
scope.$on('translationChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
});
|
||||
|
||||
scope.$watch('translationId + interpolateParams', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
});
|
||||
}
|
||||
};
|
||||
}]);
|
||||
|
||||
angular.module('ngTranslate')
|
||||
|
||||
.filter('translate', ['$parse', '$translate', function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams) {
|
||||
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams);
|
||||
};
|
||||
}]);
|
||||
|
||||
angular.module('ngTranslate').constant('$COOKIE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
|
||||
angular.module('ngTranslate').provider('$translate', function () {
|
||||
|
||||
var $translationTable = {},
|
||||
$uses,
|
||||
$rememberLanguage = false;
|
||||
|
||||
this.translations = function (langKey, translationTable) {
|
||||
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
$translationTable = langKey;
|
||||
}
|
||||
} else {
|
||||
$translationTable[langKey] = translationTable;
|
||||
}
|
||||
};
|
||||
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey]) {
|
||||
throw new Error("$translateProvider couldn't find translationTable for langKey: '" + langKey + "'");
|
||||
}
|
||||
$uses = langKey;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
|
||||
this.rememberLanguage = function (boolVal) {
|
||||
if (angular.isUndefined(boolVal)) {
|
||||
return $rememberLanguage;
|
||||
}
|
||||
$rememberLanguage = boolVal;
|
||||
};
|
||||
|
||||
this.$get = ['$interpolate', '$log', '$cookieStore', '$rootScope', '$COOKIE_KEY', function ($interpolate, $log, $cookieStore, $rootScope, $COOKIE_KEY) {
|
||||
|
||||
$translate = function (translationId, interpolateParams) {
|
||||
var translation = ($uses) ?
|
||||
$translationTable[$uses][translationId] :
|
||||
$translationTable[translationId];
|
||||
|
||||
if (translation) {
|
||||
return $interpolate(translation)(interpolateParams);
|
||||
}
|
||||
$log.warn("Translation for " + translationId + " doesn't exist");
|
||||
return translationId;
|
||||
};
|
||||
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
if ($uses !== key) {
|
||||
$uses = key;
|
||||
if ($rememberLanguage) {
|
||||
$cookieStore.put($COOKIE_KEY, $uses);
|
||||
}
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
}
|
||||
};
|
||||
|
||||
$translate.rememberLanguage = function () {
|
||||
return $rememberLanguage;
|
||||
};
|
||||
|
||||
return $translate;
|
||||
}];
|
||||
});
|
||||
+1
@@ -0,0 +1 @@
|
||||
angular.module("ngTranslate",["ng","ngCookies"]).run(["$translate","$COOKIE_KEY","$cookieStore",function(n,t,a){n.rememberLanguage()&&(a.get(t)?n.uses(a.get(t)):a.put(t,n.uses()))}]),angular.module("ngTranslate").directive("translate",["$filter","$interpolate",function(n,t){var a=n("translate");return{restrict:"A",scope:!0,link:function(n,r,e){e.$observe("translate",function(a){n.translationId=angular.equals(a,"")?t(r.text())(n.$parent):a}),e.$observe("values",function(t){n.interpolateParams=t}),n.$on("translationChangeSuccess",function(){r.html(a(n.translationId,n.interpolateParams))}),n.$watch("translationId + interpolateParams",function(){r.html(a(n.translationId,n.interpolateParams))})}}}]),angular.module("ngTranslate").filter("translate",["$parse","$translate",function(n,t){return function(a,r){return angular.isObject(r)||(r=n(r)()),t(a,r)}}]),angular.module("ngTranslate").constant("$COOKIE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("ngTranslate").provider("$translate",function(){var n,t={},a=!1;this.translations=function(n,a){if(!n&&!a)return t;if(n&&!a){if(angular.isString(n))return t[n];t=n}else t[n]=a},this.uses=function(a){if(!a)return n;if(!t[a])throw Error("$translateProvider couldn't find translationTable for langKey: '"+a+"'");n=a},this.rememberLanguage=function(n){return angular.isUndefined(n)?a:(a=n,void 0)},this.$get=["$interpolate","$log","$cookieStore","$rootScope","$COOKIE_KEY",function(r,e,o,s,i){return $translate=function(a,o){var s=n?t[n][a]:t[a];return s?r(s)(o):(e.warn("Translation for "+a+" doesn't exist"),a)},$translate.uses=function(t){return t?(n!==t&&(n=t,a&&o.put(i,n),s.$broadcast("translationChangeSuccess")),void 0):n},$translate.rememberLanguage=function(){return a},$translate}]});
|
||||
+138
@@ -0,0 +1,138 @@
|
||||
angular.module('ngTranslate', ['ng', 'ngCookies'])
|
||||
|
||||
.run(['$translate', '$COOKIE_KEY', '$cookieStore', function ($translate, $COOKIE_KEY, $cookieStore) {
|
||||
|
||||
if ($translate.rememberLanguage()) {
|
||||
if (!$cookieStore.get($COOKIE_KEY)) {
|
||||
$cookieStore.put($COOKIE_KEY, $translate.uses());
|
||||
} else {
|
||||
$translate.uses($cookieStore.get($COOKIE_KEY));
|
||||
}
|
||||
}
|
||||
}]);
|
||||
|
||||
angular.module('ngTranslate')
|
||||
|
||||
.directive('translate', ['$filter', '$interpolate', function ($filter, $interpolate) {
|
||||
|
||||
var translate = $filter('translate');
|
||||
|
||||
return {
|
||||
restrict: 'A',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId , '')) {
|
||||
scope.translationId = $interpolate(element.text())(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
|
||||
attr.$observe('values', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
|
||||
scope.$on('translationChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
});
|
||||
|
||||
scope.$watch('translationId + interpolateParams', function (nValue) {
|
||||
if (nValue) {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}]);
|
||||
|
||||
angular.module('ngTranslate')
|
||||
|
||||
.filter('translate', ['$parse', '$translate', function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams) {
|
||||
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams);
|
||||
};
|
||||
}]);
|
||||
|
||||
angular.module('ngTranslate').constant('$COOKIE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
|
||||
angular.module('ngTranslate').provider('$translate', function () {
|
||||
|
||||
var $translationTable = {},
|
||||
$uses,
|
||||
$rememberLanguage = false;
|
||||
|
||||
this.translations = function (langKey, translationTable) {
|
||||
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
$translationTable = langKey;
|
||||
}
|
||||
} else {
|
||||
$translationTable[langKey] = translationTable;
|
||||
}
|
||||
};
|
||||
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey]) {
|
||||
throw new Error("$translateProvider couldn't find translationTable for langKey: '" + langKey + "'");
|
||||
}
|
||||
$uses = langKey;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
|
||||
this.rememberLanguage = function (boolVal) {
|
||||
if (angular.isUndefined(boolVal)) {
|
||||
return $rememberLanguage;
|
||||
}
|
||||
$rememberLanguage = boolVal;
|
||||
};
|
||||
|
||||
this.$get = ['$interpolate', '$log', '$cookieStore', '$rootScope', '$COOKIE_KEY', function ($interpolate, $log, $cookieStore, $rootScope, $COOKIE_KEY) {
|
||||
|
||||
$translate = function (translationId, interpolateParams) {
|
||||
var translation = ($uses) ?
|
||||
$translationTable[$uses][translationId] :
|
||||
$translationTable[translationId];
|
||||
|
||||
if (translation) {
|
||||
return $interpolate(translation)(interpolateParams);
|
||||
}
|
||||
$log.warn("Translation for " + translationId + " doesn't exist");
|
||||
return translationId;
|
||||
};
|
||||
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
if ($uses !== key) {
|
||||
$uses = key;
|
||||
if ($rememberLanguage) {
|
||||
$cookieStore.put($COOKIE_KEY, $uses);
|
||||
}
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
}
|
||||
};
|
||||
|
||||
$translate.rememberLanguage = function () {
|
||||
return $rememberLanguage;
|
||||
};
|
||||
|
||||
return $translate;
|
||||
}];
|
||||
});
|
||||
+1
@@ -0,0 +1 @@
|
||||
angular.module("ngTranslate",["ng","ngCookies"]).run(["$translate","$COOKIE_KEY","$cookieStore",function(n,t,a){n.rememberLanguage()&&(a.get(t)?n.uses(a.get(t)):a.put(t,n.uses()))}]),angular.module("ngTranslate").directive("translate",["$filter","$interpolate",function(n,t){var a=n("translate");return{restrict:"A",scope:!0,link:function(n,r,e){e.$observe("translate",function(a){n.translationId=angular.equals(a,"")?t(r.text())(n.$parent):a}),e.$observe("values",function(t){n.interpolateParams=t}),n.$on("translationChangeSuccess",function(){r.html(a(n.translationId,n.interpolateParams))}),n.$watch("translationId + interpolateParams",function(t){t&&r.html(a(n.translationId,n.interpolateParams))})}}}]),angular.module("ngTranslate").filter("translate",["$parse","$translate",function(n,t){return function(a,r){return angular.isObject(r)||(r=n(r)()),t(a,r)}}]),angular.module("ngTranslate").constant("$COOKIE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("ngTranslate").provider("$translate",function(){var n,t={},a=!1;this.translations=function(n,a){if(!n&&!a)return t;if(n&&!a){if(angular.isString(n))return t[n];t=n}else t[n]=a},this.uses=function(a){if(!a)return n;if(!t[a])throw Error("$translateProvider couldn't find translationTable for langKey: '"+a+"'");n=a},this.rememberLanguage=function(n){return angular.isUndefined(n)?a:(a=n,void 0)},this.$get=["$interpolate","$log","$cookieStore","$rootScope","$COOKIE_KEY",function(r,e,o,s,i){return $translate=function(a,o){var s=n?t[n][a]:t[a];return s?r(s)(o):(e.warn("Translation for "+a+" doesn't exist"),a)},$translate.uses=function(t){return t?(n!==t&&(n=t,a&&o.put(i,n),s.$broadcast("translationChangeSuccess")),void 0):n},$translate.rememberLanguage=function(){return a},$translate}]});
|
||||
+227
@@ -0,0 +1,227 @@
|
||||
angular.module('ngTranslate', [
|
||||
'ng',
|
||||
'ngCookies'
|
||||
]).run([
|
||||
'$translate',
|
||||
'$COOKIE_KEY',
|
||||
'$cookieStore',
|
||||
function ($translate, $COOKIE_KEY, $cookieStore) {
|
||||
if ($translate.rememberLanguage()) {
|
||||
if (!$cookieStore.get($COOKIE_KEY)) {
|
||||
$cookieStore.put($COOKIE_KEY, $translate.uses());
|
||||
} else {
|
||||
$translate.uses($cookieStore.get($COOKIE_KEY));
|
||||
}
|
||||
}
|
||||
}
|
||||
]);
|
||||
angular.module('ngTranslate').constant('$COOKIE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
angular.module('ngTranslate').provider('$translate', function () {
|
||||
var $translationTable = {}, $uses, $rememberLanguage = false, $asyncLoaders = [];
|
||||
var LoaderGenerator = {
|
||||
forUrl: function (url) {
|
||||
return [
|
||||
'$http',
|
||||
'$q',
|
||||
function ($http, $q) {
|
||||
return function (key) {
|
||||
var deferred = $q.defer();
|
||||
$http({
|
||||
url: url,
|
||||
params: { lang: key },
|
||||
method: 'GET'
|
||||
}).success(function (data, status) {
|
||||
deferred.resolve(data);
|
||||
}).error(function (data, status) {
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
}
|
||||
];
|
||||
},
|
||||
byStaticFiles: function (prefix, suffix) {
|
||||
return [
|
||||
'$http',
|
||||
'$q',
|
||||
function ($http, $q) {
|
||||
return function (key) {
|
||||
var deferred = $q.defer();
|
||||
$http({
|
||||
url: [
|
||||
prefix,
|
||||
key,
|
||||
suffix
|
||||
].join(''),
|
||||
method: 'GET',
|
||||
params: ''
|
||||
}).success(function (data, status) {
|
||||
deferred.resolve(data);
|
||||
}).error(function (data, status) {
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
};
|
||||
this.translations = function (langKey, translationTable) {
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
$translationTable = langKey;
|
||||
}
|
||||
} else {
|
||||
$translationTable[langKey] = translationTable;
|
||||
}
|
||||
};
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey] && !$asyncLoaders.length) {
|
||||
throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
|
||||
}
|
||||
$uses = langKey;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
this.rememberLanguage = function (boolVal) {
|
||||
if (angular.isUndefined(boolVal)) {
|
||||
return $rememberLanguage;
|
||||
}
|
||||
$rememberLanguage = boolVal;
|
||||
};
|
||||
this.registerLoader = function (loader) {
|
||||
var $loader;
|
||||
if (!(angular.isFunction(loader) || angular.isArray(loader))) {
|
||||
if (angular.isString(loader)) {
|
||||
loader = {
|
||||
type: 'url',
|
||||
url: loader
|
||||
};
|
||||
}
|
||||
switch (loader.type) {
|
||||
case 'url':
|
||||
$loader = LoaderGenerator.forUrl(loader.url);
|
||||
break;
|
||||
case 'static-files':
|
||||
$loader = LoaderGenerator.byStaticFiles(loader.prefix, loader.suffix);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
$loader = loader;
|
||||
}
|
||||
$asyncLoaders.push($loader);
|
||||
};
|
||||
var invokeLoading = function ($injector, key) {
|
||||
var deferred = $injector.get('$q').defer(), loaderFn = $injector.invoke($asyncLoaders[0]);
|
||||
loaderFn(key).then(function (data) {
|
||||
$translationTable[key] = data;
|
||||
deferred.resolve(data);
|
||||
}, function (key) {
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
this.$get = [
|
||||
'$interpolate',
|
||||
'$log',
|
||||
'$injector',
|
||||
'$cookieStore',
|
||||
'$rootScope',
|
||||
'$q',
|
||||
'$COOKIE_KEY',
|
||||
function ($interpolate, $log, $injector, $cookieStore, $rootScope, $q, $COOKIE_KEY) {
|
||||
$translate = function (translationId, interpolateParams) {
|
||||
var translation = $uses ? $translationTable[$uses] ? $translationTable[$uses][translationId] : translationId : $translationTable[translationId];
|
||||
if (translation) {
|
||||
return $interpolate(translation)(interpolateParams);
|
||||
}
|
||||
$log.warn('Translation for ' + translationId + ' doesn\'t exist');
|
||||
return translationId;
|
||||
};
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
if (!$translationTable[key]) {
|
||||
invokeLoading($injector, key).then(function (data) {
|
||||
$uses = key;
|
||||
if ($rememberLanguage) {
|
||||
$cookieStore.put($COOKIE_KEY, $uses);
|
||||
}
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
deferred.resolve($uses);
|
||||
}, function (key) {
|
||||
$rootScope.$broadcast('translationChangeError');
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
}
|
||||
$uses = key;
|
||||
if ($rememberLanguage) {
|
||||
$cookieStore.put($COOKIE_KEY, $uses);
|
||||
}
|
||||
deferred.resolve($uses);
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.rememberLanguage = function () {
|
||||
return $rememberLanguage;
|
||||
};
|
||||
if ($asyncLoaders.length && angular.equals($translationTable, {})) {
|
||||
$translate.uses($translate.uses());
|
||||
}
|
||||
return $translate;
|
||||
}
|
||||
];
|
||||
});
|
||||
angular.module('ngTranslate').directive('translate', [
|
||||
'$filter',
|
||||
'$interpolate',
|
||||
function ($filter, $interpolate) {
|
||||
var translate = $filter('translate');
|
||||
return {
|
||||
restrict: 'A',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId, '')) {
|
||||
scope.translationId = $interpolate(element.text())(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
attr.$observe('values', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
scope.$on('translationChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
});
|
||||
scope.$watch('translationId + interpolateParams', function (nValue) {
|
||||
if (nValue) {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('ngTranslate').filter('translate', [
|
||||
'$parse',
|
||||
'$translate',
|
||||
function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams) {
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams);
|
||||
};
|
||||
}
|
||||
]);
|
||||
+1
@@ -0,0 +1 @@
|
||||
angular.module("ngTranslate",["ng","ngCookies"]).run(["$translate","$COOKIE_KEY","$cookieStore",function(n,r,t){n.rememberLanguage()&&(t.get(r)?n.uses(t.get(r)):t.put(r,n.uses()))}]),angular.module("ngTranslate").constant("$COOKIE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("ngTranslate").provider("$translate",function(){var n,r={},t=!1,e=[],a={forUrl:function(n){return["$http","$q",function(r,t){return function(e){var a=t.defer();return r({url:n,params:{lang:e},method:"GET"}).success(function(n){a.resolve(n)}).error(function(){a.reject(e)}),a.promise}}]},byStaticFiles:function(n,r){return["$http","$q",function(t,e){return function(a){var s=e.defer();return t({url:[n,a,r].join(""),method:"GET",params:""}).success(function(n){s.resolve(n)}).error(function(){s.reject(a)}),s.promise}}]}};this.translations=function(n,t){if(!n&&!t)return r;if(n&&!t){if(angular.isString(n))return r[n];r=n}else r[n]=t},this.uses=function(t){if(!t)return n;if(!r[t]&&!e.length)throw Error("$translateProvider couldn't find translationTable for langKey: '"+t+"'");n=t},this.rememberLanguage=function(n){return angular.isUndefined(n)?t:(t=n,void 0)},this.registerLoader=function(n){var r;if(angular.isFunction(n)||angular.isArray(n))r=n;else switch(angular.isString(n)&&(n={type:"url",url:n}),n.type){case"url":r=a.forUrl(n.url);break;case"static-files":r=a.byStaticFiles(n.prefix,n.suffix)}e.push(r)};var s=function(n,t){var a=n.get("$q").defer(),s=n.invoke(e[0]);return s(t).then(function(n){r[t]=n,a.resolve(n)},function(n){a.reject(n)}),a.promise};this.$get=["$interpolate","$log","$injector","$cookieStore","$rootScope","$q","$COOKIE_KEY",function(a,o,i,u,l,c,f){return $translate=function(t,e){var s=n?r[n]?r[n][t]:t:r[t];return s?a(s)(e):(o.warn("Translation for "+t+" doesn't exist"),t)},$translate.uses=function(e){if(!e)return n;var a=c.defer();return r[e]?(n=e,t&&u.put(f,n),a.resolve(n),l.$broadcast("translationChangeSuccess"),a.promise):(s(i,e).then(function(){n=e,t&&u.put(f,n),l.$broadcast("translationChangeSuccess"),a.resolve(n)},function(n){l.$broadcast("translationChangeError"),a.reject(n)}),a.promise)},$translate.rememberLanguage=function(){return t},e.length&&angular.equals(r,{})&&$translate.uses($translate.uses()),$translate}]}),angular.module("ngTranslate").directive("translate",["$filter","$interpolate",function(n,r){var t=n("translate");return{restrict:"A",scope:!0,link:function(n,e,a){a.$observe("translate",function(t){n.translationId=angular.equals(t,"")?r(e.text())(n.$parent):t}),a.$observe("values",function(r){n.interpolateParams=r}),n.$on("translationChangeSuccess",function(){e.html(t(n.translationId,n.interpolateParams))}),n.$watch("translationId + interpolateParams",function(r){r&&e.html(t(n.translationId,n.interpolateParams))})}}}]),angular.module("ngTranslate").filter("translate",["$parse","$translate",function(n,r){return function(t,e){return angular.isObject(e)||(e=n(e)()),r(t,e)}}]);
|
||||
+349
@@ -0,0 +1,349 @@
|
||||
angular.module('ngTranslate', ['ng']).run([
|
||||
'$translate',
|
||||
function ($translate) {
|
||||
var key = $translate.storageKey(), storage = $translate.storage();
|
||||
if (storage) {
|
||||
if (!storage.get(key)) {
|
||||
if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
} else {
|
||||
storage.set(key, $translate.uses());
|
||||
}
|
||||
} else {
|
||||
$translate.uses(storage.get(key));
|
||||
}
|
||||
} else if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
}
|
||||
}
|
||||
]);
|
||||
angular.module('ngTranslate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
angular.module('ngTranslate').provider('$translate', [
|
||||
'$STORAGE_KEY',
|
||||
function ($STORAGE_KEY) {
|
||||
var $translationTable = {}, $preferredLanguage, $uses, $storageFactory, $storageKey = $STORAGE_KEY, $storagePrefix, $missingTranslationHandler, $asyncLoaders = [], NESTED_OBJECT_DELIMITER = '.';
|
||||
var LoaderGenerator = {
|
||||
forUrl: function (url) {
|
||||
return [
|
||||
'$http',
|
||||
'$q',
|
||||
function ($http, $q) {
|
||||
return function (key) {
|
||||
var deferred = $q.defer();
|
||||
$http({
|
||||
url: url,
|
||||
params: { lang: key },
|
||||
method: 'GET'
|
||||
}).success(function (data, status) {
|
||||
deferred.resolve(data);
|
||||
}).error(function (data, status) {
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
}
|
||||
];
|
||||
},
|
||||
byStaticFiles: function (prefix, suffix) {
|
||||
return [
|
||||
'$http',
|
||||
'$q',
|
||||
function ($http, $q) {
|
||||
return function (key) {
|
||||
var deferred = $q.defer();
|
||||
$http({
|
||||
url: [
|
||||
prefix,
|
||||
key,
|
||||
suffix
|
||||
].join(''),
|
||||
method: 'GET',
|
||||
params: ''
|
||||
}).success(function (data, status) {
|
||||
deferred.resolve(data);
|
||||
}).error(function (data, status) {
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
};
|
||||
var translations = function (langKey, translationTable) {
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
angular.extend($translationTable, flatObject(langKey));
|
||||
}
|
||||
} else {
|
||||
if (!angular.isObject($translationTable[langKey])) {
|
||||
$translationTable[langKey] = {};
|
||||
}
|
||||
angular.extend($translationTable[langKey], flatObject(translationTable));
|
||||
}
|
||||
};
|
||||
var flatObject = function (data, path, result) {
|
||||
var key, keyWithPath, val;
|
||||
if (!path) {
|
||||
path = [];
|
||||
}
|
||||
if (!result) {
|
||||
result = {};
|
||||
}
|
||||
for (key in data) {
|
||||
if (!data.hasOwnProperty(key))
|
||||
continue;
|
||||
val = data[key];
|
||||
if (angular.isObject(val)) {
|
||||
flatObject(val, path.concat(key), result);
|
||||
} else {
|
||||
keyWithPath = path.length ? '' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key : key;
|
||||
result[keyWithPath] = val;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
var invokeLoading = function ($injector, key) {
|
||||
var deferred = $injector.get('$q').defer(), loaderFnBuilder = $asyncLoaders[0], loaderFn;
|
||||
if (loaderFnBuilder) {
|
||||
loaderFn = $injector.invoke(loaderFnBuilder);
|
||||
if (angular.isFunction(loaderFn)) {
|
||||
loaderFn(key).then(function (data) {
|
||||
translations(key, data);
|
||||
deferred.resolve(data);
|
||||
}, function (key) {
|
||||
deferred.reject(key);
|
||||
});
|
||||
} else {
|
||||
deferred.reject(key);
|
||||
}
|
||||
} else {
|
||||
deferred.reject(key);
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
this.translations = translations;
|
||||
this.preferredLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$preferredLanguage = langKey;
|
||||
} else {
|
||||
return $preferredLanguage;
|
||||
}
|
||||
};
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey] && !$asyncLoaders.length) {
|
||||
throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
|
||||
}
|
||||
$uses = langKey;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
var storageKey = function (key) {
|
||||
if (!key) {
|
||||
if ($storagePrefix) {
|
||||
return $storagePrefix + $storageKey;
|
||||
}
|
||||
return $storageKey;
|
||||
}
|
||||
$storageKey = key;
|
||||
};
|
||||
this.storageKey = storageKey;
|
||||
this.missingTranslationHandler = function (functionHandler) {
|
||||
if (angular.isUndefined(functionHandler)) {
|
||||
return $missingTranslationHandler;
|
||||
}
|
||||
$missingTranslationHandler = functionHandler;
|
||||
};
|
||||
this.registerLoader = function (loader) {
|
||||
if (!loader) {
|
||||
throw new Error('Please define a valid loader!');
|
||||
}
|
||||
var $loader;
|
||||
if (!(angular.isFunction(loader) || angular.isArray(loader))) {
|
||||
if (angular.isString(loader)) {
|
||||
loader = {
|
||||
type: 'url',
|
||||
url: loader
|
||||
};
|
||||
}
|
||||
switch (loader.type) {
|
||||
case 'url':
|
||||
$loader = LoaderGenerator.forUrl(loader.url);
|
||||
break;
|
||||
case 'static-files':
|
||||
$loader = LoaderGenerator.byStaticFiles(loader.prefix, loader.suffix);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
$loader = loader;
|
||||
}
|
||||
$asyncLoaders.push($loader);
|
||||
};
|
||||
this.useLoaderFactory = function (loader) {
|
||||
this.registerLoader(loader);
|
||||
};
|
||||
this.useLocalStorage = function () {
|
||||
this.useStorage('$translateLocalStorage');
|
||||
};
|
||||
this.useCookieStorage = function () {
|
||||
this.useStorage('$translateCookieStorage');
|
||||
};
|
||||
this.useStorage = function (storageFactory) {
|
||||
$storageFactory = storageFactory;
|
||||
};
|
||||
this.storagePrefix = function (prefix) {
|
||||
if (!prefix) {
|
||||
return prefix;
|
||||
}
|
||||
$storagePrefix = prefix;
|
||||
};
|
||||
this.$get = [
|
||||
'$interpolate',
|
||||
'$log',
|
||||
'$injector',
|
||||
'$rootScope',
|
||||
'$q',
|
||||
function ($interpolate, $log, $injector, $rootScope, $q) {
|
||||
var Storage;
|
||||
if ($storageFactory) {
|
||||
Storage = $injector.get($storageFactory);
|
||||
if (!Storage.get || !Storage.set) {
|
||||
throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or set() method!');
|
||||
}
|
||||
}
|
||||
var $translate = function (translationId, interpolateParams) {
|
||||
var translation = $uses ? $translationTable[$uses] ? $translationTable[$uses][translationId] : translationId : $translationTable[translationId];
|
||||
if (translation) {
|
||||
return $interpolate(translation)(interpolateParams);
|
||||
}
|
||||
if (!angular.isUndefined($missingTranslationHandler)) {
|
||||
$missingTranslationHandler(translationId);
|
||||
} else {
|
||||
$log.warn('Translation for ' + translationId + ' doesn\'t exist');
|
||||
}
|
||||
return translationId;
|
||||
};
|
||||
$translate.preferredLanguage = function () {
|
||||
return $preferredLanguage;
|
||||
};
|
||||
$translate.storage = function () {
|
||||
return Storage;
|
||||
};
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
if (!$translationTable[key]) {
|
||||
invokeLoading($injector, key).then(function (data) {
|
||||
$uses = key;
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
deferred.resolve($uses);
|
||||
}, function (key) {
|
||||
$rootScope.$broadcast('translationChangeError');
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
}
|
||||
$uses = key;
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
deferred.resolve($uses);
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.storageKey = function () {
|
||||
return storageKey();
|
||||
};
|
||||
if ($asyncLoaders.length && angular.equals($translationTable, {})) {
|
||||
$translate.uses($translate.uses());
|
||||
}
|
||||
return $translate;
|
||||
}
|
||||
];
|
||||
}
|
||||
]);
|
||||
angular.module('ngTranslate').directive('translate', [
|
||||
'$filter',
|
||||
'$interpolate',
|
||||
function ($filter, $interpolate) {
|
||||
var translate = $filter('translate');
|
||||
return {
|
||||
restrict: 'A',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId, '')) {
|
||||
scope.translationId = $interpolate(element.text().replace(/^\s+|\s+$/g, ''))(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
attr.$observe('values', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
scope.$on('translationChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
});
|
||||
scope.$watch('translationId + interpolateParams', function (nValue) {
|
||||
if (nValue) {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('ngTranslate').filter('translate', [
|
||||
'$parse',
|
||||
'$translate',
|
||||
function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams) {
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams);
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('ngTranslate').factory('$translateCookieStorage', [
|
||||
'$cookieStore',
|
||||
function ($cookieStore) {
|
||||
var $translateCookieStorage = {
|
||||
get: function (name) {
|
||||
return $cookieStore.get(name);
|
||||
},
|
||||
set: function (name, value) {
|
||||
$cookieStore.put(name, value);
|
||||
}
|
||||
};
|
||||
return $translateCookieStorage;
|
||||
}
|
||||
]);
|
||||
angular.module('ngTranslate').factory('$translateLocalStorage', [
|
||||
'$window',
|
||||
'$translateCookieStorage',
|
||||
function ($window, $translateCookieStorage) {
|
||||
var localStorageAdapter = {
|
||||
get: function (name) {
|
||||
return $window.localStorage.getItem(name);
|
||||
},
|
||||
set: function (name, value) {
|
||||
$window.localStorage.setItem(name, value);
|
||||
}
|
||||
};
|
||||
var $translateLocalStorage = 'localStorage' in $window && $window.localStorage !== null ? localStorageAdapter : $translateCookieStorage;
|
||||
return $translateLocalStorage;
|
||||
}
|
||||
]);
|
||||
+1
@@ -0,0 +1 @@
|
||||
angular.module("ngTranslate",["ng"]).run(["$translate",function(e){var r=e.storageKey(),t=e.storage();t?t.get(r)?e.uses(t.get(r)):angular.isString(e.preferredLanguage())?e.uses(e.preferredLanguage()):t.set(r,e.uses()):angular.isString(e.preferredLanguage())&&e.uses(e.preferredLanguage())}]),angular.module("ngTranslate").constant("$STORAGE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("ngTranslate").provider("$translate",["$STORAGE_KEY",function(e){var r,t,n,a,o,s={},i=e,u=[],l=".",c={forUrl:function(e){return["$http","$q",function(r,t){return function(n){var a=t.defer();return r({url:e,params:{lang:n},method:"GET"}).success(function(e){a.resolve(e)}).error(function(){a.reject(n)}),a.promise}}]},byStaticFiles:function(e,r){return["$http","$q",function(t,n){return function(a){var o=n.defer();return t({url:[e,a,r].join(""),method:"GET",params:""}).success(function(e){o.resolve(e)}).error(function(){o.reject(a)}),o.promise}}]}},g=function(e,r){if(!e&&!r)return s;if(e&&!r){if(angular.isString(e))return s[e];angular.extend(s,f(e))}else angular.isObject(s[e])||(s[e]={}),angular.extend(s[e],f(r))},f=function(e,r,t){var n,a,o;r||(r=[]),t||(t={});for(n in e)e.hasOwnProperty(n)&&(o=e[n],angular.isObject(o)?f(o,r.concat(n),t):(a=r.length?""+r.join(l)+l+n:n,t[a]=o));return t},d=function(e,r){var t,n=e.get("$q").defer(),a=u[0];return a?(t=e.invoke(a),angular.isFunction(t)?t(r).then(function(e){g(r,e),n.resolve(e)},function(e){n.reject(e)}):n.reject(r)):n.reject(r),n.promise};this.translations=g,this.preferredLanguage=function(e){return e?(r=e,void 0):r},this.uses=function(e){if(!e)return t;if(!s[e]&&!u.length)throw Error("$translateProvider couldn't find translationTable for langKey: '"+e+"'");t=e};var h=function(e){return e?(i=e,void 0):a?a+i:i};this.storageKey=h,this.missingTranslationHandler=function(e){return angular.isUndefined(e)?o:(o=e,void 0)},this.registerLoader=function(e){if(!e)throw Error("Please define a valid loader!");var r;if(angular.isFunction(e)||angular.isArray(e))r=e;else switch(angular.isString(e)&&(e={type:"url",url:e}),e.type){case"url":r=c.forUrl(e.url);break;case"static-files":r=c.byStaticFiles(e.prefix,e.suffix)}u.push(r)},this.useLoaderFactory=function(e){this.registerLoader(e)},this.useLocalStorage=function(){this.useStorage("$translateLocalStorage")},this.useCookieStorage=function(){this.useStorage("$translateCookieStorage")},this.useStorage=function(e){n=e},this.storagePrefix=function(e){return e?(a=e,void 0):e},this.$get=["$interpolate","$log","$injector","$rootScope","$q",function(e,a,i,l,c){var g;if(n&&(g=i.get(n),!g.get||!g.set))throw Error("Couldn't use storage '"+n+"', missing get() or set() method!");var f=function(r,n){var i=t?s[t]?s[t][r]:r:s[r];return i?e(i)(n):(angular.isUndefined(o)?a.warn("Translation for "+r+" doesn't exist"):o(r),r)};return f.preferredLanguage=function(){return r},f.storage=function(){return g},f.uses=function(e){if(!e)return t;var r=c.defer();return s[e]?(t=e,n&&g.set(f.storageKey(),t),r.resolve(t),l.$broadcast("translationChangeSuccess"),r.promise):(d(i,e).then(function(){t=e,n&&g.set(f.storageKey(),t),l.$broadcast("translationChangeSuccess"),r.resolve(t)},function(e){l.$broadcast("translationChangeError"),r.reject(e)}),r.promise)},f.storageKey=function(){return h()},u.length&&angular.equals(s,{})&&f.uses(f.uses()),f}]}]),angular.module("ngTranslate").directive("translate",["$filter","$interpolate",function(e,r){var t=e("translate");return{restrict:"A",scope:!0,link:function(e,n,a){a.$observe("translate",function(t){e.translationId=angular.equals(t,"")?r(n.text().replace(/^\s+|\s+$/g,""))(e.$parent):t}),a.$observe("values",function(r){e.interpolateParams=r}),e.$on("translationChangeSuccess",function(){n.html(t(e.translationId,e.interpolateParams))}),e.$watch("translationId + interpolateParams",function(r){r&&n.html(t(e.translationId,e.interpolateParams))})}}}]),angular.module("ngTranslate").filter("translate",["$parse","$translate",function(e,r){return function(t,n){return angular.isObject(n)||(n=e(n)()),r(t,n)}}]),angular.module("ngTranslate").factory("$translateCookieStorage",["$cookieStore",function(e){var r={get:function(r){return e.get(r)},set:function(r,t){e.put(r,t)}};return r}]),angular.module("ngTranslate").factory("$translateLocalStorage",["$window","$translateCookieStorage",function(e,r){var t={get:function(r){return e.localStorage.getItem(r)},set:function(r,t){e.localStorage.setItem(r,t)}},n="localStorage"in e&&null!==e.localStorage?t:r;return n}]);
|
||||
+349
@@ -0,0 +1,349 @@
|
||||
angular.module('pascalprecht.translate', ['ng']).run([
|
||||
'$translate',
|
||||
function ($translate) {
|
||||
var key = $translate.storageKey(), storage = $translate.storage();
|
||||
if (storage) {
|
||||
if (!storage.get(key)) {
|
||||
if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
} else {
|
||||
storage.set(key, $translate.uses());
|
||||
}
|
||||
} else {
|
||||
$translate.uses(storage.get(key));
|
||||
}
|
||||
} else if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
}
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
angular.module('pascalprecht.translate').provider('$translate', [
|
||||
'$STORAGE_KEY',
|
||||
function ($STORAGE_KEY) {
|
||||
var $translationTable = {}, $preferredLanguage, $uses, $storageFactory, $storageKey = $STORAGE_KEY, $storagePrefix, $missingTranslationHandler, $asyncLoaders = [], NESTED_OBJECT_DELIMITER = '.';
|
||||
var LoaderGenerator = {
|
||||
forUrl: function (url) {
|
||||
return [
|
||||
'$http',
|
||||
'$q',
|
||||
function ($http, $q) {
|
||||
return function (key) {
|
||||
var deferred = $q.defer();
|
||||
$http({
|
||||
url: url,
|
||||
params: { lang: key },
|
||||
method: 'GET'
|
||||
}).success(function (data, status) {
|
||||
deferred.resolve(data);
|
||||
}).error(function (data, status) {
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
}
|
||||
];
|
||||
},
|
||||
byStaticFiles: function (prefix, suffix) {
|
||||
return [
|
||||
'$http',
|
||||
'$q',
|
||||
function ($http, $q) {
|
||||
return function (key) {
|
||||
var deferred = $q.defer();
|
||||
$http({
|
||||
url: [
|
||||
prefix,
|
||||
key,
|
||||
suffix
|
||||
].join(''),
|
||||
method: 'GET',
|
||||
params: ''
|
||||
}).success(function (data, status) {
|
||||
deferred.resolve(data);
|
||||
}).error(function (data, status) {
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
};
|
||||
var translations = function (langKey, translationTable) {
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
angular.extend($translationTable, flatObject(langKey));
|
||||
}
|
||||
} else {
|
||||
if (!angular.isObject($translationTable[langKey])) {
|
||||
$translationTable[langKey] = {};
|
||||
}
|
||||
angular.extend($translationTable[langKey], flatObject(translationTable));
|
||||
}
|
||||
};
|
||||
var flatObject = function (data, path, result) {
|
||||
var key, keyWithPath, val;
|
||||
if (!path) {
|
||||
path = [];
|
||||
}
|
||||
if (!result) {
|
||||
result = {};
|
||||
}
|
||||
for (key in data) {
|
||||
if (!data.hasOwnProperty(key))
|
||||
continue;
|
||||
val = data[key];
|
||||
if (angular.isObject(val)) {
|
||||
flatObject(val, path.concat(key), result);
|
||||
} else {
|
||||
keyWithPath = path.length ? '' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key : key;
|
||||
result[keyWithPath] = val;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
var invokeLoading = function ($injector, key) {
|
||||
var deferred = $injector.get('$q').defer(), loaderFnBuilder = $asyncLoaders[0], loaderFn;
|
||||
if (loaderFnBuilder) {
|
||||
loaderFn = $injector.invoke(loaderFnBuilder);
|
||||
if (angular.isFunction(loaderFn)) {
|
||||
loaderFn(key).then(function (data) {
|
||||
translations(key, data);
|
||||
deferred.resolve(data);
|
||||
}, function (key) {
|
||||
deferred.reject(key);
|
||||
});
|
||||
} else {
|
||||
deferred.reject(key);
|
||||
}
|
||||
} else {
|
||||
deferred.reject(key);
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
this.translations = translations;
|
||||
this.preferredLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$preferredLanguage = langKey;
|
||||
} else {
|
||||
return $preferredLanguage;
|
||||
}
|
||||
};
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey] && !$asyncLoaders.length) {
|
||||
throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
|
||||
}
|
||||
$uses = langKey;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
var storageKey = function (key) {
|
||||
if (!key) {
|
||||
if ($storagePrefix) {
|
||||
return $storagePrefix + $storageKey;
|
||||
}
|
||||
return $storageKey;
|
||||
}
|
||||
$storageKey = key;
|
||||
};
|
||||
this.storageKey = storageKey;
|
||||
this.missingTranslationHandler = function (functionHandler) {
|
||||
if (angular.isUndefined(functionHandler)) {
|
||||
return $missingTranslationHandler;
|
||||
}
|
||||
$missingTranslationHandler = functionHandler;
|
||||
};
|
||||
this.registerLoader = function (loader) {
|
||||
if (!loader) {
|
||||
throw new Error('Please define a valid loader!');
|
||||
}
|
||||
var $loader;
|
||||
if (!(angular.isFunction(loader) || angular.isArray(loader))) {
|
||||
if (angular.isString(loader)) {
|
||||
loader = {
|
||||
type: 'url',
|
||||
url: loader
|
||||
};
|
||||
}
|
||||
switch (loader.type) {
|
||||
case 'url':
|
||||
$loader = LoaderGenerator.forUrl(loader.url);
|
||||
break;
|
||||
case 'static-files':
|
||||
$loader = LoaderGenerator.byStaticFiles(loader.prefix, loader.suffix);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
$loader = loader;
|
||||
}
|
||||
$asyncLoaders.push($loader);
|
||||
};
|
||||
this.useLoaderFactory = function (loader) {
|
||||
this.registerLoader(loader);
|
||||
};
|
||||
this.useLocalStorage = function () {
|
||||
this.useStorage('$translateLocalStorage');
|
||||
};
|
||||
this.useCookieStorage = function () {
|
||||
this.useStorage('$translateCookieStorage');
|
||||
};
|
||||
this.useStorage = function (storageFactory) {
|
||||
$storageFactory = storageFactory;
|
||||
};
|
||||
this.storagePrefix = function (prefix) {
|
||||
if (!prefix) {
|
||||
return prefix;
|
||||
}
|
||||
$storagePrefix = prefix;
|
||||
};
|
||||
this.$get = [
|
||||
'$interpolate',
|
||||
'$log',
|
||||
'$injector',
|
||||
'$rootScope',
|
||||
'$q',
|
||||
function ($interpolate, $log, $injector, $rootScope, $q) {
|
||||
var Storage;
|
||||
if ($storageFactory) {
|
||||
Storage = $injector.get($storageFactory);
|
||||
if (!Storage.get || !Storage.set) {
|
||||
throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or set() method!');
|
||||
}
|
||||
}
|
||||
var $translate = function (translationId, interpolateParams) {
|
||||
var translation = $uses ? $translationTable[$uses] ? $translationTable[$uses][translationId] : translationId : $translationTable[translationId];
|
||||
if (translation) {
|
||||
return $interpolate(translation)(interpolateParams);
|
||||
}
|
||||
if (!angular.isUndefined($missingTranslationHandler)) {
|
||||
$missingTranslationHandler(translationId);
|
||||
} else {
|
||||
$log.warn('Translation for ' + translationId + ' doesn\'t exist');
|
||||
}
|
||||
return translationId;
|
||||
};
|
||||
$translate.preferredLanguage = function () {
|
||||
return $preferredLanguage;
|
||||
};
|
||||
$translate.storage = function () {
|
||||
return Storage;
|
||||
};
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
if (!$translationTable[key]) {
|
||||
invokeLoading($injector, key).then(function (data) {
|
||||
$uses = key;
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
deferred.resolve($uses);
|
||||
}, function (key) {
|
||||
$rootScope.$broadcast('translationChangeError');
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
}
|
||||
$uses = key;
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
deferred.resolve($uses);
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.storageKey = function () {
|
||||
return storageKey();
|
||||
};
|
||||
if ($asyncLoaders.length && angular.equals($translationTable, {})) {
|
||||
$translate.uses($translate.uses());
|
||||
}
|
||||
return $translate;
|
||||
}
|
||||
];
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').directive('translate', [
|
||||
'$filter',
|
||||
'$interpolate',
|
||||
function ($filter, $interpolate) {
|
||||
var translate = $filter('translate');
|
||||
return {
|
||||
restrict: 'A',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId, '')) {
|
||||
scope.translationId = $interpolate(element.text().replace(/^\s+|\s+$/g, ''))(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
attr.$observe('values', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
scope.$on('translationChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
});
|
||||
scope.$watch('translationId + interpolateParams', function (nValue) {
|
||||
if (nValue) {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').filter('translate', [
|
||||
'$parse',
|
||||
'$translate',
|
||||
function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams) {
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams);
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').factory('$translateCookieStorage', [
|
||||
'$cookieStore',
|
||||
function ($cookieStore) {
|
||||
var $translateCookieStorage = {
|
||||
get: function (name) {
|
||||
return $cookieStore.get(name);
|
||||
},
|
||||
set: function (name, value) {
|
||||
$cookieStore.put(name, value);
|
||||
}
|
||||
};
|
||||
return $translateCookieStorage;
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').factory('$translateLocalStorage', [
|
||||
'$window',
|
||||
'$translateCookieStorage',
|
||||
function ($window, $translateCookieStorage) {
|
||||
var localStorageAdapter = {
|
||||
get: function (name) {
|
||||
return $window.localStorage.getItem(name);
|
||||
},
|
||||
set: function (name, value) {
|
||||
$window.localStorage.setItem(name, value);
|
||||
}
|
||||
};
|
||||
var $translateLocalStorage = 'localStorage' in $window && $window.localStorage !== null ? localStorageAdapter : $translateCookieStorage;
|
||||
return $translateLocalStorage;
|
||||
}
|
||||
]);
|
||||
+1
@@ -0,0 +1 @@
|
||||
angular.module("pascalprecht.translate",["ng"]).run(["$translate",function(t){var e=t.storageKey(),r=t.storage();r?r.get(e)?t.uses(r.get(e)):angular.isString(t.preferredLanguage())?t.uses(t.preferredLanguage()):r.set(e,t.uses()):angular.isString(t.preferredLanguage())&&t.uses(t.preferredLanguage())}]),angular.module("pascalprecht.translate").constant("$STORAGE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("pascalprecht.translate").provider("$translate",["$STORAGE_KEY",function(t){var e,r,n,a,o,s={},i=t,u=[],l=".",c={forUrl:function(t){return["$http","$q",function(e,r){return function(n){var a=r.defer();return e({url:t,params:{lang:n},method:"GET"}).success(function(t){a.resolve(t)}).error(function(){a.reject(n)}),a.promise}}]},byStaticFiles:function(t,e){return["$http","$q",function(r,n){return function(a){var o=n.defer();return r({url:[t,a,e].join(""),method:"GET",params:""}).success(function(t){o.resolve(t)}).error(function(){o.reject(a)}),o.promise}}]}},g=function(t,e){if(!t&&!e)return s;if(t&&!e){if(angular.isString(t))return s[t];angular.extend(s,f(t))}else angular.isObject(s[t])||(s[t]={}),angular.extend(s[t],f(e))},f=function(t,e,r){var n,a,o;e||(e=[]),r||(r={});for(n in t)t.hasOwnProperty(n)&&(o=t[n],angular.isObject(o)?f(o,e.concat(n),r):(a=e.length?""+e.join(l)+l+n:n,r[a]=o));return r},d=function(t,e){var r,n=t.get("$q").defer(),a=u[0];return a?(r=t.invoke(a),angular.isFunction(r)?r(e).then(function(t){g(e,t),n.resolve(t)},function(t){n.reject(t)}):n.reject(e)):n.reject(e),n.promise};this.translations=g,this.preferredLanguage=function(t){return t?(e=t,void 0):e},this.uses=function(t){if(!t)return r;if(!s[t]&&!u.length)throw Error("$translateProvider couldn't find translationTable for langKey: '"+t+"'");r=t};var p=function(t){return t?(i=t,void 0):a?a+i:i};this.storageKey=p,this.missingTranslationHandler=function(t){return angular.isUndefined(t)?o:(o=t,void 0)},this.registerLoader=function(t){if(!t)throw Error("Please define a valid loader!");var e;if(angular.isFunction(t)||angular.isArray(t))e=t;else switch(angular.isString(t)&&(t={type:"url",url:t}),t.type){case"url":e=c.forUrl(t.url);break;case"static-files":e=c.byStaticFiles(t.prefix,t.suffix)}u.push(e)},this.useLoaderFactory=function(t){this.registerLoader(t)},this.useLocalStorage=function(){this.useStorage("$translateLocalStorage")},this.useCookieStorage=function(){this.useStorage("$translateCookieStorage")},this.useStorage=function(t){n=t},this.storagePrefix=function(t){return t?(a=t,void 0):t},this.$get=["$interpolate","$log","$injector","$rootScope","$q",function(t,a,i,l,c){var g;if(n&&(g=i.get(n),!g.get||!g.set))throw Error("Couldn't use storage '"+n+"', missing get() or set() method!");var f=function(e,n){var i=r?s[r]?s[r][e]:e:s[e];return i?t(i)(n):(angular.isUndefined(o)?a.warn("Translation for "+e+" doesn't exist"):o(e),e)};return f.preferredLanguage=function(){return e},f.storage=function(){return g},f.uses=function(t){if(!t)return r;var e=c.defer();return s[t]?(r=t,n&&g.set(f.storageKey(),r),e.resolve(r),l.$broadcast("translationChangeSuccess"),e.promise):(d(i,t).then(function(){r=t,n&&g.set(f.storageKey(),r),l.$broadcast("translationChangeSuccess"),e.resolve(r)},function(t){l.$broadcast("translationChangeError"),e.reject(t)}),e.promise)},f.storageKey=function(){return p()},u.length&&angular.equals(s,{})&&f.uses(f.uses()),f}]}]),angular.module("pascalprecht.translate").directive("translate",["$filter","$interpolate",function(t,e){var r=t("translate");return{restrict:"A",scope:!0,link:function(t,n,a){a.$observe("translate",function(r){t.translationId=angular.equals(r,"")?e(n.text().replace(/^\s+|\s+$/g,""))(t.$parent):r}),a.$observe("values",function(e){t.interpolateParams=e}),t.$on("translationChangeSuccess",function(){n.html(r(t.translationId,t.interpolateParams))}),t.$watch("translationId + interpolateParams",function(e){e&&n.html(r(t.translationId,t.interpolateParams))})}}}]),angular.module("pascalprecht.translate").filter("translate",["$parse","$translate",function(t,e){return function(r,n){return angular.isObject(n)||(n=t(n)()),e(r,n)}}]),angular.module("pascalprecht.translate").factory("$translateCookieStorage",["$cookieStore",function(t){var e={get:function(e){return t.get(e)},set:function(e,r){t.put(e,r)}};return e}]),angular.module("pascalprecht.translate").factory("$translateLocalStorage",["$window","$translateCookieStorage",function(t,e){var r={get:function(e){return t.localStorage.getItem(e)},set:function(e,r){t.localStorage.setItem(e,r)}},n="localStorage"in t&&null!==t.localStorage?r:e;return n}]);
|
||||
+355
@@ -0,0 +1,355 @@
|
||||
angular.module('pascalprecht.translate', ['ng']).run([
|
||||
'$translate',
|
||||
function ($translate) {
|
||||
var key = $translate.storageKey(), storage = $translate.storage();
|
||||
if (storage) {
|
||||
if (!storage.get(key)) {
|
||||
if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
} else {
|
||||
storage.set(key, $translate.uses());
|
||||
}
|
||||
} else {
|
||||
$translate.uses(storage.get(key));
|
||||
}
|
||||
} else if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
}
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
angular.module('pascalprecht.translate').provider('$translate', [
|
||||
'$STORAGE_KEY',
|
||||
function ($STORAGE_KEY) {
|
||||
var $translationTable = {}, $preferredLanguage, $uses, $storageFactory, $storageKey = $STORAGE_KEY, $storagePrefix, $missingTranslationHandlerFactory, $asyncLoaders = [], NESTED_OBJECT_DELIMITER = '.';
|
||||
var LoaderGenerator = {
|
||||
forUrl: function (url) {
|
||||
return [
|
||||
'$http',
|
||||
'$q',
|
||||
function ($http, $q) {
|
||||
return function (key) {
|
||||
var deferred = $q.defer();
|
||||
$http({
|
||||
url: url,
|
||||
params: { lang: key },
|
||||
method: 'GET'
|
||||
}).success(function (data, status) {
|
||||
deferred.resolve(data);
|
||||
}).error(function (data, status) {
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
}
|
||||
];
|
||||
},
|
||||
byStaticFiles: function (prefix, suffix) {
|
||||
return [
|
||||
'$http',
|
||||
'$q',
|
||||
function ($http, $q) {
|
||||
return function (key) {
|
||||
var deferred = $q.defer();
|
||||
$http({
|
||||
url: [
|
||||
prefix,
|
||||
key,
|
||||
suffix
|
||||
].join(''),
|
||||
method: 'GET',
|
||||
params: ''
|
||||
}).success(function (data, status) {
|
||||
deferred.resolve(data);
|
||||
}).error(function (data, status) {
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
};
|
||||
var translations = function (langKey, translationTable) {
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
angular.extend($translationTable, flatObject(langKey));
|
||||
}
|
||||
} else {
|
||||
if (!angular.isObject($translationTable[langKey])) {
|
||||
$translationTable[langKey] = {};
|
||||
}
|
||||
angular.extend($translationTable[langKey], flatObject(translationTable));
|
||||
}
|
||||
};
|
||||
var flatObject = function (data, path, result) {
|
||||
var key, keyWithPath, val;
|
||||
if (!path) {
|
||||
path = [];
|
||||
}
|
||||
if (!result) {
|
||||
result = {};
|
||||
}
|
||||
for (key in data) {
|
||||
if (!data.hasOwnProperty(key))
|
||||
continue;
|
||||
val = data[key];
|
||||
if (angular.isObject(val)) {
|
||||
flatObject(val, path.concat(key), result);
|
||||
} else {
|
||||
keyWithPath = path.length ? '' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key : key;
|
||||
result[keyWithPath] = val;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
var invokeLoading = function ($injector, key) {
|
||||
var deferred = $injector.get('$q').defer(), loaderFnBuilder = $asyncLoaders[0], loaderFn;
|
||||
if (loaderFnBuilder) {
|
||||
loaderFn = $injector.invoke(loaderFnBuilder);
|
||||
if (angular.isFunction(loaderFn)) {
|
||||
loaderFn(key).then(function (data) {
|
||||
translations(key, data);
|
||||
deferred.resolve(data);
|
||||
}, function (key) {
|
||||
deferred.reject(key);
|
||||
});
|
||||
} else {
|
||||
deferred.reject(key);
|
||||
}
|
||||
} else {
|
||||
deferred.reject(key);
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
this.translations = translations;
|
||||
this.preferredLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$preferredLanguage = langKey;
|
||||
} else {
|
||||
return $preferredLanguage;
|
||||
}
|
||||
};
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey] && !$asyncLoaders.length) {
|
||||
throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
|
||||
}
|
||||
$uses = langKey;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
var storageKey = function (key) {
|
||||
if (!key) {
|
||||
if ($storagePrefix) {
|
||||
return $storagePrefix + $storageKey;
|
||||
}
|
||||
return $storageKey;
|
||||
}
|
||||
$storageKey = key;
|
||||
};
|
||||
this.storageKey = storageKey;
|
||||
this.registerLoader = function (loader) {
|
||||
if (!loader) {
|
||||
throw new Error('Please define a valid loader!');
|
||||
}
|
||||
var $loader;
|
||||
if (!(angular.isFunction(loader) || angular.isArray(loader))) {
|
||||
if (angular.isString(loader)) {
|
||||
loader = {
|
||||
type: 'url',
|
||||
url: loader
|
||||
};
|
||||
}
|
||||
switch (loader.type) {
|
||||
case 'url':
|
||||
$loader = LoaderGenerator.forUrl(loader.url);
|
||||
break;
|
||||
case 'static-files':
|
||||
$loader = LoaderGenerator.byStaticFiles(loader.prefix, loader.suffix);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
$loader = loader;
|
||||
}
|
||||
$asyncLoaders.push($loader);
|
||||
};
|
||||
this.useLoaderFactory = function (loader) {
|
||||
this.registerLoader(loader);
|
||||
};
|
||||
this.useLocalStorage = function () {
|
||||
this.useStorage('$translateLocalStorage');
|
||||
};
|
||||
this.useCookieStorage = function () {
|
||||
this.useStorage('$translateCookieStorage');
|
||||
};
|
||||
this.useStorage = function (storageFactory) {
|
||||
$storageFactory = storageFactory;
|
||||
};
|
||||
this.storagePrefix = function (prefix) {
|
||||
if (!prefix) {
|
||||
return prefix;
|
||||
}
|
||||
$storagePrefix = prefix;
|
||||
};
|
||||
this.useMissingTranslationHandlerLog = function () {
|
||||
this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog');
|
||||
};
|
||||
this.useMissingTranslationHandler = function (factory) {
|
||||
$missingTranslationHandlerFactory = factory;
|
||||
};
|
||||
this.$get = [
|
||||
'$interpolate',
|
||||
'$log',
|
||||
'$injector',
|
||||
'$rootScope',
|
||||
'$q',
|
||||
function ($interpolate, $log, $injector, $rootScope, $q) {
|
||||
var Storage;
|
||||
if ($storageFactory) {
|
||||
Storage = $injector.get($storageFactory);
|
||||
if (!Storage.get || !Storage.set) {
|
||||
throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or set() method!');
|
||||
}
|
||||
}
|
||||
var $translate = function (translationId, interpolateParams) {
|
||||
var translation = $uses ? $translationTable[$uses] ? $translationTable[$uses][translationId] : translationId : $translationTable[translationId];
|
||||
if (translation) {
|
||||
return $interpolate(translation)(interpolateParams);
|
||||
}
|
||||
if ($missingTranslationHandlerFactory) {
|
||||
$injector.get($missingTranslationHandlerFactory)(translationId);
|
||||
}
|
||||
return translationId;
|
||||
};
|
||||
$translate.preferredLanguage = function () {
|
||||
return $preferredLanguage;
|
||||
};
|
||||
$translate.storage = function () {
|
||||
return Storage;
|
||||
};
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
if (!$translationTable[key]) {
|
||||
invokeLoading($injector, key).then(function (data) {
|
||||
$uses = key;
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
deferred.resolve($uses);
|
||||
}, function (key) {
|
||||
$rootScope.$broadcast('translationChangeError');
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
}
|
||||
$uses = key;
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
deferred.resolve($uses);
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.storageKey = function () {
|
||||
return storageKey();
|
||||
};
|
||||
if ($asyncLoaders.length && angular.equals($translationTable, {})) {
|
||||
$translate.uses($translate.uses());
|
||||
}
|
||||
return $translate;
|
||||
}
|
||||
];
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').directive('translate', [
|
||||
'$filter',
|
||||
'$interpolate',
|
||||
function ($filter, $interpolate) {
|
||||
var translate = $filter('translate');
|
||||
return {
|
||||
restrict: 'A',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId, '')) {
|
||||
scope.translationId = $interpolate(element.text().replace(/^\s+|\s+$/g, ''))(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
attr.$observe('values', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
scope.$on('translationChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
});
|
||||
scope.$watch('translationId + interpolateParams', function (nValue) {
|
||||
if (nValue) {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').filter('translate', [
|
||||
'$parse',
|
||||
'$translate',
|
||||
function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams) {
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams);
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').factory('$translateCookieStorage', [
|
||||
'$cookieStore',
|
||||
function ($cookieStore) {
|
||||
var $translateCookieStorage = {
|
||||
get: function (name) {
|
||||
return $cookieStore.get(name);
|
||||
},
|
||||
set: function (name, value) {
|
||||
$cookieStore.put(name, value);
|
||||
}
|
||||
};
|
||||
return $translateCookieStorage;
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').factory('$translateLocalStorage', [
|
||||
'$window',
|
||||
'$translateCookieStorage',
|
||||
function ($window, $translateCookieStorage) {
|
||||
var localStorageAdapter = {
|
||||
get: function (name) {
|
||||
return $window.localStorage.getItem(name);
|
||||
},
|
||||
set: function (name, value) {
|
||||
$window.localStorage.setItem(name, value);
|
||||
}
|
||||
};
|
||||
var $translateLocalStorage = 'localStorage' in $window && $window.localStorage !== null ? localStorageAdapter : $translateCookieStorage;
|
||||
return $translateLocalStorage;
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').factory('$translateMissingTranslationHandlerLog', [
|
||||
'$log',
|
||||
function ($log) {
|
||||
return function (translationId) {
|
||||
$log.warn('Translation for ' + translationId + ' doesn\'t exist');
|
||||
};
|
||||
}
|
||||
]);
|
||||
+1
@@ -0,0 +1 @@
|
||||
angular.module("pascalprecht.translate",["ng"]).run(["$translate",function(t){var r=t.storageKey(),e=t.storage();e?e.get(r)?t.uses(e.get(r)):angular.isString(t.preferredLanguage())?t.uses(t.preferredLanguage()):e.set(r,t.uses()):angular.isString(t.preferredLanguage())&&t.uses(t.preferredLanguage())}]),angular.module("pascalprecht.translate").constant("$STORAGE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("pascalprecht.translate").provider("$translate",["$STORAGE_KEY",function(t){var r,e,n,a,o,s={},i=t,u=[],l=".",c={forUrl:function(t){return["$http","$q",function(r,e){return function(n){var a=e.defer();return r({url:t,params:{lang:n},method:"GET"}).success(function(t){a.resolve(t)}).error(function(){a.reject(n)}),a.promise}}]},byStaticFiles:function(t,r){return["$http","$q",function(e,n){return function(a){var o=n.defer();return e({url:[t,a,r].join(""),method:"GET",params:""}).success(function(t){o.resolve(t)}).error(function(){o.reject(a)}),o.promise}}]}},g=function(t,r){if(!t&&!r)return s;if(t&&!r){if(angular.isString(t))return s[t];angular.extend(s,f(t))}else angular.isObject(s[t])||(s[t]={}),angular.extend(s[t],f(r))},f=function(t,r,e){var n,a,o;r||(r=[]),e||(e={});for(n in t)t.hasOwnProperty(n)&&(o=t[n],angular.isObject(o)?f(o,r.concat(n),e):(a=r.length?""+r.join(l)+l+n:n,e[a]=o));return e},d=function(t,r){var e,n=t.get("$q").defer(),a=u[0];return a?(e=t.invoke(a),angular.isFunction(e)?e(r).then(function(t){g(r,t),n.resolve(t)},function(t){n.reject(t)}):n.reject(r)):n.reject(r),n.promise};this.translations=g,this.preferredLanguage=function(t){return t?(r=t,void 0):r},this.uses=function(t){if(!t)return e;if(!s[t]&&!u.length)throw Error("$translateProvider couldn't find translationTable for langKey: '"+t+"'");e=t};var p=function(t){return t?(i=t,void 0):a?a+i:i};this.storageKey=p,this.registerLoader=function(t){if(!t)throw Error("Please define a valid loader!");var r;if(angular.isFunction(t)||angular.isArray(t))r=t;else switch(angular.isString(t)&&(t={type:"url",url:t}),t.type){case"url":r=c.forUrl(t.url);break;case"static-files":r=c.byStaticFiles(t.prefix,t.suffix)}u.push(r)},this.useLoaderFactory=function(t){this.registerLoader(t)},this.useLocalStorage=function(){this.useStorage("$translateLocalStorage")},this.useCookieStorage=function(){this.useStorage("$translateCookieStorage")},this.useStorage=function(t){n=t},this.storagePrefix=function(t){return t?(a=t,void 0):t},this.useMissingTranslationHandlerLog=function(){this.useMissingTranslationHandler("$translateMissingTranslationHandlerLog")},this.useMissingTranslationHandler=function(t){o=t},this.$get=["$interpolate","$log","$injector","$rootScope","$q",function(t,a,i,l,c){var g;if(n&&(g=i.get(n),!g.get||!g.set))throw Error("Couldn't use storage '"+n+"', missing get() or set() method!");var f=function(r,n){var a=e?s[e]?s[e][r]:r:s[r];return a?t(a)(n):(o&&i.get(o)(r),r)};return f.preferredLanguage=function(){return r},f.storage=function(){return g},f.uses=function(t){if(!t)return e;var r=c.defer();return s[t]?(e=t,n&&g.set(f.storageKey(),e),r.resolve(e),l.$broadcast("translationChangeSuccess"),r.promise):(d(i,t).then(function(){e=t,n&&g.set(f.storageKey(),e),l.$broadcast("translationChangeSuccess"),r.resolve(e)},function(t){l.$broadcast("translationChangeError"),r.reject(t)}),r.promise)},f.storageKey=function(){return p()},u.length&&angular.equals(s,{})&&f.uses(f.uses()),f}]}]),angular.module("pascalprecht.translate").directive("translate",["$filter","$interpolate",function(t,r){var e=t("translate");return{restrict:"A",scope:!0,link:function(t,n,a){a.$observe("translate",function(e){t.translationId=angular.equals(e,"")?r(n.text().replace(/^\s+|\s+$/g,""))(t.$parent):e}),a.$observe("values",function(r){t.interpolateParams=r}),t.$on("translationChangeSuccess",function(){n.html(e(t.translationId,t.interpolateParams))}),t.$watch("translationId + interpolateParams",function(r){r&&n.html(e(t.translationId,t.interpolateParams))})}}}]),angular.module("pascalprecht.translate").filter("translate",["$parse","$translate",function(t,r){return function(e,n){return angular.isObject(n)||(n=t(n)()),r(e,n)}}]),angular.module("pascalprecht.translate").factory("$translateCookieStorage",["$cookieStore",function(t){var r={get:function(r){return t.get(r)},set:function(r,e){t.put(r,e)}};return r}]),angular.module("pascalprecht.translate").factory("$translateLocalStorage",["$window","$translateCookieStorage",function(t,r){var e={get:function(r){return t.localStorage.getItem(r)},set:function(r,e){t.localStorage.setItem(r,e)}},n="localStorage"in t&&null!==t.localStorage?e:r;return n}]),angular.module("pascalprecht.translate").factory("$translateMissingTranslationHandlerLog",["$log",function(t){return function(r){t.warn("Translation for "+r+" doesn't exist")}}]);
|
||||
+241
@@ -0,0 +1,241 @@
|
||||
angular.module('pascalprecht.translate', ['ng']).run([
|
||||
'$translate',
|
||||
function ($translate) {
|
||||
var key = $translate.storageKey(), storage = $translate.storage();
|
||||
if (storage) {
|
||||
if (!storage.get(key)) {
|
||||
if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
} else {
|
||||
storage.set(key, $translate.uses());
|
||||
}
|
||||
} else {
|
||||
$translate.uses(storage.get(key));
|
||||
}
|
||||
} else if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
}
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
angular.module('pascalprecht.translate').provider('$translate', [
|
||||
'$STORAGE_KEY',
|
||||
function ($STORAGE_KEY) {
|
||||
var $translationTable = {}, $preferredLanguage, $uses, $storageFactory, $storageKey = $STORAGE_KEY, $storagePrefix, $missingTranslationHandlerFactory, $loaderFactory, $loaderOptions, NESTED_OBJECT_DELIMITER = '.';
|
||||
var translations = function (langKey, translationTable) {
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
angular.extend($translationTable, flatObject(langKey));
|
||||
}
|
||||
} else {
|
||||
if (!angular.isObject($translationTable[langKey])) {
|
||||
$translationTable[langKey] = {};
|
||||
}
|
||||
angular.extend($translationTable[langKey], flatObject(translationTable));
|
||||
}
|
||||
};
|
||||
var flatObject = function (data, path, result) {
|
||||
var key, keyWithPath, val;
|
||||
if (!path) {
|
||||
path = [];
|
||||
}
|
||||
if (!result) {
|
||||
result = {};
|
||||
}
|
||||
for (key in data) {
|
||||
if (!data.hasOwnProperty(key))
|
||||
continue;
|
||||
val = data[key];
|
||||
if (angular.isObject(val)) {
|
||||
flatObject(val, path.concat(key), result);
|
||||
} else {
|
||||
keyWithPath = path.length ? '' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key : key;
|
||||
result[keyWithPath] = val;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
this.translations = translations;
|
||||
this.preferredLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$preferredLanguage = langKey;
|
||||
} else {
|
||||
return $preferredLanguage;
|
||||
}
|
||||
};
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey] && !$loaderFactory) {
|
||||
throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
|
||||
}
|
||||
$uses = langKey;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
var storageKey = function (key) {
|
||||
if (!key) {
|
||||
if ($storagePrefix) {
|
||||
return $storagePrefix + $storageKey;
|
||||
}
|
||||
return $storageKey;
|
||||
}
|
||||
$storageKey = key;
|
||||
};
|
||||
this.storageKey = storageKey;
|
||||
this.useUrlLoader = function (url) {
|
||||
this.useLoader('$translateUrlLoader', { url: url });
|
||||
};
|
||||
this.useStaticFilesLoader = function (options) {
|
||||
this.useLoader('$translateStaticFilesLoader', options);
|
||||
};
|
||||
this.useLoader = function (loaderFactory, options) {
|
||||
$loaderFactory = loaderFactory;
|
||||
$loaderOptions = options;
|
||||
};
|
||||
this.useLocalStorage = function () {
|
||||
this.useStorage('$translateLocalStorage');
|
||||
};
|
||||
this.useCookieStorage = function () {
|
||||
this.useStorage('$translateCookieStorage');
|
||||
};
|
||||
this.useStorage = function (storageFactory) {
|
||||
$storageFactory = storageFactory;
|
||||
};
|
||||
this.storagePrefix = function (prefix) {
|
||||
if (!prefix) {
|
||||
return prefix;
|
||||
}
|
||||
$storagePrefix = prefix;
|
||||
};
|
||||
this.useMissingTranslationHandlerLog = function () {
|
||||
this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog');
|
||||
};
|
||||
this.useMissingTranslationHandler = function (factory) {
|
||||
$missingTranslationHandlerFactory = factory;
|
||||
};
|
||||
this.$get = [
|
||||
'$interpolate',
|
||||
'$log',
|
||||
'$injector',
|
||||
'$rootScope',
|
||||
'$q',
|
||||
function ($interpolate, $log, $injector, $rootScope, $q) {
|
||||
var Storage;
|
||||
if ($storageFactory) {
|
||||
Storage = $injector.get($storageFactory);
|
||||
if (!Storage.get || !Storage.set) {
|
||||
throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or set() method!');
|
||||
}
|
||||
}
|
||||
var $translate = function (translationId, interpolateParams) {
|
||||
var translation = $uses ? $translationTable[$uses] ? $translationTable[$uses][translationId] : translationId : $translationTable[translationId];
|
||||
if (translation) {
|
||||
return $interpolate(translation)(interpolateParams);
|
||||
}
|
||||
if ($missingTranslationHandlerFactory) {
|
||||
$injector.get($missingTranslationHandlerFactory)(translationId);
|
||||
}
|
||||
return translationId;
|
||||
};
|
||||
$translate.preferredLanguage = function () {
|
||||
return $preferredLanguage;
|
||||
};
|
||||
$translate.storage = function () {
|
||||
return Storage;
|
||||
};
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
if (!$translationTable[key]) {
|
||||
$injector.get($loaderFactory)(angular.extend($loaderOptions, { key: key })).then(function (data) {
|
||||
$uses = key;
|
||||
translations(key, data);
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
deferred.resolve($uses);
|
||||
}, function (key) {
|
||||
$rootScope.$broadcast('translationChangeError');
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
}
|
||||
$uses = key;
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
deferred.resolve($uses);
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.storageKey = function () {
|
||||
return storageKey();
|
||||
};
|
||||
if ($loaderFactory && angular.equals($translationTable, {})) {
|
||||
$translate.uses($translate.uses());
|
||||
}
|
||||
return $translate;
|
||||
}
|
||||
];
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').directive('translate', [
|
||||
'$filter',
|
||||
'$interpolate',
|
||||
function ($filter, $interpolate) {
|
||||
var translate = $filter('translate');
|
||||
return {
|
||||
restrict: 'A',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId, '')) {
|
||||
scope.translationId = $interpolate(element.text().replace(/^\s+|\s+$/g, ''))(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
attr.$observe('values', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
scope.$on('translationChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
});
|
||||
scope.$watch('translationId + interpolateParams', function (nValue) {
|
||||
if (nValue) {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').filter('translate', [
|
||||
'$parse',
|
||||
'$translate',
|
||||
function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams) {
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams);
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').factory('$translateMissingTranslationHandlerLog', [
|
||||
'$log',
|
||||
function ($log) {
|
||||
return function (translationId) {
|
||||
$log.warn('Translation for ' + translationId + ' doesn\'t exist');
|
||||
};
|
||||
}
|
||||
]);
|
||||
+1
@@ -0,0 +1 @@
|
||||
angular.module("pascalprecht.translate",["ng"]).run(["$translate",function(t){var e=t.storageKey(),r=t.storage();r?r.get(e)?t.uses(r.get(e)):angular.isString(t.preferredLanguage())?t.uses(t.preferredLanguage()):r.set(e,t.uses()):angular.isString(t.preferredLanguage())&&t.uses(t.preferredLanguage())}]),angular.module("pascalprecht.translate").constant("$STORAGE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("pascalprecht.translate").provider("$translate",["$STORAGE_KEY",function(t){var e,r,a,n,s,o,i,u={},l=t,c=".",g=function(t,e){if(!t&&!e)return u;if(t&&!e){if(angular.isString(t))return u[t];angular.extend(u,f(t))}else angular.isObject(u[t])||(u[t]={}),angular.extend(u[t],f(e))},f=function(t,e,r){var a,n,s;e||(e=[]),r||(r={});for(a in t)t.hasOwnProperty(a)&&(s=t[a],angular.isObject(s)?f(s,e.concat(a),r):(n=e.length?""+e.join(c)+c+a:a,r[n]=s));return r};this.translations=g,this.preferredLanguage=function(t){return t?(e=t,void 0):e},this.uses=function(t){if(!t)return r;if(!u[t]&&!o)throw Error("$translateProvider couldn't find translationTable for langKey: '"+t+"'");r=t};var d=function(t){return t?(l=t,void 0):n?n+l:l};this.storageKey=d,this.useUrlLoader=function(t){this.useLoader("$translateUrlLoader",{url:t})},this.useStaticFilesLoader=function(t){this.useLoader("$translateStaticFilesLoader",t)},this.useLoader=function(t,e){o=t,i=e},this.useLocalStorage=function(){this.useStorage("$translateLocalStorage")},this.useCookieStorage=function(){this.useStorage("$translateCookieStorage")},this.useStorage=function(t){a=t},this.storagePrefix=function(t){return t?(n=t,void 0):t},this.useMissingTranslationHandlerLog=function(){this.useMissingTranslationHandler("$translateMissingTranslationHandlerLog")},this.useMissingTranslationHandler=function(t){s=t},this.$get=["$interpolate","$log","$injector","$rootScope","$q",function(t,n,l,c,f){var h;if(a&&(h=l.get(a),!h.get||!h.set))throw Error("Couldn't use storage '"+a+"', missing get() or set() method!");var p=function(e,a){var n=r?u[r]?u[r][e]:e:u[e];return n?t(n)(a):(s&&l.get(s)(e),e)};return p.preferredLanguage=function(){return e},p.storage=function(){return h},p.uses=function(t){if(!t)return r;var e=f.defer();return u[t]?(r=t,a&&h.set(p.storageKey(),r),e.resolve(r),c.$broadcast("translationChangeSuccess"),e.promise):(l.get(o)(angular.extend(i,{key:t})).then(function(n){r=t,g(t,n),a&&h.set(p.storageKey(),r),c.$broadcast("translationChangeSuccess"),e.resolve(r)},function(t){c.$broadcast("translationChangeError"),e.reject(t)}),e.promise)},p.storageKey=function(){return d()},o&&angular.equals(u,{})&&p.uses(p.uses()),p}]}]),angular.module("pascalprecht.translate").directive("translate",["$filter","$interpolate",function(t,e){var r=t("translate");return{restrict:"A",scope:!0,link:function(t,a,n){n.$observe("translate",function(r){t.translationId=angular.equals(r,"")?e(a.text().replace(/^\s+|\s+$/g,""))(t.$parent):r}),n.$observe("values",function(e){t.interpolateParams=e}),t.$on("translationChangeSuccess",function(){a.html(r(t.translationId,t.interpolateParams))}),t.$watch("translationId + interpolateParams",function(e){e&&a.html(r(t.translationId,t.interpolateParams))})}}}]),angular.module("pascalprecht.translate").filter("translate",["$parse","$translate",function(t,e){return function(r,a){return angular.isObject(a)||(a=t(a)()),e(r,a)}}]),angular.module("pascalprecht.translate").factory("$translateMissingTranslationHandlerLog",["$log",function(t){return function(e){t.warn("Translation for "+e+" doesn't exist")}}]);
|
||||
+233
@@ -0,0 +1,233 @@
|
||||
angular.module('pascalprecht.translate', ['ng']).run([
|
||||
'$translate',
|
||||
function ($translate) {
|
||||
var key = $translate.storageKey(), storage = $translate.storage();
|
||||
if (storage) {
|
||||
if (!storage.get(key)) {
|
||||
if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
} else {
|
||||
storage.set(key, $translate.uses());
|
||||
}
|
||||
} else {
|
||||
$translate.uses(storage.get(key));
|
||||
}
|
||||
} else if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
}
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
angular.module('pascalprecht.translate').provider('$translate', [
|
||||
'$STORAGE_KEY',
|
||||
function ($STORAGE_KEY) {
|
||||
var $translationTable = {}, $preferredLanguage, $uses, $storageFactory, $storageKey = $STORAGE_KEY, $storagePrefix, $missingTranslationHandlerFactory, $loaderFactory, $loaderOptions, NESTED_OBJECT_DELIMITER = '.';
|
||||
var translations = function (langKey, translationTable) {
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
angular.extend($translationTable, flatObject(langKey));
|
||||
}
|
||||
} else {
|
||||
if (!angular.isObject($translationTable[langKey])) {
|
||||
$translationTable[langKey] = {};
|
||||
}
|
||||
angular.extend($translationTable[langKey], flatObject(translationTable));
|
||||
}
|
||||
};
|
||||
var flatObject = function (data, path, result) {
|
||||
var key, keyWithPath, val;
|
||||
if (!path) {
|
||||
path = [];
|
||||
}
|
||||
if (!result) {
|
||||
result = {};
|
||||
}
|
||||
for (key in data) {
|
||||
if (!data.hasOwnProperty(key))
|
||||
continue;
|
||||
val = data[key];
|
||||
if (angular.isObject(val)) {
|
||||
flatObject(val, path.concat(key), result);
|
||||
} else {
|
||||
keyWithPath = path.length ? '' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key : key;
|
||||
result[keyWithPath] = val;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
this.translations = translations;
|
||||
this.preferredLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$preferredLanguage = langKey;
|
||||
} else {
|
||||
return $preferredLanguage;
|
||||
}
|
||||
};
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey] && !$loaderFactory) {
|
||||
throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
|
||||
}
|
||||
$uses = langKey;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
var storageKey = function (key) {
|
||||
if (!key) {
|
||||
if ($storagePrefix) {
|
||||
return $storagePrefix + $storageKey;
|
||||
}
|
||||
return $storageKey;
|
||||
}
|
||||
$storageKey = key;
|
||||
};
|
||||
this.storageKey = storageKey;
|
||||
this.useUrlLoader = function (url) {
|
||||
this.useLoader('$translateUrlLoader', { url: url });
|
||||
};
|
||||
this.useStaticFilesLoader = function (options) {
|
||||
this.useLoader('$translateStaticFilesLoader', options);
|
||||
};
|
||||
this.useLoader = function (loaderFactory, options) {
|
||||
$loaderFactory = loaderFactory;
|
||||
$loaderOptions = options;
|
||||
};
|
||||
this.useLocalStorage = function () {
|
||||
this.useStorage('$translateLocalStorage');
|
||||
};
|
||||
this.useCookieStorage = function () {
|
||||
this.useStorage('$translateCookieStorage');
|
||||
};
|
||||
this.useStorage = function (storageFactory) {
|
||||
$storageFactory = storageFactory;
|
||||
};
|
||||
this.storagePrefix = function (prefix) {
|
||||
if (!prefix) {
|
||||
return prefix;
|
||||
}
|
||||
$storagePrefix = prefix;
|
||||
};
|
||||
this.useMissingTranslationHandlerLog = function () {
|
||||
this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog');
|
||||
};
|
||||
this.useMissingTranslationHandler = function (factory) {
|
||||
$missingTranslationHandlerFactory = factory;
|
||||
};
|
||||
this.$get = [
|
||||
'$interpolate',
|
||||
'$log',
|
||||
'$injector',
|
||||
'$rootScope',
|
||||
'$q',
|
||||
function ($interpolate, $log, $injector, $rootScope, $q) {
|
||||
var Storage;
|
||||
if ($storageFactory) {
|
||||
Storage = $injector.get($storageFactory);
|
||||
if (!Storage.get || !Storage.set) {
|
||||
throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or set() method!');
|
||||
}
|
||||
}
|
||||
var $translate = function (translationId, interpolateParams) {
|
||||
var translation = $uses ? $translationTable[$uses] ? $translationTable[$uses][translationId] : translationId : $translationTable[translationId];
|
||||
if (translation) {
|
||||
return $interpolate(translation)(interpolateParams);
|
||||
}
|
||||
if ($missingTranslationHandlerFactory) {
|
||||
$injector.get($missingTranslationHandlerFactory)(translationId);
|
||||
}
|
||||
return translationId;
|
||||
};
|
||||
$translate.preferredLanguage = function () {
|
||||
return $preferredLanguage;
|
||||
};
|
||||
$translate.storage = function () {
|
||||
return Storage;
|
||||
};
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
if (!$translationTable[key]) {
|
||||
$injector.get($loaderFactory)(angular.extend($loaderOptions, { key: key })).then(function (data) {
|
||||
$uses = key;
|
||||
translations(key, data);
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
deferred.resolve($uses);
|
||||
}, function (key) {
|
||||
$rootScope.$broadcast('translationChangeError');
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
}
|
||||
$uses = key;
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
deferred.resolve($uses);
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.storageKey = function () {
|
||||
return storageKey();
|
||||
};
|
||||
if ($loaderFactory && angular.equals($translationTable, {})) {
|
||||
$translate.uses($translate.uses());
|
||||
}
|
||||
return $translate;
|
||||
}
|
||||
];
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').directive('translate', [
|
||||
'$filter',
|
||||
'$interpolate',
|
||||
function ($filter, $interpolate) {
|
||||
var translate = $filter('translate');
|
||||
return {
|
||||
restrict: 'A',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId, '')) {
|
||||
scope.translationId = $interpolate(element.text().replace(/^\s+|\s+$/g, ''))(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
attr.$observe('values', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
scope.$on('translationChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
});
|
||||
scope.$watch('translationId + interpolateParams', function (nValue) {
|
||||
if (nValue) {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').filter('translate', [
|
||||
'$parse',
|
||||
'$translate',
|
||||
function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams) {
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams);
|
||||
};
|
||||
}
|
||||
]);
|
||||
+1
@@ -0,0 +1 @@
|
||||
angular.module("pascalprecht.translate",["ng"]).run(["$translate",function(t){var e=t.storageKey(),r=t.storage();r?r.get(e)?t.uses(r.get(e)):angular.isString(t.preferredLanguage())?t.uses(t.preferredLanguage()):r.set(e,t.uses()):angular.isString(t.preferredLanguage())&&t.uses(t.preferredLanguage())}]),angular.module("pascalprecht.translate").constant("$STORAGE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("pascalprecht.translate").provider("$translate",["$STORAGE_KEY",function(t){var e,r,a,n,s,o,i,u={},l=t,g=".",c=function(t,e){if(!t&&!e)return u;if(t&&!e){if(angular.isString(t))return u[t];angular.extend(u,f(t))}else angular.isObject(u[t])||(u[t]={}),angular.extend(u[t],f(e))},f=function(t,e,r){var a,n,s;e||(e=[]),r||(r={});for(a in t)t.hasOwnProperty(a)&&(s=t[a],angular.isObject(s)?f(s,e.concat(a),r):(n=e.length?""+e.join(g)+g+a:a,r[n]=s));return r};this.translations=c,this.preferredLanguage=function(t){return t?(e=t,void 0):e},this.uses=function(t){if(!t)return r;if(!u[t]&&!o)throw Error("$translateProvider couldn't find translationTable for langKey: '"+t+"'");r=t};var d=function(t){return t?(l=t,void 0):n?n+l:l};this.storageKey=d,this.useUrlLoader=function(t){this.useLoader("$translateUrlLoader",{url:t})},this.useStaticFilesLoader=function(t){this.useLoader("$translateStaticFilesLoader",t)},this.useLoader=function(t,e){o=t,i=e},this.useLocalStorage=function(){this.useStorage("$translateLocalStorage")},this.useCookieStorage=function(){this.useStorage("$translateCookieStorage")},this.useStorage=function(t){a=t},this.storagePrefix=function(t){return t?(n=t,void 0):t},this.useMissingTranslationHandlerLog=function(){this.useMissingTranslationHandler("$translateMissingTranslationHandlerLog")},this.useMissingTranslationHandler=function(t){s=t},this.$get=["$interpolate","$log","$injector","$rootScope","$q",function(t,n,l,g,f){var h;if(a&&(h=l.get(a),!h.get||!h.set))throw Error("Couldn't use storage '"+a+"', missing get() or set() method!");var p=function(e,a){var n=r?u[r]?u[r][e]:e:u[e];return n?t(n)(a):(s&&l.get(s)(e),e)};return p.preferredLanguage=function(){return e},p.storage=function(){return h},p.uses=function(t){if(!t)return r;var e=f.defer();return u[t]?(r=t,a&&h.set(p.storageKey(),r),e.resolve(r),g.$broadcast("translationChangeSuccess"),e.promise):(l.get(o)(angular.extend(i,{key:t})).then(function(n){r=t,c(t,n),a&&h.set(p.storageKey(),r),g.$broadcast("translationChangeSuccess"),e.resolve(r)},function(t){g.$broadcast("translationChangeError"),e.reject(t)}),e.promise)},p.storageKey=function(){return d()},o&&angular.equals(u,{})&&p.uses(p.uses()),p}]}]),angular.module("pascalprecht.translate").directive("translate",["$filter","$interpolate",function(t,e){var r=t("translate");return{restrict:"A",scope:!0,link:function(t,a,n){n.$observe("translate",function(r){t.translationId=angular.equals(r,"")?e(a.text().replace(/^\s+|\s+$/g,""))(t.$parent):r}),n.$observe("values",function(e){t.interpolateParams=e}),t.$on("translationChangeSuccess",function(){a.html(r(t.translationId,t.interpolateParams))}),t.$watch("translationId + interpolateParams",function(e){e&&a.html(r(t.translationId,t.interpolateParams))})}}}]),angular.module("pascalprecht.translate").filter("translate",["$parse","$translate",function(t,e){return function(r,a){return angular.isObject(a)||(a=t(a)()),e(r,a)}}]);
|
||||
+257
@@ -0,0 +1,257 @@
|
||||
angular.module('pascalprecht.translate', ['ng']).run([
|
||||
'$translate',
|
||||
function ($translate) {
|
||||
var key = $translate.storageKey(), storage = $translate.storage();
|
||||
if (storage) {
|
||||
if (!storage.get(key)) {
|
||||
if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
} else {
|
||||
storage.set(key, $translate.uses());
|
||||
}
|
||||
} else {
|
||||
$translate.uses(storage.get(key));
|
||||
}
|
||||
} else if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
}
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
angular.module('pascalprecht.translate').provider('$translate', [
|
||||
'$STORAGE_KEY',
|
||||
function ($STORAGE_KEY) {
|
||||
var $translationTable = {}, $preferredLanguage, $fallbackLanguage, $uses, $storageFactory, $storageKey = $STORAGE_KEY, $storagePrefix, $missingTranslationHandlerFactory, $loaderFactory, $loaderOptions, NESTED_OBJECT_DELIMITER = '.';
|
||||
var translations = function (langKey, translationTable) {
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
angular.extend($translationTable, flatObject(langKey));
|
||||
}
|
||||
} else {
|
||||
if (!angular.isObject($translationTable[langKey])) {
|
||||
$translationTable[langKey] = {};
|
||||
}
|
||||
angular.extend($translationTable[langKey], flatObject(translationTable));
|
||||
}
|
||||
};
|
||||
var flatObject = function (data, path, result) {
|
||||
var key, keyWithPath, val;
|
||||
if (!path) {
|
||||
path = [];
|
||||
}
|
||||
if (!result) {
|
||||
result = {};
|
||||
}
|
||||
for (key in data) {
|
||||
if (!data.hasOwnProperty(key))
|
||||
continue;
|
||||
val = data[key];
|
||||
if (angular.isObject(val)) {
|
||||
flatObject(val, path.concat(key), result);
|
||||
} else {
|
||||
keyWithPath = path.length ? '' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key : key;
|
||||
result[keyWithPath] = val;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
this.translations = translations;
|
||||
this.preferredLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$preferredLanguage = langKey;
|
||||
} else {
|
||||
return $preferredLanguage;
|
||||
}
|
||||
};
|
||||
this.fallbackLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$fallbackLanguage = langKey;
|
||||
} else {
|
||||
return $fallbackLanguage;
|
||||
}
|
||||
};
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey] && !$loaderFactory) {
|
||||
throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
|
||||
}
|
||||
$uses = langKey;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
var storageKey = function (key) {
|
||||
if (!key) {
|
||||
if ($storagePrefix) {
|
||||
return $storagePrefix + $storageKey;
|
||||
}
|
||||
return $storageKey;
|
||||
}
|
||||
$storageKey = key;
|
||||
};
|
||||
this.storageKey = storageKey;
|
||||
this.useUrlLoader = function (url) {
|
||||
this.useLoader('$translateUrlLoader', { url: url });
|
||||
};
|
||||
this.useStaticFilesLoader = function (options) {
|
||||
this.useLoader('$translateStaticFilesLoader', options);
|
||||
};
|
||||
this.useLoader = function (loaderFactory, options) {
|
||||
$loaderFactory = loaderFactory;
|
||||
$loaderOptions = options;
|
||||
};
|
||||
this.useLocalStorage = function () {
|
||||
this.useStorage('$translateLocalStorage');
|
||||
};
|
||||
this.useCookieStorage = function () {
|
||||
this.useStorage('$translateCookieStorage');
|
||||
};
|
||||
this.useStorage = function (storageFactory) {
|
||||
$storageFactory = storageFactory;
|
||||
};
|
||||
this.storagePrefix = function (prefix) {
|
||||
if (!prefix) {
|
||||
return prefix;
|
||||
}
|
||||
$storagePrefix = prefix;
|
||||
};
|
||||
this.useMissingTranslationHandlerLog = function () {
|
||||
this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog');
|
||||
};
|
||||
this.useMissingTranslationHandler = function (factory) {
|
||||
$missingTranslationHandlerFactory = factory;
|
||||
};
|
||||
this.$get = [
|
||||
'$interpolate',
|
||||
'$log',
|
||||
'$injector',
|
||||
'$rootScope',
|
||||
'$q',
|
||||
function ($interpolate, $log, $injector, $rootScope, $q) {
|
||||
var Storage;
|
||||
if ($storageFactory) {
|
||||
Storage = $injector.get($storageFactory);
|
||||
if (!Storage.get || !Storage.set) {
|
||||
throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or set() method!');
|
||||
}
|
||||
}
|
||||
var $translate = function (translationId, interpolateParams) {
|
||||
var table = $uses ? $translationTable[$uses] : $translationTable;
|
||||
if (table && table.hasOwnProperty(translationId)) {
|
||||
return $interpolate(table[translationId])(interpolateParams);
|
||||
}
|
||||
if ($missingTranslationHandlerFactory) {
|
||||
$injector.get($missingTranslationHandlerFactory)(translationId);
|
||||
}
|
||||
if ($uses && $fallbackLanguage && $uses !== $fallbackLanguage) {
|
||||
var translation = $translationTable[$fallbackLanguage][translationId];
|
||||
if (translation) {
|
||||
return $interpolate(translation)(interpolateParams);
|
||||
}
|
||||
}
|
||||
return translationId;
|
||||
};
|
||||
$translate.preferredLanguage = function () {
|
||||
return $preferredLanguage;
|
||||
};
|
||||
$translate.fallbackLanguage = function () {
|
||||
return $fallbackLanguage;
|
||||
};
|
||||
$translate.storage = function () {
|
||||
return Storage;
|
||||
};
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
if (!$translationTable[key]) {
|
||||
$injector.get($loaderFactory)(angular.extend($loaderOptions, { key: key })).then(function (data) {
|
||||
var translationTable = {};
|
||||
if (angular.isArray(data)) {
|
||||
angular.forEach(data, function (table) {
|
||||
angular.extend(translationTable, table);
|
||||
});
|
||||
} else {
|
||||
angular.extend(translationTable, data);
|
||||
}
|
||||
translations(key, translationTable);
|
||||
$uses = key;
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
deferred.resolve($uses);
|
||||
}, function (key) {
|
||||
$rootScope.$broadcast('translationChangeError');
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
}
|
||||
$uses = key;
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
deferred.resolve($uses);
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.storageKey = function () {
|
||||
return storageKey();
|
||||
};
|
||||
if ($loaderFactory && angular.equals($translationTable, {})) {
|
||||
$translate.uses($translate.uses());
|
||||
}
|
||||
return $translate;
|
||||
}
|
||||
];
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').directive('translate', [
|
||||
'$filter',
|
||||
'$interpolate',
|
||||
function ($filter, $interpolate) {
|
||||
var translate = $filter('translate');
|
||||
return {
|
||||
restrict: 'A',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId, '')) {
|
||||
scope.translationId = $interpolate(element.text().replace(/^\s+|\s+$/g, ''))(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
attr.$observe('values', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
scope.$on('translationChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
});
|
||||
scope.$watch('translationId + interpolateParams', function (nValue) {
|
||||
if (nValue) {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').filter('translate', [
|
||||
'$parse',
|
||||
'$translate',
|
||||
function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams) {
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams);
|
||||
};
|
||||
}
|
||||
]);
|
||||
+1
@@ -0,0 +1 @@
|
||||
angular.module("pascalprecht.translate",["ng"]).run(["$translate",function(a){var b=a.storageKey(),c=a.storage();c?c.get(b)?a.uses(c.get(b)):angular.isString(a.preferredLanguage())?a.uses(a.preferredLanguage()):c.set(b,a.uses()):angular.isString(a.preferredLanguage())&&a.uses(a.preferredLanguage())}]),angular.module("pascalprecht.translate").constant("$STORAGE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("pascalprecht.translate").provider("$translate",["$STORAGE_KEY",function(a){var b,c,d,e,f,g,h,i,j={},k=a,l=".",m=function(a,b){if(!a&&!b)return j;if(a&&!b){if(angular.isString(a))return j[a];angular.extend(j,n(a))}else angular.isObject(j[a])||(j[a]={}),angular.extend(j[a],n(b))},n=function(a,b,c){var d,e,f;b||(b=[]),c||(c={});for(d in a)a.hasOwnProperty(d)&&(f=a[d],angular.isObject(f)?n(f,b.concat(d),c):(e=b.length?""+b.join(l)+l+d:d,c[e]=f));return c};this.translations=m,this.preferredLanguage=function(a){return a?(b=a,void 0):b},this.fallbackLanguage=function(a){return a?(c=a,void 0):c},this.uses=function(a){if(!a)return d;if(!j[a]&&!h)throw new Error("$translateProvider couldn't find translationTable for langKey: '"+a+"'");d=a};var o=function(a){return a?(k=a,void 0):f?f+k:k};this.storageKey=o,this.useUrlLoader=function(a){this.useLoader("$translateUrlLoader",{url:a})},this.useStaticFilesLoader=function(a){this.useLoader("$translateStaticFilesLoader",a)},this.useLoader=function(a,b){h=a,i=b},this.useLocalStorage=function(){this.useStorage("$translateLocalStorage")},this.useCookieStorage=function(){this.useStorage("$translateCookieStorage")},this.useStorage=function(a){e=a},this.storagePrefix=function(a){return a?(f=a,void 0):a},this.useMissingTranslationHandlerLog=function(){this.useMissingTranslationHandler("$translateMissingTranslationHandlerLog")},this.useMissingTranslationHandler=function(a){g=a},this.$get=["$interpolate","$log","$injector","$rootScope","$q",function(a,f,k,l,n){var p;if(e&&(p=k.get(e),!p.get||!p.set))throw new Error("Couldn't use storage '"+e+"', missing get() or set() method!");var q=function(b,e){var f=d?j[d]:j;if(f&&f.hasOwnProperty(b))return a(f[b])(e);if(g&&k.get(g)(b),d&&c&&d!==c){var h=j[c][b];if(h)return a(h)(e)}return b};return q.preferredLanguage=function(){return b},q.fallbackLanguage=function(){return c},q.storage=function(){return p},q.uses=function(a){if(!a)return d;var b=n.defer();return j[a]?(d=a,e&&p.set(q.storageKey(),d),b.resolve(d),l.$broadcast("translationChangeSuccess"),b.promise):(k.get(h)(angular.extend(i,{key:a})).then(function(c){var f={};angular.isArray(c)?angular.forEach(c,function(a){angular.extend(f,a)}):angular.extend(f,c),m(a,f),d=a,e&&p.set(q.storageKey(),d),l.$broadcast("translationChangeSuccess"),b.resolve(d)},function(a){l.$broadcast("translationChangeError"),b.reject(a)}),b.promise)},q.storageKey=function(){return o()},h&&angular.equals(j,{})&&q.uses(q.uses()),q}]}]),angular.module("pascalprecht.translate").directive("translate",["$filter","$interpolate",function(a,b){var c=a("translate");return{restrict:"A",scope:!0,link:function(a,d,e){e.$observe("translate",function(c){a.translationId=angular.equals(c,"")?b(d.text().replace(/^\s+|\s+$/g,""))(a.$parent):c}),e.$observe("values",function(b){a.interpolateParams=b}),a.$on("translationChangeSuccess",function(){d.html(c(a.translationId,a.interpolateParams))}),a.$watch("translationId + interpolateParams",function(b){b&&d.html(c(a.translationId,a.interpolateParams))})}}}]),angular.module("pascalprecht.translate").filter("translate",["$parse","$translate",function(a,b){return function(c,d){return angular.isObject(d)||(d=a(d)()),b(c,d)}}]);
|
||||
+259
@@ -0,0 +1,259 @@
|
||||
angular.module('pascalprecht.translate', ['ng']).run([
|
||||
'$translate',
|
||||
function ($translate) {
|
||||
var key = $translate.storageKey(), storage = $translate.storage();
|
||||
if (storage) {
|
||||
if (!storage.get(key)) {
|
||||
if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
} else {
|
||||
storage.set(key, $translate.uses());
|
||||
}
|
||||
} else {
|
||||
$translate.uses(storage.get(key));
|
||||
}
|
||||
} else if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
}
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
angular.module('pascalprecht.translate').provider('$translate', [
|
||||
'$STORAGE_KEY',
|
||||
function ($STORAGE_KEY) {
|
||||
var $translationTable = {}, $preferredLanguage, $fallbackLanguage, $uses, $storageFactory, $storageKey = $STORAGE_KEY, $storagePrefix, $missingTranslationHandlerFactory, $loaderFactory, $loaderOptions, NESTED_OBJECT_DELIMITER = '.';
|
||||
var translations = function (langKey, translationTable) {
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
angular.extend($translationTable, flatObject(langKey));
|
||||
}
|
||||
} else {
|
||||
if (!angular.isObject($translationTable[langKey])) {
|
||||
$translationTable[langKey] = {};
|
||||
}
|
||||
angular.extend($translationTable[langKey], flatObject(translationTable));
|
||||
}
|
||||
};
|
||||
var flatObject = function (data, path, result) {
|
||||
var key, keyWithPath, val;
|
||||
if (!path) {
|
||||
path = [];
|
||||
}
|
||||
if (!result) {
|
||||
result = {};
|
||||
}
|
||||
for (key in data) {
|
||||
if (!data.hasOwnProperty(key))
|
||||
continue;
|
||||
val = data[key];
|
||||
if (angular.isObject(val)) {
|
||||
flatObject(val, path.concat(key), result);
|
||||
} else {
|
||||
keyWithPath = path.length ? '' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key : key;
|
||||
result[keyWithPath] = val;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
this.translations = translations;
|
||||
this.preferredLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$preferredLanguage = langKey;
|
||||
} else {
|
||||
return $preferredLanguage;
|
||||
}
|
||||
};
|
||||
this.fallbackLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$fallbackLanguage = langKey;
|
||||
} else {
|
||||
return $fallbackLanguage;
|
||||
}
|
||||
};
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey] && !$loaderFactory) {
|
||||
throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
|
||||
}
|
||||
$uses = langKey;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
var storageKey = function (key) {
|
||||
if (!key) {
|
||||
if ($storagePrefix) {
|
||||
return $storagePrefix + $storageKey;
|
||||
}
|
||||
return $storageKey;
|
||||
}
|
||||
$storageKey = key;
|
||||
};
|
||||
this.storageKey = storageKey;
|
||||
this.useUrlLoader = function (url) {
|
||||
this.useLoader('$translateUrlLoader', { url: url });
|
||||
};
|
||||
this.useStaticFilesLoader = function (options) {
|
||||
this.useLoader('$translateStaticFilesLoader', options);
|
||||
};
|
||||
this.useLoader = function (loaderFactory, options) {
|
||||
$loaderFactory = loaderFactory;
|
||||
$loaderOptions = options || {};
|
||||
};
|
||||
this.useLocalStorage = function () {
|
||||
this.useStorage('$translateLocalStorage');
|
||||
};
|
||||
this.useCookieStorage = function () {
|
||||
this.useStorage('$translateCookieStorage');
|
||||
};
|
||||
this.useStorage = function (storageFactory) {
|
||||
$storageFactory = storageFactory;
|
||||
};
|
||||
this.storagePrefix = function (prefix) {
|
||||
if (!prefix) {
|
||||
return prefix;
|
||||
}
|
||||
$storagePrefix = prefix;
|
||||
};
|
||||
this.useMissingTranslationHandlerLog = function () {
|
||||
this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog');
|
||||
};
|
||||
this.useMissingTranslationHandler = function (factory) {
|
||||
$missingTranslationHandlerFactory = factory;
|
||||
};
|
||||
this.$get = [
|
||||
'$interpolate',
|
||||
'$log',
|
||||
'$injector',
|
||||
'$rootScope',
|
||||
'$q',
|
||||
function ($interpolate, $log, $injector, $rootScope, $q) {
|
||||
var Storage, pendingLoader = false;
|
||||
if ($storageFactory) {
|
||||
Storage = $injector.get($storageFactory);
|
||||
if (!Storage.get || !Storage.set) {
|
||||
throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or set() method!');
|
||||
}
|
||||
}
|
||||
var $translate = function (translationId, interpolateParams) {
|
||||
var table = $uses ? $translationTable[$uses] : $translationTable;
|
||||
if (table && table.hasOwnProperty(translationId)) {
|
||||
return $interpolate(table[translationId])(interpolateParams);
|
||||
}
|
||||
if ($missingTranslationHandlerFactory && !pendingLoader) {
|
||||
$injector.get($missingTranslationHandlerFactory)(translationId);
|
||||
}
|
||||
if ($uses && $fallbackLanguage && $uses !== $fallbackLanguage) {
|
||||
var translation = $translationTable[$fallbackLanguage][translationId];
|
||||
if (translation) {
|
||||
return $interpolate(translation)(interpolateParams);
|
||||
}
|
||||
}
|
||||
return translationId;
|
||||
};
|
||||
$translate.preferredLanguage = function () {
|
||||
return $preferredLanguage;
|
||||
};
|
||||
$translate.fallbackLanguage = function () {
|
||||
return $fallbackLanguage;
|
||||
};
|
||||
$translate.storage = function () {
|
||||
return Storage;
|
||||
};
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
if (!$translationTable[key]) {
|
||||
pendingLoader = true;
|
||||
$injector.get($loaderFactory)(angular.extend($loaderOptions, { key: key })).then(function (data) {
|
||||
var translationTable = {};
|
||||
if (angular.isArray(data)) {
|
||||
angular.forEach(data, function (table) {
|
||||
angular.extend(translationTable, table);
|
||||
});
|
||||
} else {
|
||||
angular.extend(translationTable, data);
|
||||
}
|
||||
translations(key, translationTable);
|
||||
$uses = key;
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
pendingLoader = false;
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
deferred.resolve($uses);
|
||||
}, function (key) {
|
||||
$rootScope.$broadcast('translationChangeError');
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
}
|
||||
$uses = key;
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
deferred.resolve($uses);
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.storageKey = function () {
|
||||
return storageKey();
|
||||
};
|
||||
if ($loaderFactory && angular.equals($translationTable, {})) {
|
||||
$translate.uses($translate.uses());
|
||||
}
|
||||
return $translate;
|
||||
}
|
||||
];
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').directive('translate', [
|
||||
'$filter',
|
||||
'$interpolate',
|
||||
function ($filter, $interpolate) {
|
||||
var translate = $filter('translate');
|
||||
return {
|
||||
restrict: 'A',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId, '')) {
|
||||
scope.translationId = $interpolate(element.text().replace(/^\s+|\s+$/g, ''))(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
attr.$observe('values', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
scope.$on('translationChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
});
|
||||
scope.$watch('translationId + interpolateParams', function (nValue) {
|
||||
if (nValue) {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').filter('translate', [
|
||||
'$parse',
|
||||
'$translate',
|
||||
function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams) {
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams);
|
||||
};
|
||||
}
|
||||
]);
|
||||
+1
@@ -0,0 +1 @@
|
||||
angular.module("pascalprecht.translate",["ng"]).run(["$translate",function(a){var b=a.storageKey(),c=a.storage();c?c.get(b)?a.uses(c.get(b)):angular.isString(a.preferredLanguage())?a.uses(a.preferredLanguage()):c.set(b,a.uses()):angular.isString(a.preferredLanguage())&&a.uses(a.preferredLanguage())}]),angular.module("pascalprecht.translate").constant("$STORAGE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("pascalprecht.translate").provider("$translate",["$STORAGE_KEY",function(a){var b,c,d,e,f,g,h,i,j={},k=a,l=".",m=function(a,b){if(!a&&!b)return j;if(a&&!b){if(angular.isString(a))return j[a];angular.extend(j,n(a))}else angular.isObject(j[a])||(j[a]={}),angular.extend(j[a],n(b))},n=function(a,b,c){var d,e,f;b||(b=[]),c||(c={});for(d in a)a.hasOwnProperty(d)&&(f=a[d],angular.isObject(f)?n(f,b.concat(d),c):(e=b.length?""+b.join(l)+l+d:d,c[e]=f));return c};this.translations=m,this.preferredLanguage=function(a){return a?(b=a,void 0):b},this.fallbackLanguage=function(a){return a?(c=a,void 0):c},this.uses=function(a){if(!a)return d;if(!j[a]&&!h)throw new Error("$translateProvider couldn't find translationTable for langKey: '"+a+"'");d=a};var o=function(a){return a?(k=a,void 0):f?f+k:k};this.storageKey=o,this.useUrlLoader=function(a){this.useLoader("$translateUrlLoader",{url:a})},this.useStaticFilesLoader=function(a){this.useLoader("$translateStaticFilesLoader",a)},this.useLoader=function(a,b){h=a,i=b||{}},this.useLocalStorage=function(){this.useStorage("$translateLocalStorage")},this.useCookieStorage=function(){this.useStorage("$translateCookieStorage")},this.useStorage=function(a){e=a},this.storagePrefix=function(a){return a?(f=a,void 0):a},this.useMissingTranslationHandlerLog=function(){this.useMissingTranslationHandler("$translateMissingTranslationHandlerLog")},this.useMissingTranslationHandler=function(a){g=a},this.$get=["$interpolate","$log","$injector","$rootScope","$q",function(a,f,k,l,n){var p,q=!1;if(e&&(p=k.get(e),!p.get||!p.set))throw new Error("Couldn't use storage '"+e+"', missing get() or set() method!");var r=function(b,e){var f=d?j[d]:j;if(f&&f.hasOwnProperty(b))return a(f[b])(e);if(g&&!q&&k.get(g)(b),d&&c&&d!==c){var h=j[c][b];if(h)return a(h)(e)}return b};return r.preferredLanguage=function(){return b},r.fallbackLanguage=function(){return c},r.storage=function(){return p},r.uses=function(a){if(!a)return d;var b=n.defer();return j[a]?(d=a,e&&p.set(r.storageKey(),d),b.resolve(d),l.$broadcast("translationChangeSuccess"),b.promise):(q=!0,k.get(h)(angular.extend(i,{key:a})).then(function(c){var f={};angular.isArray(c)?angular.forEach(c,function(a){angular.extend(f,a)}):angular.extend(f,c),m(a,f),d=a,e&&p.set(r.storageKey(),d),q=!1,l.$broadcast("translationChangeSuccess"),b.resolve(d)},function(a){l.$broadcast("translationChangeError"),b.reject(a)}),b.promise)},r.storageKey=function(){return o()},h&&angular.equals(j,{})&&r.uses(r.uses()),r}]}]),angular.module("pascalprecht.translate").directive("translate",["$filter","$interpolate",function(a,b){var c=a("translate");return{restrict:"A",scope:!0,link:function(a,d,e){e.$observe("translate",function(c){a.translationId=angular.equals(c,"")?b(d.text().replace(/^\s+|\s+$/g,""))(a.$parent):c}),e.$observe("values",function(b){a.interpolateParams=b}),a.$on("translationChangeSuccess",function(){d.html(c(a.translationId,a.interpolateParams))}),a.$watch("translationId + interpolateParams",function(b){b&&d.html(c(a.translationId,a.interpolateParams))})}}}]),angular.module("pascalprecht.translate").filter("translate",["$parse","$translate",function(a,b){return function(c,d){return angular.isObject(d)||(d=a(d)()),b(c,d)}}]);
|
||||
+337
@@ -0,0 +1,337 @@
|
||||
angular.module('pascalprecht.translate', ['ng']).run([
|
||||
'$translate',
|
||||
function ($translate) {
|
||||
var key = $translate.storageKey(), storage = $translate.storage();
|
||||
if (storage) {
|
||||
if (!storage.get(key)) {
|
||||
if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
} else {
|
||||
storage.set(key, $translate.uses());
|
||||
}
|
||||
} else {
|
||||
$translate.uses(storage.get(key));
|
||||
}
|
||||
} else {
|
||||
if (angular.isString($translate.fallbackLanguage()) && $translate.fallbackLanguage() !== $translate.preferredLanguage()) {
|
||||
$translate.load($translate.fallbackLanguage());
|
||||
}
|
||||
if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
}
|
||||
}
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
angular.module('pascalprecht.translate').provider('$translate', [
|
||||
'$STORAGE_KEY',
|
||||
function ($STORAGE_KEY) {
|
||||
var $translationTable = {}, $preferredLanguage, $fallbackLanguage, $uses, $nextLang, $storageFactory, $storageKey = $STORAGE_KEY, $storagePrefix, $missingTranslationHandlerFactory, $interpolationFactory, $interpolatorFactories = [], $loaderFactory, $loaderOptions, $notFoundIndicatorLeft, $notFoundIndicatorRight, NESTED_OBJECT_DELIMITER = '.';
|
||||
var translations = function (langKey, translationTable) {
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
angular.extend($translationTable, flatObject(langKey));
|
||||
}
|
||||
} else {
|
||||
if (!angular.isObject($translationTable[langKey])) {
|
||||
$translationTable[langKey] = {};
|
||||
}
|
||||
angular.extend($translationTable[langKey], flatObject(translationTable));
|
||||
}
|
||||
};
|
||||
var flatObject = function (data, path, result) {
|
||||
var key, keyWithPath, val;
|
||||
if (!path) {
|
||||
path = [];
|
||||
}
|
||||
if (!result) {
|
||||
result = {};
|
||||
}
|
||||
for (key in data) {
|
||||
if (!data.hasOwnProperty(key))
|
||||
continue;
|
||||
val = data[key];
|
||||
if (angular.isObject(val)) {
|
||||
flatObject(val, path.concat(key), result);
|
||||
} else {
|
||||
keyWithPath = path.length ? '' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key : key;
|
||||
result[keyWithPath] = val;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
this.translations = translations;
|
||||
this.addInterpolation = function (factory) {
|
||||
$interpolatorFactories.push(factory);
|
||||
};
|
||||
this.useMessageFormatInterpolation = function () {
|
||||
this.useInterpolation('$translateMessageFormatInterpolation');
|
||||
};
|
||||
this.useInterpolation = function (factory) {
|
||||
$interpolationFactory = factory;
|
||||
};
|
||||
this.preferredLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$preferredLanguage = langKey;
|
||||
} else {
|
||||
return $preferredLanguage;
|
||||
}
|
||||
};
|
||||
this.translationNotFoundIndicator = function (indicator) {
|
||||
this.translationNotFoundIndicatorLeft(indicator);
|
||||
this.translationNotFoundIndicatorRight(indicator);
|
||||
};
|
||||
this.translationNotFoundIndicatorLeft = function (indicator) {
|
||||
if (!indicator) {
|
||||
return $notFoundIndicatorLeft;
|
||||
}
|
||||
$notFoundIndicatorLeft = indicator;
|
||||
};
|
||||
this.translationNotFoundIndicatorRight = function (indicator) {
|
||||
if (!indicator) {
|
||||
return $notFoundIndicatorRight;
|
||||
}
|
||||
$notFoundIndicatorRight = indicator;
|
||||
};
|
||||
this.fallbackLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$fallbackLanguage = langKey;
|
||||
} else {
|
||||
return $fallbackLanguage;
|
||||
}
|
||||
};
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey] && !$loaderFactory) {
|
||||
throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
|
||||
}
|
||||
$uses = langKey;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
var storageKey = function (key) {
|
||||
if (!key) {
|
||||
if ($storagePrefix) {
|
||||
return $storagePrefix + $storageKey;
|
||||
}
|
||||
return $storageKey;
|
||||
}
|
||||
$storageKey = key;
|
||||
};
|
||||
this.storageKey = storageKey;
|
||||
this.useUrlLoader = function (url) {
|
||||
this.useLoader('$translateUrlLoader', { url: url });
|
||||
};
|
||||
this.useStaticFilesLoader = function (options) {
|
||||
this.useLoader('$translateStaticFilesLoader', options);
|
||||
};
|
||||
this.useLoader = function (loaderFactory, options) {
|
||||
$loaderFactory = loaderFactory;
|
||||
$loaderOptions = options || {};
|
||||
};
|
||||
this.useLocalStorage = function () {
|
||||
this.useStorage('$translateLocalStorage');
|
||||
};
|
||||
this.useCookieStorage = function () {
|
||||
this.useStorage('$translateCookieStorage');
|
||||
};
|
||||
this.useStorage = function (storageFactory) {
|
||||
$storageFactory = storageFactory;
|
||||
};
|
||||
this.storagePrefix = function (prefix) {
|
||||
if (!prefix) {
|
||||
return prefix;
|
||||
}
|
||||
$storagePrefix = prefix;
|
||||
};
|
||||
this.useMissingTranslationHandlerLog = function () {
|
||||
this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog');
|
||||
};
|
||||
this.useMissingTranslationHandler = function (factory) {
|
||||
$missingTranslationHandlerFactory = factory;
|
||||
};
|
||||
this.$get = [
|
||||
'$log',
|
||||
'$injector',
|
||||
'$rootScope',
|
||||
'$q',
|
||||
function ($log, $injector, $rootScope, $q) {
|
||||
var Storage, defaultInterpolator = $injector.get($interpolationFactory || '$translateDefaultInterpolation');
|
||||
pendingLoader = false, interpolatorHashMap = {};
|
||||
if ($storageFactory) {
|
||||
Storage = $injector.get($storageFactory);
|
||||
if (!Storage.get || !Storage.set) {
|
||||
throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or set() method!');
|
||||
}
|
||||
}
|
||||
if ($interpolatorFactories.length > 0) {
|
||||
angular.forEach($interpolatorFactories, function (interpolatorFactory) {
|
||||
var interpolator = $injector.get(interpolatorFactory);
|
||||
interpolator.setLocale($preferredLanguage || $uses);
|
||||
interpolatorHashMap[interpolator.getInterpolationIdentifier()] = interpolator;
|
||||
});
|
||||
}
|
||||
var $translate = function (translationId, interpolateParams, interpolationId) {
|
||||
var table = $uses ? $translationTable[$uses] : $translationTable, Interpolator = interpolationId ? interpolatorHashMap[interpolationId] : defaultInterpolator;
|
||||
if (table && table.hasOwnProperty(translationId)) {
|
||||
return Interpolator.interpolate(table[translationId], interpolateParams);
|
||||
}
|
||||
if ($missingTranslationHandlerFactory && !pendingLoader) {
|
||||
$injector.get($missingTranslationHandlerFactory)(translationId, $uses);
|
||||
}
|
||||
if ($uses && $fallbackLanguage && $uses !== $fallbackLanguage) {
|
||||
var translation = $translationTable[$fallbackLanguage][translationId];
|
||||
if (translation) {
|
||||
var returnVal;
|
||||
Interpolator.setLocale($fallbackLanguage);
|
||||
returnVal = Interpolator.interpolate(translation, interpolateParams);
|
||||
Interpolator.setLocale($uses);
|
||||
return returnVal;
|
||||
}
|
||||
}
|
||||
if ($notFoundIndicatorLeft) {
|
||||
translationId = [
|
||||
$notFoundIndicatorLeft,
|
||||
translationId
|
||||
].join(' ');
|
||||
}
|
||||
if ($notFoundIndicatorRight) {
|
||||
translationId = [
|
||||
translationId,
|
||||
$notFoundIndicatorRight
|
||||
].join(' ');
|
||||
}
|
||||
return translationId;
|
||||
};
|
||||
$translate.preferredLanguage = function () {
|
||||
return $preferredLanguage;
|
||||
};
|
||||
$translate.fallbackLanguage = function () {
|
||||
return $fallbackLanguage;
|
||||
};
|
||||
$translate.proposedLanguage = function () {
|
||||
return $nextLang;
|
||||
};
|
||||
$translate.storage = function () {
|
||||
return Storage;
|
||||
};
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
var success = function () {
|
||||
$uses = key;
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
defaultInterpolator.setLocale($uses);
|
||||
angular.forEach(interpolatorHashMap, function (interpolator, id) {
|
||||
interpolatorHashMap[id].setLocale($uses);
|
||||
});
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
};
|
||||
var error = function () {
|
||||
$rootScope.$broadcast('translationChangeError');
|
||||
};
|
||||
return $translate.load(key, success, error);
|
||||
};
|
||||
$translate.load = function (key, success, error) {
|
||||
if (!key) {
|
||||
throw 'No language key specified for loading.';
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
if (!$translationTable[key]) {
|
||||
pendingLoader = true;
|
||||
$nextLang = key;
|
||||
$injector.get($loaderFactory)(angular.extend($loaderOptions, { key: key })).then(function (data) {
|
||||
var translationTable = {};
|
||||
if (angular.isArray(data)) {
|
||||
angular.forEach(data, function (table) {
|
||||
angular.extend(translationTable, table);
|
||||
});
|
||||
} else {
|
||||
angular.extend(translationTable, data);
|
||||
}
|
||||
translations(key, translationTable);
|
||||
if (angular.isFunction(success)) {
|
||||
success();
|
||||
}
|
||||
pendingLoader = false;
|
||||
deferred.resolve(key);
|
||||
}, function (key) {
|
||||
if (angular.isFunction(error)) {
|
||||
error();
|
||||
}
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
}
|
||||
if (angular.isFunction(success)) {
|
||||
success();
|
||||
}
|
||||
deferred.resolve(key);
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.storageKey = function () {
|
||||
return storageKey();
|
||||
};
|
||||
if ($loaderFactory && angular.equals($translationTable, {})) {
|
||||
$translate.uses($translate.uses());
|
||||
}
|
||||
return $translate;
|
||||
}
|
||||
];
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').directive('translate', [
|
||||
'$filter',
|
||||
'$interpolate',
|
||||
function ($filter, $interpolate) {
|
||||
var translate = $filter('translate');
|
||||
return {
|
||||
restrict: 'A',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
if (attr.translateInterpolation) {
|
||||
scope.interpolation = attr.translateInterpolation;
|
||||
}
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId, '')) {
|
||||
scope.translationId = $interpolate(element.text().replace(/^\s+|\s+$/g, ''))(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
attr.$observe('translateValues', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
scope.$on('translationChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams, scope.interpolation));
|
||||
});
|
||||
scope.$watch('translationId + interpolateParams', function (nValue) {
|
||||
if (nValue) {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams, scope.interpolation));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').filter('translate', [
|
||||
'$parse',
|
||||
'$translate',
|
||||
function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams, interpolation) {
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams, interpolation);
|
||||
};
|
||||
}
|
||||
]);
|
||||
+1
File diff suppressed because one or more lines are too long
+353
@@ -0,0 +1,353 @@
|
||||
angular.module('pascalprecht.translate', ['ng']).run([
|
||||
'$translate',
|
||||
function ($translate) {
|
||||
var key = $translate.storageKey(), storage = $translate.storage();
|
||||
if (storage) {
|
||||
if (!storage.get(key)) {
|
||||
if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
} else {
|
||||
storage.set(key, $translate.uses());
|
||||
}
|
||||
} else {
|
||||
$translate.uses(storage.get(key));
|
||||
}
|
||||
} else {
|
||||
if (angular.isString($translate.fallbackLanguage()) && $translate.fallbackLanguage() !== $translate.preferredLanguage()) {
|
||||
$translate.load($translate.fallbackLanguage());
|
||||
}
|
||||
if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
}
|
||||
}
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
angular.module('pascalprecht.translate').factory('$translateDefaultInterpolation', [
|
||||
'$interpolate',
|
||||
function ($interpolate) {
|
||||
var $translateInterpolator = {}, $locale, $identifier = 'default';
|
||||
$translateInterpolator.setLocale = function (locale) {
|
||||
$locale = locale;
|
||||
};
|
||||
$translateInterpolator.getInterpolationIdentifier = function () {
|
||||
return $identifier;
|
||||
};
|
||||
$translateInterpolator.interpolate = function (string, interpolateParams) {
|
||||
return $interpolate(string)(interpolateParams);
|
||||
};
|
||||
return $translateInterpolator;
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').provider('$translate', [
|
||||
'$STORAGE_KEY',
|
||||
function ($STORAGE_KEY) {
|
||||
var $translationTable = {}, $preferredLanguage, $fallbackLanguage, $uses, $nextLang, $storageFactory, $storageKey = $STORAGE_KEY, $storagePrefix, $missingTranslationHandlerFactory, $interpolationFactory, $interpolatorFactories = [], $loaderFactory, $loaderOptions, $notFoundIndicatorLeft, $notFoundIndicatorRight, NESTED_OBJECT_DELIMITER = '.';
|
||||
var translations = function (langKey, translationTable) {
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
angular.extend($translationTable, flatObject(langKey));
|
||||
}
|
||||
} else {
|
||||
if (!angular.isObject($translationTable[langKey])) {
|
||||
$translationTable[langKey] = {};
|
||||
}
|
||||
angular.extend($translationTable[langKey], flatObject(translationTable));
|
||||
}
|
||||
};
|
||||
var flatObject = function (data, path, result) {
|
||||
var key, keyWithPath, val;
|
||||
if (!path) {
|
||||
path = [];
|
||||
}
|
||||
if (!result) {
|
||||
result = {};
|
||||
}
|
||||
for (key in data) {
|
||||
if (!data.hasOwnProperty(key))
|
||||
continue;
|
||||
val = data[key];
|
||||
if (angular.isObject(val)) {
|
||||
flatObject(val, path.concat(key), result);
|
||||
} else {
|
||||
keyWithPath = path.length ? '' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key : key;
|
||||
result[keyWithPath] = val;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
this.translations = translations;
|
||||
this.addInterpolation = function (factory) {
|
||||
$interpolatorFactories.push(factory);
|
||||
};
|
||||
this.useMessageFormatInterpolation = function () {
|
||||
this.useInterpolation('$translateMessageFormatInterpolation');
|
||||
};
|
||||
this.useInterpolation = function (factory) {
|
||||
$interpolationFactory = factory;
|
||||
};
|
||||
this.preferredLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$preferredLanguage = langKey;
|
||||
} else {
|
||||
return $preferredLanguage;
|
||||
}
|
||||
};
|
||||
this.translationNotFoundIndicator = function (indicator) {
|
||||
this.translationNotFoundIndicatorLeft(indicator);
|
||||
this.translationNotFoundIndicatorRight(indicator);
|
||||
};
|
||||
this.translationNotFoundIndicatorLeft = function (indicator) {
|
||||
if (!indicator) {
|
||||
return $notFoundIndicatorLeft;
|
||||
}
|
||||
$notFoundIndicatorLeft = indicator;
|
||||
};
|
||||
this.translationNotFoundIndicatorRight = function (indicator) {
|
||||
if (!indicator) {
|
||||
return $notFoundIndicatorRight;
|
||||
}
|
||||
$notFoundIndicatorRight = indicator;
|
||||
};
|
||||
this.fallbackLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$fallbackLanguage = langKey;
|
||||
} else {
|
||||
return $fallbackLanguage;
|
||||
}
|
||||
};
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey] && !$loaderFactory) {
|
||||
throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
|
||||
}
|
||||
$uses = langKey;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
var storageKey = function (key) {
|
||||
if (!key) {
|
||||
if ($storagePrefix) {
|
||||
return $storagePrefix + $storageKey;
|
||||
}
|
||||
return $storageKey;
|
||||
}
|
||||
$storageKey = key;
|
||||
};
|
||||
this.storageKey = storageKey;
|
||||
this.useUrlLoader = function (url) {
|
||||
this.useLoader('$translateUrlLoader', { url: url });
|
||||
};
|
||||
this.useStaticFilesLoader = function (options) {
|
||||
this.useLoader('$translateStaticFilesLoader', options);
|
||||
};
|
||||
this.useLoader = function (loaderFactory, options) {
|
||||
$loaderFactory = loaderFactory;
|
||||
$loaderOptions = options || {};
|
||||
};
|
||||
this.useLocalStorage = function () {
|
||||
this.useStorage('$translateLocalStorage');
|
||||
};
|
||||
this.useCookieStorage = function () {
|
||||
this.useStorage('$translateCookieStorage');
|
||||
};
|
||||
this.useStorage = function (storageFactory) {
|
||||
$storageFactory = storageFactory;
|
||||
};
|
||||
this.storagePrefix = function (prefix) {
|
||||
if (!prefix) {
|
||||
return prefix;
|
||||
}
|
||||
$storagePrefix = prefix;
|
||||
};
|
||||
this.useMissingTranslationHandlerLog = function () {
|
||||
this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog');
|
||||
};
|
||||
this.useMissingTranslationHandler = function (factory) {
|
||||
$missingTranslationHandlerFactory = factory;
|
||||
};
|
||||
this.$get = [
|
||||
'$log',
|
||||
'$injector',
|
||||
'$rootScope',
|
||||
'$q',
|
||||
function ($log, $injector, $rootScope, $q) {
|
||||
var Storage, defaultInterpolator = $injector.get($interpolationFactory || '$translateDefaultInterpolation');
|
||||
pendingLoader = false, interpolatorHashMap = {};
|
||||
if ($storageFactory) {
|
||||
Storage = $injector.get($storageFactory);
|
||||
if (!Storage.get || !Storage.set) {
|
||||
throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or set() method!');
|
||||
}
|
||||
}
|
||||
if ($interpolatorFactories.length > 0) {
|
||||
angular.forEach($interpolatorFactories, function (interpolatorFactory) {
|
||||
var interpolator = $injector.get(interpolatorFactory);
|
||||
interpolator.setLocale($preferredLanguage || $uses);
|
||||
interpolatorHashMap[interpolator.getInterpolationIdentifier()] = interpolator;
|
||||
});
|
||||
}
|
||||
var $translate = function (translationId, interpolateParams, interpolationId) {
|
||||
var table = $uses ? $translationTable[$uses] : $translationTable, Interpolator = interpolationId ? interpolatorHashMap[interpolationId] : defaultInterpolator;
|
||||
if (table && table.hasOwnProperty(translationId)) {
|
||||
return Interpolator.interpolate(table[translationId], interpolateParams);
|
||||
}
|
||||
if ($missingTranslationHandlerFactory && !pendingLoader) {
|
||||
$injector.get($missingTranslationHandlerFactory)(translationId, $uses);
|
||||
}
|
||||
if ($uses && $fallbackLanguage && $uses !== $fallbackLanguage) {
|
||||
var translation = $translationTable[$fallbackLanguage][translationId];
|
||||
if (translation) {
|
||||
var returnVal;
|
||||
Interpolator.setLocale($fallbackLanguage);
|
||||
returnVal = Interpolator.interpolate(translation, interpolateParams);
|
||||
Interpolator.setLocale($uses);
|
||||
return returnVal;
|
||||
}
|
||||
}
|
||||
if ($notFoundIndicatorLeft) {
|
||||
translationId = [
|
||||
$notFoundIndicatorLeft,
|
||||
translationId
|
||||
].join(' ');
|
||||
}
|
||||
if ($notFoundIndicatorRight) {
|
||||
translationId = [
|
||||
translationId,
|
||||
$notFoundIndicatorRight
|
||||
].join(' ');
|
||||
}
|
||||
return translationId;
|
||||
};
|
||||
$translate.preferredLanguage = function () {
|
||||
return $preferredLanguage;
|
||||
};
|
||||
$translate.fallbackLanguage = function () {
|
||||
return $fallbackLanguage;
|
||||
};
|
||||
$translate.proposedLanguage = function () {
|
||||
return $nextLang;
|
||||
};
|
||||
$translate.storage = function () {
|
||||
return Storage;
|
||||
};
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
var success = function () {
|
||||
$uses = key;
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
defaultInterpolator.setLocale($uses);
|
||||
angular.forEach(interpolatorHashMap, function (interpolator, id) {
|
||||
interpolatorHashMap[id].setLocale($uses);
|
||||
});
|
||||
$rootScope.$broadcast('translationChangeSuccess');
|
||||
};
|
||||
var error = function () {
|
||||
$rootScope.$broadcast('translationChangeError');
|
||||
};
|
||||
return $translate.load(key, success, error);
|
||||
};
|
||||
$translate.load = function (key, success, error) {
|
||||
if (!key) {
|
||||
throw 'No language key specified for loading.';
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
if (!$translationTable[key]) {
|
||||
pendingLoader = true;
|
||||
$nextLang = key;
|
||||
$injector.get($loaderFactory)(angular.extend($loaderOptions, { key: key })).then(function (data) {
|
||||
var translationTable = {};
|
||||
if (angular.isArray(data)) {
|
||||
angular.forEach(data, function (table) {
|
||||
angular.extend(translationTable, table);
|
||||
});
|
||||
} else {
|
||||
angular.extend(translationTable, data);
|
||||
}
|
||||
translations(key, translationTable);
|
||||
if (angular.isFunction(success)) {
|
||||
success();
|
||||
}
|
||||
pendingLoader = false;
|
||||
deferred.resolve(key);
|
||||
}, function (key) {
|
||||
if (angular.isFunction(error)) {
|
||||
error();
|
||||
}
|
||||
deferred.reject(key);
|
||||
});
|
||||
return deferred.promise;
|
||||
}
|
||||
if (angular.isFunction(success)) {
|
||||
success();
|
||||
}
|
||||
deferred.resolve(key);
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.storageKey = function () {
|
||||
return storageKey();
|
||||
};
|
||||
if ($loaderFactory && angular.equals($translationTable, {})) {
|
||||
$translate.uses($translate.uses());
|
||||
}
|
||||
return $translate;
|
||||
}
|
||||
];
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').directive('translate', [
|
||||
'$filter',
|
||||
'$interpolate',
|
||||
function ($filter, $interpolate) {
|
||||
var translate = $filter('translate');
|
||||
return {
|
||||
restrict: 'A',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
if (attr.translateInterpolation) {
|
||||
scope.interpolation = attr.translateInterpolation;
|
||||
}
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId, '')) {
|
||||
scope.translationId = $interpolate(element.text().replace(/^\s+|\s+$/g, ''))(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
attr.$observe('translateValues', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
scope.$on('translationChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams, scope.interpolation));
|
||||
});
|
||||
scope.$watch('translationId + interpolateParams', function (nValue) {
|
||||
if (nValue) {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams, scope.interpolation));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').filter('translate', [
|
||||
'$parse',
|
||||
'$translate',
|
||||
function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams, interpolation) {
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams, interpolation);
|
||||
};
|
||||
}
|
||||
]);
|
||||
+1
File diff suppressed because one or more lines are too long
+359
@@ -0,0 +1,359 @@
|
||||
/**
|
||||
* angular-translate - v1.0.2 - 2013-08-07
|
||||
* http://github.com/PascalPrecht/angular-translate
|
||||
* Copyright (c) 2013 ; Licensed
|
||||
*/
|
||||
angular.module('pascalprecht.translate', ['ng']).run([
|
||||
'$translate',
|
||||
function ($translate) {
|
||||
var key = $translate.storageKey(), storage = $translate.storage();
|
||||
if (storage) {
|
||||
if (!storage.get(key)) {
|
||||
if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
} else {
|
||||
storage.set(key, $translate.uses());
|
||||
}
|
||||
} else {
|
||||
$translate.uses(storage.get(key));
|
||||
}
|
||||
} else if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
}
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
angular.module('pascalprecht.translate').factory('$translateDefaultInterpolation', [
|
||||
'$interpolate',
|
||||
function ($interpolate) {
|
||||
var $translateInterpolator = {}, $locale, $identifier = 'default';
|
||||
$translateInterpolator.setLocale = function (locale) {
|
||||
$locale = locale;
|
||||
};
|
||||
$translateInterpolator.getInterpolationIdentifier = function () {
|
||||
return $identifier;
|
||||
};
|
||||
$translateInterpolator.interpolate = function (string, interpolateParams) {
|
||||
return $interpolate(string)(interpolateParams);
|
||||
};
|
||||
return $translateInterpolator;
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').provider('$translate', [
|
||||
'$STORAGE_KEY',
|
||||
function ($STORAGE_KEY) {
|
||||
var $translationTable = {}, $preferredLanguage, $fallbackLanguage, $uses, $nextLang, $storageFactory, $storageKey = $STORAGE_KEY, $storagePrefix, $missingTranslationHandlerFactory, $interpolationFactory, $interpolatorFactories = [], $loaderFactory, $loaderOptions, $notFoundIndicatorLeft, $notFoundIndicatorRight, NESTED_OBJECT_DELIMITER = '.';
|
||||
var translations = function (langKey, translationTable) {
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
angular.extend($translationTable, flatObject(langKey));
|
||||
}
|
||||
} else {
|
||||
if (!angular.isObject($translationTable[langKey])) {
|
||||
$translationTable[langKey] = {};
|
||||
}
|
||||
angular.extend($translationTable[langKey], flatObject(translationTable));
|
||||
}
|
||||
};
|
||||
var flatObject = function (data, path, result) {
|
||||
var key, keyWithPath, val;
|
||||
if (!path) {
|
||||
path = [];
|
||||
}
|
||||
if (!result) {
|
||||
result = {};
|
||||
}
|
||||
for (key in data) {
|
||||
if (!data.hasOwnProperty(key))
|
||||
continue;
|
||||
val = data[key];
|
||||
if (angular.isObject(val)) {
|
||||
flatObject(val, path.concat(key), result);
|
||||
} else {
|
||||
keyWithPath = path.length ? '' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key : key;
|
||||
result[keyWithPath] = val;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
this.translations = translations;
|
||||
this.addInterpolation = function (factory) {
|
||||
$interpolatorFactories.push(factory);
|
||||
};
|
||||
this.useMessageFormatInterpolation = function () {
|
||||
this.useInterpolation('$translateMessageFormatInterpolation');
|
||||
};
|
||||
this.useInterpolation = function (factory) {
|
||||
$interpolationFactory = factory;
|
||||
};
|
||||
this.preferredLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$preferredLanguage = langKey;
|
||||
} else {
|
||||
return $preferredLanguage;
|
||||
}
|
||||
};
|
||||
this.translationNotFoundIndicator = function (indicator) {
|
||||
this.translationNotFoundIndicatorLeft(indicator);
|
||||
this.translationNotFoundIndicatorRight(indicator);
|
||||
};
|
||||
this.translationNotFoundIndicatorLeft = function (indicator) {
|
||||
if (!indicator) {
|
||||
return $notFoundIndicatorLeft;
|
||||
}
|
||||
$notFoundIndicatorLeft = indicator;
|
||||
};
|
||||
this.translationNotFoundIndicatorRight = function (indicator) {
|
||||
if (!indicator) {
|
||||
return $notFoundIndicatorRight;
|
||||
}
|
||||
$notFoundIndicatorRight = indicator;
|
||||
};
|
||||
this.fallbackLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$fallbackLanguage = langKey;
|
||||
} else {
|
||||
return $fallbackLanguage;
|
||||
}
|
||||
};
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey] && !$loaderFactory) {
|
||||
throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
|
||||
}
|
||||
$uses = langKey;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
var storageKey = function (key) {
|
||||
if (!key) {
|
||||
if ($storagePrefix) {
|
||||
return $storagePrefix + $storageKey;
|
||||
}
|
||||
return $storageKey;
|
||||
}
|
||||
$storageKey = key;
|
||||
};
|
||||
this.storageKey = storageKey;
|
||||
this.useUrlLoader = function (url) {
|
||||
this.useLoader('$translateUrlLoader', { url: url });
|
||||
};
|
||||
this.useStaticFilesLoader = function (options) {
|
||||
this.useLoader('$translateStaticFilesLoader', options);
|
||||
};
|
||||
this.useLoader = function (loaderFactory, options) {
|
||||
$loaderFactory = loaderFactory;
|
||||
$loaderOptions = options || {};
|
||||
};
|
||||
this.useLocalStorage = function () {
|
||||
this.useStorage('$translateLocalStorage');
|
||||
};
|
||||
this.useCookieStorage = function () {
|
||||
this.useStorage('$translateCookieStorage');
|
||||
};
|
||||
this.useStorage = function (storageFactory) {
|
||||
$storageFactory = storageFactory;
|
||||
};
|
||||
this.storagePrefix = function (prefix) {
|
||||
if (!prefix) {
|
||||
return prefix;
|
||||
}
|
||||
$storagePrefix = prefix;
|
||||
};
|
||||
this.useMissingTranslationHandlerLog = function () {
|
||||
this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog');
|
||||
};
|
||||
this.useMissingTranslationHandler = function (factory) {
|
||||
$missingTranslationHandlerFactory = factory;
|
||||
};
|
||||
this.$get = [
|
||||
'$log',
|
||||
'$injector',
|
||||
'$rootScope',
|
||||
'$q',
|
||||
function ($log, $injector, $rootScope, $q) {
|
||||
var Storage, defaultInterpolator = $injector.get($interpolationFactory || '$translateDefaultInterpolation'), pendingLoader = false, interpolatorHashMap = {};
|
||||
var loadAsync = function (key) {
|
||||
if (!key) {
|
||||
throw 'No language key specified for loading.';
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
$rootScope.$broadcast('$translateLoadingStart');
|
||||
pendingLoader = true;
|
||||
$nextLang = key;
|
||||
$injector.get($loaderFactory)(angular.extend($loaderOptions, { key: key })).then(function (data) {
|
||||
$rootScope.$broadcast('$translateLoadingSuccess');
|
||||
var translationTable = {};
|
||||
if (angular.isArray(data)) {
|
||||
angular.forEach(data, function (table) {
|
||||
angular.extend(translationTable, table);
|
||||
});
|
||||
} else {
|
||||
angular.extend(translationTable, data);
|
||||
}
|
||||
translations(key, translationTable);
|
||||
pendingLoader = false;
|
||||
deferred.resolve(key);
|
||||
$rootScope.$broadcast('$translateLoadingEnd');
|
||||
}, function (key) {
|
||||
$rootScope.$broadcast('$translateLoadingError');
|
||||
deferred.reject(key);
|
||||
$rootScope.$broadcast('$translateLoadingEnd');
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
if ($storageFactory) {
|
||||
Storage = $injector.get($storageFactory);
|
||||
if (!Storage.get || !Storage.set) {
|
||||
throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or set() method!');
|
||||
}
|
||||
}
|
||||
if ($interpolatorFactories.length > 0) {
|
||||
angular.forEach($interpolatorFactories, function (interpolatorFactory) {
|
||||
var interpolator = $injector.get(interpolatorFactory);
|
||||
interpolator.setLocale($preferredLanguage || $uses);
|
||||
interpolatorHashMap[interpolator.getInterpolationIdentifier()] = interpolator;
|
||||
});
|
||||
}
|
||||
var $translate = function (translationId, interpolateParams, interpolationId) {
|
||||
var table = $uses ? $translationTable[$uses] : $translationTable, Interpolator = interpolationId ? interpolatorHashMap[interpolationId] : defaultInterpolator;
|
||||
if (table && table.hasOwnProperty(translationId)) {
|
||||
return Interpolator.interpolate(table[translationId], interpolateParams);
|
||||
}
|
||||
if ($missingTranslationHandlerFactory && !pendingLoader) {
|
||||
$injector.get($missingTranslationHandlerFactory)(translationId, $uses);
|
||||
}
|
||||
if ($uses && $fallbackLanguage && $uses !== $fallbackLanguage) {
|
||||
var translation = $translationTable[$fallbackLanguage][translationId];
|
||||
if (translation) {
|
||||
var returnVal;
|
||||
Interpolator.setLocale($fallbackLanguage);
|
||||
returnVal = Interpolator.interpolate(translation, interpolateParams);
|
||||
Interpolator.setLocale($uses);
|
||||
return returnVal;
|
||||
}
|
||||
}
|
||||
if ($notFoundIndicatorLeft) {
|
||||
translationId = [
|
||||
$notFoundIndicatorLeft,
|
||||
translationId
|
||||
].join(' ');
|
||||
}
|
||||
if ($notFoundIndicatorRight) {
|
||||
translationId = [
|
||||
translationId,
|
||||
$notFoundIndicatorRight
|
||||
].join(' ');
|
||||
}
|
||||
return translationId;
|
||||
};
|
||||
$translate.preferredLanguage = function () {
|
||||
return $preferredLanguage;
|
||||
};
|
||||
$translate.fallbackLanguage = function () {
|
||||
return $fallbackLanguage;
|
||||
};
|
||||
$translate.proposedLanguage = function () {
|
||||
return $nextLang;
|
||||
};
|
||||
$translate.storage = function () {
|
||||
return Storage;
|
||||
};
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
$rootScope.$broadcast('$translateChangeStart');
|
||||
function useLanguage(key) {
|
||||
$uses = key;
|
||||
$rootScope.$broadcast('$translateChangeSuccess');
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
defaultInterpolator.setLocale($uses);
|
||||
angular.forEach(interpolatorHashMap, function (interpolator, id) {
|
||||
interpolatorHashMap[id].setLocale($uses);
|
||||
});
|
||||
deferred.resolve(key);
|
||||
$rootScope.$broadcast('$translateChangeEnd');
|
||||
}
|
||||
if (!$translationTable[key] && $loaderFactory) {
|
||||
loadAsync(key).then(useLanguage, function (key) {
|
||||
$rootScope.$broadcast('$translateChangeError');
|
||||
deferred.reject(key);
|
||||
$rootScope.$broadcast('$translateChangeEnd');
|
||||
});
|
||||
} else {
|
||||
useLanguage(key);
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.storageKey = function () {
|
||||
return storageKey();
|
||||
};
|
||||
if ($loaderFactory) {
|
||||
if (angular.equals($translationTable, {})) {
|
||||
$translate.uses($translate.uses());
|
||||
}
|
||||
if ($fallbackLanguage && !$translationTable[$fallbackLanguage]) {
|
||||
loadAsync($fallbackLanguage);
|
||||
}
|
||||
}
|
||||
return $translate;
|
||||
}
|
||||
];
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').directive('translate', [
|
||||
'$filter',
|
||||
'$interpolate',
|
||||
function ($filter, $interpolate) {
|
||||
var translate = $filter('translate');
|
||||
return {
|
||||
restrict: 'AE',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
if (attr.translateInterpolation) {
|
||||
scope.interpolation = attr.translateInterpolation;
|
||||
}
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId, '') || translationId === undefined) {
|
||||
scope.translationId = $interpolate(element.text().replace(/^\s+|\s+$/g, ''))(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
attr.$observe('translateValues', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
scope.$on('$translateChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams, scope.interpolation));
|
||||
});
|
||||
scope.$watch('translationId + interpolateParams', function (nValue) {
|
||||
if (nValue) {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams, scope.interpolation));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').filter('translate', [
|
||||
'$parse',
|
||||
'$translate',
|
||||
function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams, interpolation) {
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams, interpolation);
|
||||
};
|
||||
}
|
||||
]);
|
||||
+1
File diff suppressed because one or more lines are too long
+419
@@ -0,0 +1,419 @@
|
||||
/**
|
||||
* angular-translate - v1.1.0 - 2013-09-02
|
||||
* http://github.com/PascalPrecht/angular-translate
|
||||
* Copyright (c) 2013 ; Licensed
|
||||
*/
|
||||
angular.module('pascalprecht.translate', ['ng']).run([
|
||||
'$translate',
|
||||
function ($translate) {
|
||||
var key = $translate.storageKey(), storage = $translate.storage();
|
||||
if (storage) {
|
||||
if (!storage.get(key)) {
|
||||
if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
} else {
|
||||
storage.set(key, $translate.uses());
|
||||
}
|
||||
} else {
|
||||
$translate.uses(storage.get(key));
|
||||
}
|
||||
} else if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
}
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').provider('$translate', [
|
||||
'$STORAGE_KEY',
|
||||
function ($STORAGE_KEY) {
|
||||
var $translationTable = {}, $preferredLanguage, $fallbackLanguage, $uses, $nextLang, $storageFactory, $storageKey = $STORAGE_KEY, $storagePrefix, $missingTranslationHandlerFactory, $interpolationFactory, $interpolatorFactories = [], $loaderFactory, $loaderOptions, $notFoundIndicatorLeft, $notFoundIndicatorRight, NESTED_OBJECT_DELIMITER = '.';
|
||||
var translations = function (langKey, translationTable) {
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
angular.extend($translationTable, flatObject(langKey));
|
||||
}
|
||||
} else {
|
||||
if (!angular.isObject($translationTable[langKey])) {
|
||||
$translationTable[langKey] = {};
|
||||
}
|
||||
angular.extend($translationTable[langKey], flatObject(translationTable));
|
||||
}
|
||||
return this;
|
||||
};
|
||||
var flatObject = function (data, path, result) {
|
||||
var key, keyWithPath, val;
|
||||
if (!path) {
|
||||
path = [];
|
||||
}
|
||||
if (!result) {
|
||||
result = {};
|
||||
}
|
||||
for (key in data) {
|
||||
if (!data.hasOwnProperty(key))
|
||||
continue;
|
||||
val = data[key];
|
||||
if (angular.isObject(val)) {
|
||||
flatObject(val, path.concat(key), result);
|
||||
} else {
|
||||
keyWithPath = path.length ? '' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key : key;
|
||||
result[keyWithPath] = val;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
this.translations = translations;
|
||||
this.addInterpolation = function (factory) {
|
||||
$interpolatorFactories.push(factory);
|
||||
return this;
|
||||
};
|
||||
this.useMessageFormatInterpolation = function () {
|
||||
return this.useInterpolation('$translateMessageFormatInterpolation');
|
||||
};
|
||||
this.useInterpolation = function (factory) {
|
||||
$interpolationFactory = factory;
|
||||
return this;
|
||||
};
|
||||
this.preferredLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$preferredLanguage = langKey;
|
||||
return this;
|
||||
} else {
|
||||
return $preferredLanguage;
|
||||
}
|
||||
};
|
||||
this.translationNotFoundIndicator = function (indicator) {
|
||||
this.translationNotFoundIndicatorLeft(indicator);
|
||||
this.translationNotFoundIndicatorRight(indicator);
|
||||
return this;
|
||||
};
|
||||
this.translationNotFoundIndicatorLeft = function (indicator) {
|
||||
if (!indicator) {
|
||||
return $notFoundIndicatorLeft;
|
||||
}
|
||||
$notFoundIndicatorLeft = indicator;
|
||||
return this;
|
||||
};
|
||||
this.translationNotFoundIndicatorRight = function (indicator) {
|
||||
if (!indicator) {
|
||||
return $notFoundIndicatorRight;
|
||||
}
|
||||
$notFoundIndicatorRight = indicator;
|
||||
return this;
|
||||
};
|
||||
this.fallbackLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$fallbackLanguage = langKey;
|
||||
return this;
|
||||
} else {
|
||||
return $fallbackLanguage;
|
||||
}
|
||||
};
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey] && !$loaderFactory) {
|
||||
throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
|
||||
}
|
||||
$uses = langKey;
|
||||
return this;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
var storageKey = function (key) {
|
||||
if (!key) {
|
||||
if ($storagePrefix) {
|
||||
return $storagePrefix + $storageKey;
|
||||
}
|
||||
return $storageKey;
|
||||
}
|
||||
$storageKey = key;
|
||||
};
|
||||
this.storageKey = storageKey;
|
||||
this.useUrlLoader = function (url) {
|
||||
return this.useLoader('$translateUrlLoader', { url: url });
|
||||
};
|
||||
this.useStaticFilesLoader = function (options) {
|
||||
return this.useLoader('$translateStaticFilesLoader', options);
|
||||
};
|
||||
this.useLoader = function (loaderFactory, options) {
|
||||
$loaderFactory = loaderFactory;
|
||||
$loaderOptions = options || {};
|
||||
return this;
|
||||
};
|
||||
this.useLocalStorage = function () {
|
||||
return this.useStorage('$translateLocalStorage');
|
||||
};
|
||||
this.useCookieStorage = function () {
|
||||
return this.useStorage('$translateCookieStorage');
|
||||
};
|
||||
this.useStorage = function (storageFactory) {
|
||||
$storageFactory = storageFactory;
|
||||
return this;
|
||||
};
|
||||
this.storagePrefix = function (prefix) {
|
||||
if (!prefix) {
|
||||
return prefix;
|
||||
}
|
||||
$storagePrefix = prefix;
|
||||
return this;
|
||||
};
|
||||
this.useMissingTranslationHandlerLog = function () {
|
||||
return this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog');
|
||||
};
|
||||
this.useMissingTranslationHandler = function (factory) {
|
||||
$missingTranslationHandlerFactory = factory;
|
||||
return this;
|
||||
};
|
||||
this.$get = [
|
||||
'$log',
|
||||
'$injector',
|
||||
'$rootScope',
|
||||
'$q',
|
||||
function ($log, $injector, $rootScope, $q) {
|
||||
var Storage, defaultInterpolator = $injector.get($interpolationFactory || '$translateDefaultInterpolation'), pendingLoader = false, interpolatorHashMap = {};
|
||||
var loadAsync = function (key) {
|
||||
if (!key) {
|
||||
throw 'No language key specified for loading.';
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
$rootScope.$broadcast('$translateLoadingStart');
|
||||
pendingLoader = true;
|
||||
$nextLang = key;
|
||||
$injector.get($loaderFactory)(angular.extend($loaderOptions, { key: key })).then(function (data) {
|
||||
$rootScope.$broadcast('$translateLoadingSuccess');
|
||||
var translationTable = {};
|
||||
if (angular.isArray(data)) {
|
||||
angular.forEach(data, function (table) {
|
||||
angular.extend(translationTable, table);
|
||||
});
|
||||
} else {
|
||||
angular.extend(translationTable, data);
|
||||
}
|
||||
translations(key, translationTable);
|
||||
pendingLoader = false;
|
||||
$nextLang = undefined;
|
||||
deferred.resolve(key);
|
||||
$rootScope.$broadcast('$translateLoadingEnd');
|
||||
}, function (key) {
|
||||
$rootScope.$broadcast('$translateLoadingError');
|
||||
deferred.reject(key);
|
||||
$nextLang = undefined;
|
||||
$rootScope.$broadcast('$translateLoadingEnd');
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
if ($storageFactory) {
|
||||
Storage = $injector.get($storageFactory);
|
||||
if (!Storage.get || !Storage.set) {
|
||||
throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or set() method!');
|
||||
}
|
||||
}
|
||||
if ($interpolatorFactories.length > 0) {
|
||||
angular.forEach($interpolatorFactories, function (interpolatorFactory) {
|
||||
var interpolator = $injector.get(interpolatorFactory);
|
||||
interpolator.setLocale($preferredLanguage || $uses);
|
||||
interpolatorHashMap[interpolator.getInterpolationIdentifier()] = interpolator;
|
||||
});
|
||||
}
|
||||
var $translate = function (translationId, interpolateParams, interpolationId) {
|
||||
var table = $uses ? $translationTable[$uses] : $translationTable, Interpolator = interpolationId ? interpolatorHashMap[interpolationId] : defaultInterpolator;
|
||||
if (table && table.hasOwnProperty(translationId)) {
|
||||
return Interpolator.interpolate(table[translationId], interpolateParams);
|
||||
}
|
||||
if ($missingTranslationHandlerFactory && !pendingLoader) {
|
||||
$injector.get($missingTranslationHandlerFactory)(translationId, $uses);
|
||||
}
|
||||
if ($uses && $fallbackLanguage && $uses !== $fallbackLanguage) {
|
||||
var translation = $translationTable[$fallbackLanguage][translationId];
|
||||
if (translation) {
|
||||
var returnVal;
|
||||
Interpolator.setLocale($fallbackLanguage);
|
||||
returnVal = Interpolator.interpolate(translation, interpolateParams);
|
||||
Interpolator.setLocale($uses);
|
||||
return returnVal;
|
||||
}
|
||||
}
|
||||
if ($notFoundIndicatorLeft) {
|
||||
translationId = [
|
||||
$notFoundIndicatorLeft,
|
||||
translationId
|
||||
].join(' ');
|
||||
}
|
||||
if ($notFoundIndicatorRight) {
|
||||
translationId = [
|
||||
translationId,
|
||||
$notFoundIndicatorRight
|
||||
].join(' ');
|
||||
}
|
||||
return translationId;
|
||||
};
|
||||
$translate.preferredLanguage = function () {
|
||||
return $preferredLanguage;
|
||||
};
|
||||
$translate.fallbackLanguage = function () {
|
||||
return $fallbackLanguage;
|
||||
};
|
||||
$translate.proposedLanguage = function () {
|
||||
return $nextLang;
|
||||
};
|
||||
$translate.storage = function () {
|
||||
return Storage;
|
||||
};
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
$rootScope.$broadcast('$translateChangeStart');
|
||||
function useLanguage(key) {
|
||||
$uses = key;
|
||||
$rootScope.$broadcast('$translateChangeSuccess');
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
defaultInterpolator.setLocale($uses);
|
||||
angular.forEach(interpolatorHashMap, function (interpolator, id) {
|
||||
interpolatorHashMap[id].setLocale($uses);
|
||||
});
|
||||
deferred.resolve(key);
|
||||
$rootScope.$broadcast('$translateChangeEnd');
|
||||
}
|
||||
if (!$translationTable[key] && $loaderFactory) {
|
||||
loadAsync(key).then(useLanguage, function (key) {
|
||||
$rootScope.$broadcast('$translateChangeError');
|
||||
deferred.reject(key);
|
||||
$rootScope.$broadcast('$translateChangeEnd');
|
||||
});
|
||||
} else {
|
||||
useLanguage(key);
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.storageKey = function () {
|
||||
return storageKey();
|
||||
};
|
||||
$translate.refresh = function (langKey) {
|
||||
var deferred = $q.defer();
|
||||
function onLoadSuccess() {
|
||||
deferred.resolve();
|
||||
$rootScope.$broadcast('$translateRefreshEnd');
|
||||
}
|
||||
function onLoadFailure() {
|
||||
deferred.reject();
|
||||
$rootScope.$broadcast('$translateRefreshEnd');
|
||||
}
|
||||
if (!$loaderFactory) {
|
||||
throw new Error('Couldn\'t refresh translation table, no loader registered!');
|
||||
}
|
||||
if (!langKey) {
|
||||
$rootScope.$broadcast('$translateRefreshStart');
|
||||
for (var lang in $translationTable) {
|
||||
if ($translationTable.hasOwnProperty(lang)) {
|
||||
delete $translationTable[lang];
|
||||
}
|
||||
}
|
||||
var loaders = [];
|
||||
if ($fallbackLanguage) {
|
||||
loaders.push(loadAsync($fallbackLanguage));
|
||||
}
|
||||
if ($uses) {
|
||||
loaders.push($translate.uses($uses));
|
||||
}
|
||||
if (loaders.length > 0) {
|
||||
$q.all(loaders).then(onLoadSuccess, onLoadFailure);
|
||||
} else
|
||||
onLoadSuccess();
|
||||
} else if ($translationTable.hasOwnProperty(langKey)) {
|
||||
$rootScope.$broadcast('$translateRefreshStart');
|
||||
delete $translationTable[langKey];
|
||||
var loader = null;
|
||||
if (langKey === $uses) {
|
||||
loader = $translate.uses($uses);
|
||||
} else {
|
||||
loader = loadAsync(langKey);
|
||||
}
|
||||
loader.then(onLoadSuccess, onLoadFailure);
|
||||
} else
|
||||
deferred.reject();
|
||||
return deferred.promise;
|
||||
};
|
||||
if ($loaderFactory) {
|
||||
if (angular.equals($translationTable, {})) {
|
||||
$translate.uses($translate.uses());
|
||||
}
|
||||
if ($fallbackLanguage && !$translationTable[$fallbackLanguage]) {
|
||||
loadAsync($fallbackLanguage);
|
||||
}
|
||||
}
|
||||
return $translate;
|
||||
}
|
||||
];
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').factory('$translateDefaultInterpolation', [
|
||||
'$interpolate',
|
||||
function ($interpolate) {
|
||||
var $translateInterpolator = {}, $locale, $identifier = 'default';
|
||||
$translateInterpolator.setLocale = function (locale) {
|
||||
$locale = locale;
|
||||
};
|
||||
$translateInterpolator.getInterpolationIdentifier = function () {
|
||||
return $identifier;
|
||||
};
|
||||
$translateInterpolator.interpolate = function (string, interpolateParams) {
|
||||
return $interpolate(string)(interpolateParams);
|
||||
};
|
||||
return $translateInterpolator;
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
angular.module('pascalprecht.translate').directive('translate', [
|
||||
'$filter',
|
||||
'$interpolate',
|
||||
function ($filter, $interpolate) {
|
||||
var translate = $filter('translate');
|
||||
return {
|
||||
restrict: 'AE',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
if (attr.translateInterpolation) {
|
||||
scope.interpolation = attr.translateInterpolation;
|
||||
}
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId, '') || translationId === undefined) {
|
||||
scope.translationId = $interpolate(element.text().replace(/^\s+|\s+$/g, ''))(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
attr.$observe('translateValues', function (interpolateParams) {
|
||||
scope.interpolateParams = interpolateParams;
|
||||
});
|
||||
scope.$on('$translateChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams, scope.interpolation));
|
||||
});
|
||||
scope.$watch('translationId + interpolateParams', function (nValue) {
|
||||
if (nValue) {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams, scope.interpolation));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').filter('translate', [
|
||||
'$parse',
|
||||
'$translate',
|
||||
function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams, interpolation) {
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams, interpolation);
|
||||
};
|
||||
}
|
||||
]);
|
||||
+1
File diff suppressed because one or more lines are too long
+505
@@ -0,0 +1,505 @@
|
||||
/**
|
||||
* angular-translate - v1.1.1 - 2013-11-24
|
||||
* http://github.com/PascalPrecht/angular-translate
|
||||
* Copyright (c) 2013 ; Licensed
|
||||
*/
|
||||
angular.module('pascalprecht.translate', ['ng']).run([
|
||||
'$translate',
|
||||
function ($translate) {
|
||||
var key = $translate.storageKey(), storage = $translate.storage();
|
||||
if (storage) {
|
||||
if (!storage.get(key)) {
|
||||
if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
} else {
|
||||
storage.set(key, $translate.uses());
|
||||
}
|
||||
} else {
|
||||
$translate.uses(storage.get(key));
|
||||
}
|
||||
} else if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.uses($translate.preferredLanguage());
|
||||
}
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').provider('$translate', [
|
||||
'$STORAGE_KEY',
|
||||
function ($STORAGE_KEY) {
|
||||
var $translationTable = {}, $preferredLanguage, $fallbackLanguage, $uses, $nextLang, $storageFactory, $storageKey = $STORAGE_KEY, $storagePrefix, $missingTranslationHandlerFactory, $interpolationFactory, $interpolatorFactories = [], $loaderFactory, $loaderOptions, $notFoundIndicatorLeft, $notFoundIndicatorRight, NESTED_OBJECT_DELIMITER = '.';
|
||||
var translations = function (langKey, translationTable) {
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
} else {
|
||||
angular.extend($translationTable, flatObject(langKey));
|
||||
}
|
||||
} else {
|
||||
if (!angular.isObject($translationTable[langKey])) {
|
||||
$translationTable[langKey] = {};
|
||||
}
|
||||
angular.extend($translationTable[langKey], flatObject(translationTable));
|
||||
}
|
||||
return this;
|
||||
};
|
||||
var flatObject = function (data, path, result, prevKey) {
|
||||
var key, keyWithPath, val;
|
||||
if (!path) {
|
||||
path = [];
|
||||
}
|
||||
if (!result) {
|
||||
result = {};
|
||||
}
|
||||
for (key in data) {
|
||||
if (!data.hasOwnProperty(key))
|
||||
continue;
|
||||
val = data[key];
|
||||
if (angular.isObject(val)) {
|
||||
flatObject(val, path.concat(key), result, key);
|
||||
} else {
|
||||
keyWithPath = path.length ? '' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key : key;
|
||||
if (path.length && key === prevKey) {
|
||||
keyWithShortPath = '' + path.join(NESTED_OBJECT_DELIMITER);
|
||||
result[keyWithShortPath] = '@:' + keyWithPath;
|
||||
}
|
||||
result[keyWithPath] = val;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
this.translations = translations;
|
||||
this.addInterpolation = function (factory) {
|
||||
$interpolatorFactories.push(factory);
|
||||
return this;
|
||||
};
|
||||
this.useMessageFormatInterpolation = function () {
|
||||
return this.useInterpolation('$translateMessageFormatInterpolation');
|
||||
};
|
||||
this.useInterpolation = function (factory) {
|
||||
$interpolationFactory = factory;
|
||||
return this;
|
||||
};
|
||||
this.preferredLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$preferredLanguage = langKey;
|
||||
return this;
|
||||
} else {
|
||||
return $preferredLanguage;
|
||||
}
|
||||
};
|
||||
this.translationNotFoundIndicator = function (indicator) {
|
||||
this.translationNotFoundIndicatorLeft(indicator);
|
||||
this.translationNotFoundIndicatorRight(indicator);
|
||||
return this;
|
||||
};
|
||||
this.translationNotFoundIndicatorLeft = function (indicator) {
|
||||
if (!indicator) {
|
||||
return $notFoundIndicatorLeft;
|
||||
}
|
||||
$notFoundIndicatorLeft = indicator;
|
||||
return this;
|
||||
};
|
||||
this.translationNotFoundIndicatorRight = function (indicator) {
|
||||
if (!indicator) {
|
||||
return $notFoundIndicatorRight;
|
||||
}
|
||||
$notFoundIndicatorRight = indicator;
|
||||
return this;
|
||||
};
|
||||
this.fallbackLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
if (typeof langKey === 'string' || angular.isArray(langKey)) {
|
||||
$fallbackLanguage = langKey;
|
||||
} else {
|
||||
}
|
||||
return this;
|
||||
} else {
|
||||
return $fallbackLanguage;
|
||||
}
|
||||
};
|
||||
this.uses = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey] && !$loaderFactory) {
|
||||
throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
|
||||
}
|
||||
$uses = langKey;
|
||||
return this;
|
||||
} else {
|
||||
return $uses;
|
||||
}
|
||||
};
|
||||
var storageKey = function (key) {
|
||||
if (!key) {
|
||||
if ($storagePrefix) {
|
||||
return $storagePrefix + $storageKey;
|
||||
}
|
||||
return $storageKey;
|
||||
}
|
||||
$storageKey = key;
|
||||
};
|
||||
this.storageKey = storageKey;
|
||||
this.useUrlLoader = function (url) {
|
||||
return this.useLoader('$translateUrlLoader', { url: url });
|
||||
};
|
||||
this.useStaticFilesLoader = function (options) {
|
||||
return this.useLoader('$translateStaticFilesLoader', options);
|
||||
};
|
||||
this.useLoader = function (loaderFactory, options) {
|
||||
$loaderFactory = loaderFactory;
|
||||
$loaderOptions = options || {};
|
||||
return this;
|
||||
};
|
||||
this.useLocalStorage = function () {
|
||||
return this.useStorage('$translateLocalStorage');
|
||||
};
|
||||
this.useCookieStorage = function () {
|
||||
return this.useStorage('$translateCookieStorage');
|
||||
};
|
||||
this.useStorage = function (storageFactory) {
|
||||
$storageFactory = storageFactory;
|
||||
return this;
|
||||
};
|
||||
this.storagePrefix = function (prefix) {
|
||||
if (!prefix) {
|
||||
return prefix;
|
||||
}
|
||||
$storagePrefix = prefix;
|
||||
return this;
|
||||
};
|
||||
this.useMissingTranslationHandlerLog = function () {
|
||||
return this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog');
|
||||
};
|
||||
this.useMissingTranslationHandler = function (factory) {
|
||||
$missingTranslationHandlerFactory = factory;
|
||||
return this;
|
||||
};
|
||||
this.$get = [
|
||||
'$log',
|
||||
'$injector',
|
||||
'$rootScope',
|
||||
'$q',
|
||||
function ($log, $injector, $rootScope, $q) {
|
||||
var Storage, defaultInterpolator = $injector.get($interpolationFactory || '$translateDefaultInterpolation'), pendingLoader = false, interpolatorHashMap = {};
|
||||
var loadAsync = function (key) {
|
||||
if (!key) {
|
||||
throw 'No language key specified for loading.';
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
$rootScope.$broadcast('$translateLoadingStart');
|
||||
pendingLoader = true;
|
||||
$injector.get($loaderFactory)(angular.extend($loaderOptions, { key: key })).then(function (data) {
|
||||
$rootScope.$broadcast('$translateLoadingSuccess');
|
||||
var translationTable = {};
|
||||
if (angular.isArray(data)) {
|
||||
angular.forEach(data, function (table) {
|
||||
angular.extend(translationTable, table);
|
||||
});
|
||||
} else {
|
||||
angular.extend(translationTable, data);
|
||||
}
|
||||
pendingLoader = false;
|
||||
deferred.resolve({
|
||||
key: key,
|
||||
table: translationTable
|
||||
});
|
||||
$rootScope.$broadcast('$translateLoadingEnd');
|
||||
}, function (key) {
|
||||
$rootScope.$broadcast('$translateLoadingError');
|
||||
deferred.reject(key);
|
||||
$rootScope.$broadcast('$translateLoadingEnd');
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
if ($storageFactory) {
|
||||
Storage = $injector.get($storageFactory);
|
||||
if (!Storage.get || !Storage.set) {
|
||||
throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or set() method!');
|
||||
}
|
||||
}
|
||||
if ($interpolatorFactories.length > 0) {
|
||||
angular.forEach($interpolatorFactories, function (interpolatorFactory) {
|
||||
var interpolator = $injector.get(interpolatorFactory);
|
||||
interpolator.setLocale($preferredLanguage || $uses);
|
||||
interpolatorHashMap[interpolator.getInterpolationIdentifier()] = interpolator;
|
||||
});
|
||||
}
|
||||
var checkValidFallback = function (usesLang) {
|
||||
if (usesLang && $fallbackLanguage) {
|
||||
if (angular.isArray($fallbackLanguage)) {
|
||||
var fallbackLanguagesSize = $fallbackLanguage.length;
|
||||
for (var current = 0; current < fallbackLanguagesSize; current++) {
|
||||
if ($uses === $translationTable[$fallbackLanguage[current]]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
return usesLang !== $fallbackLanguage;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
var $translate = function (translationId, interpolateParams, interpolationId) {
|
||||
var table = $uses ? $translationTable[$uses] : $translationTable, Interpolator = interpolationId ? interpolatorHashMap[interpolationId] : defaultInterpolator;
|
||||
if (table && table.hasOwnProperty(translationId)) {
|
||||
if (angular.isString(table[translationId]) && table[translationId].substr(0, 2) === '@:') {
|
||||
return $translate(table[translationId].substr(2), interpolateParams, interpolationId);
|
||||
}
|
||||
return Interpolator.interpolate(table[translationId], interpolateParams);
|
||||
}
|
||||
if ($missingTranslationHandlerFactory && !pendingLoader) {
|
||||
$injector.get($missingTranslationHandlerFactory)(translationId, $uses);
|
||||
}
|
||||
var normatedLanguages;
|
||||
if ($uses && $fallbackLanguage && checkValidFallback($uses)) {
|
||||
if (typeof $fallbackLanguage === 'string') {
|
||||
normatedLanguages = [];
|
||||
normatedLanguages.push($fallbackLanguage);
|
||||
} else {
|
||||
normatedLanguages = $fallbackLanguage;
|
||||
}
|
||||
var fallbackLanguagesSize = normatedLanguages.length;
|
||||
for (var current = 0; current < fallbackLanguagesSize; current++) {
|
||||
if ($uses !== $translationTable[normatedLanguages[current]]) {
|
||||
var translationFromList = $translationTable[normatedLanguages[current]][translationId];
|
||||
if (translationFromList) {
|
||||
var returnValFromList;
|
||||
Interpolator.setLocale(normatedLanguages[current]);
|
||||
returnValFromList = Interpolator.interpolate(translationFromList, interpolateParams);
|
||||
Interpolator.setLocale($uses);
|
||||
return returnValFromList;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($notFoundIndicatorLeft) {
|
||||
translationId = [
|
||||
$notFoundIndicatorLeft,
|
||||
translationId
|
||||
].join(' ');
|
||||
}
|
||||
if ($notFoundIndicatorRight) {
|
||||
translationId = [
|
||||
translationId,
|
||||
$notFoundIndicatorRight
|
||||
].join(' ');
|
||||
}
|
||||
return translationId;
|
||||
};
|
||||
$translate.preferredLanguage = function () {
|
||||
return $preferredLanguage;
|
||||
};
|
||||
$translate.fallbackLanguage = function () {
|
||||
return $fallbackLanguage;
|
||||
};
|
||||
$translate.proposedLanguage = function () {
|
||||
return $nextLang;
|
||||
};
|
||||
$translate.storage = function () {
|
||||
return Storage;
|
||||
};
|
||||
$translate.uses = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
$rootScope.$broadcast('$translateChangeStart');
|
||||
function useLanguage(key) {
|
||||
$uses = key;
|
||||
$rootScope.$broadcast('$translateChangeSuccess');
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
defaultInterpolator.setLocale($uses);
|
||||
angular.forEach(interpolatorHashMap, function (interpolator, id) {
|
||||
interpolatorHashMap[id].setLocale($uses);
|
||||
});
|
||||
deferred.resolve(key);
|
||||
$rootScope.$broadcast('$translateChangeEnd');
|
||||
}
|
||||
if (!$translationTable[key] && $loaderFactory) {
|
||||
$nextLang = key;
|
||||
loadAsync(key).then(function (translation) {
|
||||
$nextLang = undefined;
|
||||
translations(translation.key, translation.table);
|
||||
useLanguage(translation.key);
|
||||
}, function (key) {
|
||||
$nextLang = undefined;
|
||||
$rootScope.$broadcast('$translateChangeError');
|
||||
deferred.reject(key);
|
||||
$rootScope.$broadcast('$translateChangeEnd');
|
||||
});
|
||||
} else {
|
||||
useLanguage(key);
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.storageKey = function () {
|
||||
return storageKey();
|
||||
};
|
||||
$translate.refresh = function (langKey) {
|
||||
if (!$loaderFactory) {
|
||||
throw new Error('Couldn\'t refresh translation table, no loader registered!');
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
function onLoadSuccess() {
|
||||
deferred.resolve();
|
||||
$rootScope.$broadcast('$translateRefreshEnd');
|
||||
}
|
||||
function onLoadFailure() {
|
||||
deferred.reject();
|
||||
$rootScope.$broadcast('$translateRefreshEnd');
|
||||
}
|
||||
if (!langKey) {
|
||||
$rootScope.$broadcast('$translateRefreshStart');
|
||||
var loaders = [];
|
||||
if ($fallbackLanguage) {
|
||||
if (typeof $fallbackLanguage === 'string') {
|
||||
loaders.push(loadAsync($fallbackLanguage));
|
||||
} else {
|
||||
var fallbackLanguagesSize = $fallbackLanguage.length;
|
||||
for (var current = 0; current < fallbackLanguagesSize; current++) {
|
||||
loaders.push(loadAsync($fallbackLanguage[current]));
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($uses) {
|
||||
loaders.push(loadAsync($uses));
|
||||
}
|
||||
if (loaders.length > 0) {
|
||||
$q.all(loaders).then(function (newTranslations) {
|
||||
for (var lang in $translationTable) {
|
||||
if ($translationTable.hasOwnProperty(lang)) {
|
||||
delete $translationTable[lang];
|
||||
}
|
||||
}
|
||||
for (var i = 0, len = newTranslations.length; i < len; i++) {
|
||||
translations(newTranslations[i].key, newTranslations[i].table);
|
||||
}
|
||||
if ($uses) {
|
||||
$translate.uses($uses);
|
||||
}
|
||||
onLoadSuccess();
|
||||
}, function (key) {
|
||||
if (key === $uses) {
|
||||
$rootScope.$broadcast('$translateChangeError');
|
||||
}
|
||||
onLoadFailure();
|
||||
});
|
||||
} else
|
||||
onLoadSuccess();
|
||||
} else if ($translationTable.hasOwnProperty(langKey)) {
|
||||
$rootScope.$broadcast('$translateRefreshStart');
|
||||
var loader = loadAsync(langKey);
|
||||
if (langKey === $uses) {
|
||||
loader.then(function (newTranslation) {
|
||||
$translationTable[langKey] = newTranslation.table;
|
||||
$translate.uses($uses);
|
||||
onLoadSuccess();
|
||||
}, function () {
|
||||
$rootScope.$broadcast('$translateChangeError');
|
||||
onLoadFailure();
|
||||
});
|
||||
} else {
|
||||
loader.then(function (newTranslation) {
|
||||
$translationTable[langKey] = newTranslation.table;
|
||||
onLoadSuccess();
|
||||
}, onLoadFailure);
|
||||
}
|
||||
} else
|
||||
deferred.reject();
|
||||
return deferred.promise;
|
||||
};
|
||||
if ($loaderFactory) {
|
||||
if (angular.equals($translationTable, {})) {
|
||||
$translate.uses($translate.uses());
|
||||
}
|
||||
if ($fallbackLanguage) {
|
||||
if (typeof $fallbackLanguage === 'string' && !$translationTable[$fallbackLanguage]) {
|
||||
loadAsync($fallbackLanguage);
|
||||
} else {
|
||||
var fallbackLanguagesSize = $fallbackLanguage.length;
|
||||
for (var current = 0; current < fallbackLanguagesSize; current++) {
|
||||
if (!$translationTable[$fallbackLanguage[current]]) {
|
||||
loadAsync($fallbackLanguage[current]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $translate;
|
||||
}
|
||||
];
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').factory('$translateDefaultInterpolation', [
|
||||
'$interpolate',
|
||||
function ($interpolate) {
|
||||
var $translateInterpolator = {}, $locale, $identifier = 'default';
|
||||
$translateInterpolator.setLocale = function (locale) {
|
||||
$locale = locale;
|
||||
};
|
||||
$translateInterpolator.getInterpolationIdentifier = function () {
|
||||
return $identifier;
|
||||
};
|
||||
$translateInterpolator.interpolate = function (string, interpolateParams) {
|
||||
return $interpolate(string)(interpolateParams);
|
||||
};
|
||||
return $translateInterpolator;
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
angular.module('pascalprecht.translate').directive('translate', [
|
||||
'$filter',
|
||||
'$interpolate',
|
||||
'$parse',
|
||||
function ($filter, $interpolate, $parse) {
|
||||
var translate = $filter('translate');
|
||||
return {
|
||||
restrict: 'AE',
|
||||
scope: true,
|
||||
link: function linkFn(scope, element, attr) {
|
||||
if (attr.translateInterpolation) {
|
||||
scope.interpolation = attr.translateInterpolation;
|
||||
}
|
||||
attr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId, '') || translationId === undefined) {
|
||||
scope.translationId = $interpolate(element.text().replace(/^\s+|\s+$/g, ''))(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
attr.$observe('translateValues', function (interpolateParams) {
|
||||
if (interpolateParams)
|
||||
scope.$parent.$watch(function () {
|
||||
scope.interpolateParams = $parse(interpolateParams)(scope.$parent);
|
||||
});
|
||||
});
|
||||
scope.$on('$translateChangeSuccess', function () {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams, scope.interpolation));
|
||||
});
|
||||
scope.$watch('[translationId, interpolateParams]', function (nValue) {
|
||||
if (scope.translationId) {
|
||||
element.html(translate(scope.translationId, scope.interpolateParams, scope.interpolation));
|
||||
}
|
||||
}, true);
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').filter('translate', [
|
||||
'$parse',
|
||||
'$translate',
|
||||
function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams, interpolation) {
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate(translationId, interpolateParams, interpolation);
|
||||
};
|
||||
}
|
||||
]);
|
||||
+1
File diff suppressed because one or more lines are too long
+800
@@ -0,0 +1,800 @@
|
||||
/**
|
||||
* angular-translate - v2.0.0 - 2014-02-16
|
||||
* http://github.com/PascalPrecht/angular-translate
|
||||
* Copyright (c) 2014 ; Licensed
|
||||
*/
|
||||
angular.module('pascalprecht.translate', ['ng']).run([
|
||||
'$translate',
|
||||
function ($translate) {
|
||||
var key = $translate.storageKey(), storage = $translate.storage();
|
||||
if (storage) {
|
||||
if (!storage.get(key)) {
|
||||
if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.use($translate.preferredLanguage());
|
||||
} else {
|
||||
storage.set(key, $translate.use());
|
||||
}
|
||||
} else {
|
||||
$translate.use(storage.get(key));
|
||||
}
|
||||
} else if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.use($translate.preferredLanguage());
|
||||
}
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').provider('$translate', [
|
||||
'$STORAGE_KEY',
|
||||
function ($STORAGE_KEY) {
|
||||
var $translationTable = {}, $preferredLanguage, $availableLanguageKeys = [], $languageKeyAliases, $fallbackLanguage, $fallbackWasString, $uses, $nextLang, $storageFactory, $storageKey = $STORAGE_KEY, $storagePrefix, $missingTranslationHandlerFactory, $interpolationFactory, $interpolatorFactories = [], $interpolationSanitizationStrategy = false, $loaderFactory, $cloakClassName = 'translate-cloak', $loaderOptions, $notFoundIndicatorLeft, $notFoundIndicatorRight, $postCompilingEnabled = false, NESTED_OBJECT_DELIMITER = '.';
|
||||
var getLocale = function () {
|
||||
var nav = window.navigator;
|
||||
return (nav.language || nav.browserLanguage || nav.systemLanguage || nav.userLanguage || '').split('-').join('_');
|
||||
};
|
||||
var negotiateLocale = function (preferred) {
|
||||
var avail = [], locale = angular.lowercase(preferred), i = 0, n = $availableLanguageKeys.length;
|
||||
for (; i < n; i++) {
|
||||
avail.push(angular.lowercase($availableLanguageKeys[i]));
|
||||
}
|
||||
if (avail.indexOf(locale) > -1) {
|
||||
return locale;
|
||||
}
|
||||
if ($languageKeyAliases) {
|
||||
if ($languageKeyAliases[preferred]) {
|
||||
var alias = $languageKeyAliases[preferred];
|
||||
if (avail.indexOf(angular.lowercase(alias)) > -1) {
|
||||
return alias;
|
||||
}
|
||||
}
|
||||
}
|
||||
var parts = preferred.split('_');
|
||||
if (parts.length > 1 && avail.indexOf(angular.lowercase(parts[0])) > 1) {
|
||||
return parts[0];
|
||||
}
|
||||
};
|
||||
var translations = function (langKey, translationTable) {
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
}
|
||||
} else {
|
||||
if (!angular.isObject($translationTable[langKey])) {
|
||||
$translationTable[langKey] = {};
|
||||
}
|
||||
angular.extend($translationTable[langKey], flatObject(translationTable));
|
||||
}
|
||||
return this;
|
||||
};
|
||||
this.translations = translations;
|
||||
this.cloakClassName = function (name) {
|
||||
if (!name) {
|
||||
return $cloakClassName;
|
||||
}
|
||||
$cloakClassName = name;
|
||||
return this;
|
||||
};
|
||||
var flatObject = function (data, path, result, prevKey) {
|
||||
var key, keyWithPath, keyWithShortPath, val;
|
||||
if (!path) {
|
||||
path = [];
|
||||
}
|
||||
if (!result) {
|
||||
result = {};
|
||||
}
|
||||
for (key in data) {
|
||||
if (!data.hasOwnProperty(key)) {
|
||||
continue;
|
||||
}
|
||||
val = data[key];
|
||||
if (angular.isObject(val)) {
|
||||
flatObject(val, path.concat(key), result, key);
|
||||
} else {
|
||||
keyWithPath = path.length ? '' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key : key;
|
||||
if (path.length && key === prevKey) {
|
||||
keyWithShortPath = '' + path.join(NESTED_OBJECT_DELIMITER);
|
||||
result[keyWithShortPath] = '@:' + keyWithPath;
|
||||
}
|
||||
result[keyWithPath] = val;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
this.addInterpolation = function (factory) {
|
||||
$interpolatorFactories.push(factory);
|
||||
return this;
|
||||
};
|
||||
this.useMessageFormatInterpolation = function () {
|
||||
return this.useInterpolation('$translateMessageFormatInterpolation');
|
||||
};
|
||||
this.useInterpolation = function (factory) {
|
||||
$interpolationFactory = factory;
|
||||
return this;
|
||||
};
|
||||
this.useSanitizeValueStrategy = function (value) {
|
||||
$interpolationSanitizationStrategy = value;
|
||||
return this;
|
||||
};
|
||||
this.preferredLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$preferredLanguage = langKey;
|
||||
return this;
|
||||
}
|
||||
return $preferredLanguage;
|
||||
};
|
||||
this.translationNotFoundIndicator = function (indicator) {
|
||||
this.translationNotFoundIndicatorLeft(indicator);
|
||||
this.translationNotFoundIndicatorRight(indicator);
|
||||
return this;
|
||||
};
|
||||
this.translationNotFoundIndicatorLeft = function (indicator) {
|
||||
if (!indicator) {
|
||||
return $notFoundIndicatorLeft;
|
||||
}
|
||||
$notFoundIndicatorLeft = indicator;
|
||||
return this;
|
||||
};
|
||||
this.translationNotFoundIndicatorRight = function (indicator) {
|
||||
if (!indicator) {
|
||||
return $notFoundIndicatorRight;
|
||||
}
|
||||
$notFoundIndicatorRight = indicator;
|
||||
return this;
|
||||
};
|
||||
this.fallbackLanguage = function (langKey) {
|
||||
fallbackStack(langKey);
|
||||
return this;
|
||||
};
|
||||
var fallbackStack = function (langKey) {
|
||||
if (langKey) {
|
||||
if (angular.isString(langKey)) {
|
||||
$fallbackWasString = true;
|
||||
$fallbackLanguage = [langKey];
|
||||
} else if (angular.isArray(langKey)) {
|
||||
$fallbackWasString = false;
|
||||
$fallbackLanguage = langKey;
|
||||
}
|
||||
if (angular.isString($preferredLanguage)) {
|
||||
$fallbackLanguage.push($preferredLanguage);
|
||||
}
|
||||
return this;
|
||||
} else {
|
||||
if ($fallbackWasString) {
|
||||
return $fallbackLanguage[0];
|
||||
} else {
|
||||
return $fallbackLanguage;
|
||||
}
|
||||
}
|
||||
};
|
||||
this.use = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey] && !$loaderFactory) {
|
||||
throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
|
||||
}
|
||||
$uses = langKey;
|
||||
return this;
|
||||
}
|
||||
return $uses;
|
||||
};
|
||||
var storageKey = function (key) {
|
||||
if (!key) {
|
||||
if ($storagePrefix) {
|
||||
return $storagePrefix + $storageKey;
|
||||
}
|
||||
return $storageKey;
|
||||
}
|
||||
$storageKey = key;
|
||||
};
|
||||
this.storageKey = storageKey;
|
||||
this.useUrlLoader = function (url) {
|
||||
return this.useLoader('$translateUrlLoader', { url: url });
|
||||
};
|
||||
this.useStaticFilesLoader = function (options) {
|
||||
return this.useLoader('$translateStaticFilesLoader', options);
|
||||
};
|
||||
this.useLoader = function (loaderFactory, options) {
|
||||
$loaderFactory = loaderFactory;
|
||||
$loaderOptions = options || {};
|
||||
return this;
|
||||
};
|
||||
this.useLocalStorage = function () {
|
||||
return this.useStorage('$translateLocalStorage');
|
||||
};
|
||||
this.useCookieStorage = function () {
|
||||
return this.useStorage('$translateCookieStorage');
|
||||
};
|
||||
this.useStorage = function (storageFactory) {
|
||||
$storageFactory = storageFactory;
|
||||
return this;
|
||||
};
|
||||
this.storagePrefix = function (prefix) {
|
||||
if (!prefix) {
|
||||
return prefix;
|
||||
}
|
||||
$storagePrefix = prefix;
|
||||
return this;
|
||||
};
|
||||
this.useMissingTranslationHandlerLog = function () {
|
||||
return this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog');
|
||||
};
|
||||
this.useMissingTranslationHandler = function (factory) {
|
||||
$missingTranslationHandlerFactory = factory;
|
||||
return this;
|
||||
};
|
||||
this.usePostCompiling = function (value) {
|
||||
$postCompilingEnabled = !!value;
|
||||
return this;
|
||||
};
|
||||
this.determinePreferredLanguage = function (fn) {
|
||||
var locale = fn && angular.isFunction(fn) ? fn() : getLocale();
|
||||
if (!$availableLanguageKeys.length) {
|
||||
$preferredLanguage = locale;
|
||||
return this;
|
||||
} else {
|
||||
$preferredLanguage = negotiateLocale(locale);
|
||||
}
|
||||
};
|
||||
this.registerAvailableLanguageKeys = function (languageKeys, aliases) {
|
||||
if (languageKeys) {
|
||||
$availableLanguageKeys = languageKeys;
|
||||
if (aliases) {
|
||||
$languageKeyAliases = aliases;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
return $availableLanguageKeys;
|
||||
};
|
||||
this.$get = [
|
||||
'$log',
|
||||
'$injector',
|
||||
'$rootScope',
|
||||
'$q',
|
||||
function ($log, $injector, $rootScope, $q) {
|
||||
var Storage, defaultInterpolator = $injector.get($interpolationFactory || '$translateDefaultInterpolation'), pendingLoader = false, interpolatorHashMap = {}, langPromises = {}, fallbackIndex, startFallbackIteration;
|
||||
var $translate = function (translationId, interpolateParams, interpolationId) {
|
||||
var deferred = $q.defer();
|
||||
translationId = translationId.trim();
|
||||
var promiseToWaitFor = function () {
|
||||
var promise = $preferredLanguage ? langPromises[$preferredLanguage] : langPromises[$uses];
|
||||
fallbackIndex = 0;
|
||||
if ($storageFactory && !promise) {
|
||||
var langKey = Storage.get($storageKey);
|
||||
promise = langPromises[langKey];
|
||||
if ($fallbackLanguage && $fallbackLanguage.length) {
|
||||
var index = indexOf($fallbackLanguage, langKey);
|
||||
fallbackIndex = index > -1 ? index += 1 : 0;
|
||||
$fallbackLanguage.push($preferredLanguage);
|
||||
}
|
||||
}
|
||||
return promise;
|
||||
}();
|
||||
if (!promiseToWaitFor) {
|
||||
determineTranslation(translationId, interpolateParams, interpolationId).then(deferred.resolve, deferred.reject);
|
||||
} else {
|
||||
promiseToWaitFor.then(function () {
|
||||
determineTranslation(translationId, interpolateParams, interpolationId).then(deferred.resolve, deferred.reject);
|
||||
}, deferred.reject);
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
var indexOf = function (array, searchElement) {
|
||||
for (var i = 0, len = array.length; i < len; i++) {
|
||||
if (array[i] === searchElement) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
};
|
||||
var applyNotFoundIndicators = function (translationId) {
|
||||
if ($notFoundIndicatorLeft) {
|
||||
translationId = [
|
||||
$notFoundIndicatorLeft,
|
||||
translationId
|
||||
].join(' ');
|
||||
}
|
||||
if ($notFoundIndicatorRight) {
|
||||
translationId = [
|
||||
translationId,
|
||||
$notFoundIndicatorRight
|
||||
].join(' ');
|
||||
}
|
||||
return translationId;
|
||||
};
|
||||
var useLanguage = function (key) {
|
||||
$uses = key;
|
||||
$rootScope.$emit('$translateChangeSuccess');
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
defaultInterpolator.setLocale($uses);
|
||||
angular.forEach(interpolatorHashMap, function (interpolator, id) {
|
||||
interpolatorHashMap[id].setLocale($uses);
|
||||
});
|
||||
$rootScope.$emit('$translateChangeEnd');
|
||||
};
|
||||
var loadAsync = function (key) {
|
||||
if (!key) {
|
||||
throw 'No language key specified for loading.';
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
$rootScope.$emit('$translateLoadingStart');
|
||||
pendingLoader = true;
|
||||
$injector.get($loaderFactory)(angular.extend($loaderOptions, { key: key })).then(function (data) {
|
||||
var translationTable = {};
|
||||
$rootScope.$emit('$translateLoadingSuccess');
|
||||
if (angular.isArray(data)) {
|
||||
angular.forEach(data, function (table) {
|
||||
angular.extend(translationTable, flatObject(table));
|
||||
});
|
||||
} else {
|
||||
angular.extend(translationTable, flatObject(data));
|
||||
}
|
||||
pendingLoader = false;
|
||||
deferred.resolve({
|
||||
key: key,
|
||||
table: translationTable
|
||||
});
|
||||
$rootScope.$emit('$translateLoadingEnd');
|
||||
}, function (key) {
|
||||
$rootScope.$emit('$translateLoadingError');
|
||||
deferred.reject(key);
|
||||
$rootScope.$emit('$translateLoadingEnd');
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
if ($storageFactory) {
|
||||
Storage = $injector.get($storageFactory);
|
||||
if (!Storage.get || !Storage.set) {
|
||||
throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or set() method!');
|
||||
}
|
||||
}
|
||||
if (angular.isFunction(defaultInterpolator.useSanitizeValueStrategy)) {
|
||||
defaultInterpolator.useSanitizeValueStrategy($interpolationSanitizationStrategy);
|
||||
}
|
||||
if ($interpolatorFactories.length) {
|
||||
angular.forEach($interpolatorFactories, function (interpolatorFactory) {
|
||||
var interpolator = $injector.get(interpolatorFactory);
|
||||
interpolator.setLocale($preferredLanguage || $uses);
|
||||
if (angular.isFunction(interpolator.useSanitizeValueStrategy)) {
|
||||
interpolator.useSanitizeValueStrategy($interpolationSanitizationStrategy);
|
||||
}
|
||||
interpolatorHashMap[interpolator.getInterpolationIdentifier()] = interpolator;
|
||||
});
|
||||
}
|
||||
var getTranslationTable = function (langKey) {
|
||||
var deferred = $q.defer();
|
||||
if ($translationTable.hasOwnProperty(langKey)) {
|
||||
deferred.resolve($translationTable[langKey]);
|
||||
return deferred.promise;
|
||||
} else {
|
||||
langPromises[langKey].then(function (data) {
|
||||
translations(data.key, data.table);
|
||||
deferred.resolve(data.table);
|
||||
}, deferred.reject);
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
var getFallbackTranslation = function (langKey, translationId, interpolateParams, Interpolator) {
|
||||
var deferred = $q.defer();
|
||||
getTranslationTable(langKey).then(function (translationTable) {
|
||||
if (translationTable.hasOwnProperty(translationId)) {
|
||||
Interpolator.setLocale(langKey);
|
||||
deferred.resolve(Interpolator.interpolate(translationTable[translationId], interpolateParams));
|
||||
Interpolator.setLocale($uses);
|
||||
} else {
|
||||
deferred.reject();
|
||||
}
|
||||
}, deferred.reject);
|
||||
return deferred.promise;
|
||||
};
|
||||
var getFallbackTranslationInstant = function (langKey, translationId, interpolateParams, Interpolator) {
|
||||
var result, translationTable = $translationTable[langKey];
|
||||
if (translationTable.hasOwnProperty(translationId)) {
|
||||
Interpolator.setLocale(langKey);
|
||||
result = Interpolator.interpolate(translationTable[translationId], interpolateParams);
|
||||
Interpolator.setLocale($uses);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
var resolveForFallbackLanguage = function (fallbackLanguageIndex, translationId, interpolateParams, Interpolator) {
|
||||
var deferred = $q.defer();
|
||||
if (fallbackLanguageIndex < $fallbackLanguage.length) {
|
||||
var langKey = $fallbackLanguage[fallbackLanguageIndex];
|
||||
getFallbackTranslation(langKey, translationId, interpolateParams, Interpolator).then(function (translation) {
|
||||
deferred.resolve(translation);
|
||||
}, function () {
|
||||
var nextFallbackLanguagePromise = resolveForFallbackLanguage(fallbackLanguageIndex + 1, translationId, interpolateParams, Interpolator);
|
||||
deferred.resolve(nextFallbackLanguagePromise);
|
||||
});
|
||||
} else {
|
||||
deferred.resolve(translationId);
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
var resolveForFallbackLanguageInstant = function (fallbackLanguageIndex, translationId, interpolateParams, Interpolator) {
|
||||
var result;
|
||||
if (fallbackLanguageIndex < $fallbackLanguage.length) {
|
||||
var langKey = $fallbackLanguage[fallbackLanguageIndex];
|
||||
result = getFallbackTranslationInstant(langKey, translationId, interpolateParams, Interpolator);
|
||||
if (!result) {
|
||||
result = resolveForFallbackLanguageInstant(fallbackLanguageIndex + 1, translationId, interpolateParams, Interpolator);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
var fallbackTranslation = function (translationId, interpolateParams, Interpolator) {
|
||||
return resolveForFallbackLanguage(startFallbackIteration > 0 ? startFallbackIteration : fallbackIndex, translationId, interpolateParams, Interpolator);
|
||||
};
|
||||
var fallbackTranslationInstant = function (translationId, interpolateParams, Interpolator) {
|
||||
return resolveForFallbackLanguageInstant(startFallbackIteration > 0 ? startFallbackIteration : fallbackIndex, translationId, interpolateParams, Interpolator);
|
||||
};
|
||||
var determineTranslation = function (translationId, interpolateParams, interpolationId) {
|
||||
var deferred = $q.defer();
|
||||
var table = $uses ? $translationTable[$uses] : $translationTable, Interpolator = interpolationId ? interpolatorHashMap[interpolationId] : defaultInterpolator;
|
||||
if (table && table.hasOwnProperty(translationId)) {
|
||||
var translation = table[translationId];
|
||||
if (translation.substr(0, 2) === '@:') {
|
||||
$translate(translation.substr(2), interpolateParams, interpolationId).then(deferred.resolve, deferred.reject);
|
||||
} else {
|
||||
deferred.resolve(Interpolator.interpolate(translation, interpolateParams));
|
||||
}
|
||||
} else {
|
||||
if ($missingTranslationHandlerFactory && !pendingLoader) {
|
||||
$injector.get($missingTranslationHandlerFactory)(translationId, $uses);
|
||||
}
|
||||
if ($uses && $fallbackLanguage && $fallbackLanguage.length) {
|
||||
fallbackTranslation(translationId, interpolateParams, Interpolator).then(function (translation) {
|
||||
deferred.resolve(translation);
|
||||
}, function (_translationId) {
|
||||
deferred.reject(applyNotFoundIndicators(_translationId));
|
||||
});
|
||||
} else {
|
||||
deferred.reject(applyNotFoundIndicators(translationId));
|
||||
}
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
var determineTranslationInstant = function (translationId, interpolateParams, interpolationId) {
|
||||
var result, table = $uses ? $translationTable[$uses] : $translationTable, Interpolator = interpolationId ? interpolatorHashMap[interpolationId] : defaultInterpolator;
|
||||
if (table && table.hasOwnProperty(translationId)) {
|
||||
var translation = table[translationId];
|
||||
if (translation.substr(0, 2) === '@:') {
|
||||
result = determineTranslationInstant(translation.substr(2), interpolateParams, interpolationId);
|
||||
} else {
|
||||
result = Interpolator.interpolate(translation, interpolateParams);
|
||||
}
|
||||
} else {
|
||||
if ($missingTranslationHandlerFactory && !pendingLoader) {
|
||||
$injector.get($missingTranslationHandlerFactory)(translationId, $uses);
|
||||
}
|
||||
if ($uses && $fallbackLanguage && $fallbackLanguage.length) {
|
||||
fallbackIndex = 0;
|
||||
result = fallbackTranslationInstant(translationId, interpolateParams, Interpolator);
|
||||
} else {
|
||||
result = applyNotFoundIndicators(translationId);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
$translate.preferredLanguage = function () {
|
||||
return $preferredLanguage;
|
||||
};
|
||||
$translate.cloakClassName = function () {
|
||||
return $cloakClassName;
|
||||
};
|
||||
$translate.fallbackLanguage = function (langKey) {
|
||||
if (langKey !== undefined && langKey !== null) {
|
||||
fallbackStack(langKey);
|
||||
if ($loaderFactory) {
|
||||
if ($fallbackLanguage && $fallbackLanguage.length) {
|
||||
for (var i = 0, len = $fallbackLanguage.length; i < len; i++) {
|
||||
if (!langPromises[$fallbackLanguage[i]]) {
|
||||
langPromises[$fallbackLanguage[i]] = loadAsync($fallbackLanguage[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$translate.use($translate.use());
|
||||
}
|
||||
if ($fallbackWasString) {
|
||||
return $fallbackLanguage[0];
|
||||
} else {
|
||||
return $fallbackLanguage;
|
||||
}
|
||||
};
|
||||
$translate.useFallbackLanguage = function (langKey) {
|
||||
if (langKey !== undefined && langKey !== null) {
|
||||
if (!langKey) {
|
||||
startFallbackIteration = 0;
|
||||
} else {
|
||||
var langKeyPosition = indexOf($fallbackLanguage, langKey);
|
||||
if (langKeyPosition > -1) {
|
||||
startFallbackIteration = langKeyPosition;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
$translate.proposedLanguage = function () {
|
||||
return $nextLang;
|
||||
};
|
||||
$translate.storage = function () {
|
||||
return Storage;
|
||||
};
|
||||
$translate.use = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
$rootScope.$emit('$translateChangeStart');
|
||||
if (!$translationTable[key] && $loaderFactory) {
|
||||
$nextLang = key;
|
||||
langPromises[key] = loadAsync(key).then(function (translation) {
|
||||
$nextLang = undefined;
|
||||
translations(translation.key, translation.table);
|
||||
deferred.resolve(translation.key);
|
||||
useLanguage(translation.key);
|
||||
}, function (key) {
|
||||
$nextLang = undefined;
|
||||
$rootScope.$emit('$translateChangeError');
|
||||
deferred.reject(key);
|
||||
$rootScope.$emit('$translateChangeEnd');
|
||||
});
|
||||
} else {
|
||||
deferred.resolve(key);
|
||||
useLanguage(key);
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.storageKey = function () {
|
||||
return storageKey();
|
||||
};
|
||||
$translate.isPostCompilingEnabled = function () {
|
||||
return $postCompilingEnabled;
|
||||
};
|
||||
$translate.refresh = function (langKey) {
|
||||
if (!$loaderFactory) {
|
||||
throw new Error('Couldn\'t refresh translation table, no loader registered!');
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
function resolve() {
|
||||
deferred.resolve();
|
||||
$rootScope.$emit('$translateRefreshEnd');
|
||||
}
|
||||
function reject() {
|
||||
deferred.reject();
|
||||
$rootScope.$emit('$translateRefreshEnd');
|
||||
}
|
||||
$rootScope.$emit('$translateRefreshStart');
|
||||
if (!langKey) {
|
||||
var tables = [];
|
||||
if ($fallbackLanguage && $fallbackLanguage.length) {
|
||||
for (var i = 0, len = $fallbackLanguage.length; i < len; i++) {
|
||||
tables.push(loadAsync($fallbackLanguage[i]));
|
||||
}
|
||||
}
|
||||
if ($uses) {
|
||||
tables.push(loadAsync($uses));
|
||||
}
|
||||
$q.all(tables).then(function (tableData) {
|
||||
angular.forEach(tableData, function (data) {
|
||||
if ($translationTable[data.key]) {
|
||||
delete $translationTable[data.key];
|
||||
}
|
||||
translations(data.key, data.table);
|
||||
});
|
||||
resolve();
|
||||
});
|
||||
} else if ($translationTable[langKey]) {
|
||||
loadAsync(langKey).then(function (data) {
|
||||
translations(data.key, data.table);
|
||||
if (langKey === $uses) {
|
||||
useLanguage($uses);
|
||||
}
|
||||
resolve();
|
||||
}, reject);
|
||||
} else {
|
||||
reject();
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.instant = function (translationId, interpolateParams, interpolationId) {
|
||||
translationId = translationId.trim();
|
||||
var result, possibleLangKeys = [];
|
||||
if ($preferredLanguage) {
|
||||
possibleLangKeys.push($preferredLanguage);
|
||||
}
|
||||
if ($uses) {
|
||||
possibleLangKeys.push($uses);
|
||||
}
|
||||
if ($fallbackLanguage && $fallbackLanguage.length) {
|
||||
possibleLangKeys = possibleLangKeys.concat($fallbackLanguage);
|
||||
}
|
||||
for (var i = 0, c = possibleLangKeys.length; i < c; i++) {
|
||||
var possibleLangKey = possibleLangKeys[i];
|
||||
if ($translationTable[possibleLangKey]) {
|
||||
if ($translationTable[possibleLangKey][translationId]) {
|
||||
result = determineTranslationInstant(translationId, interpolateParams, interpolationId);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!result) {
|
||||
result = translationId;
|
||||
}
|
||||
return result;
|
||||
};
|
||||
if ($loaderFactory) {
|
||||
if (angular.equals($translationTable, {})) {
|
||||
$translate.use($translate.use());
|
||||
}
|
||||
if ($fallbackLanguage && $fallbackLanguage.length) {
|
||||
for (var i = 0, len = $fallbackLanguage.length; i < len; i++) {
|
||||
langPromises[$fallbackLanguage[i]] = loadAsync($fallbackLanguage[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $translate;
|
||||
}
|
||||
];
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').factory('$translateDefaultInterpolation', [
|
||||
'$interpolate',
|
||||
function ($interpolate) {
|
||||
var $translateInterpolator = {}, $locale, $identifier = 'default', $sanitizeValueStrategy = null, sanitizeValueStrategies = {
|
||||
escaped: function (params) {
|
||||
var result = {};
|
||||
for (var key in params) {
|
||||
if (params.hasOwnProperty(key)) {
|
||||
result[key] = angular.element('<div></div>').text(params[key]).html();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
};
|
||||
var sanitizeParams = function (params) {
|
||||
var result;
|
||||
if (angular.isFunction(sanitizeValueStrategies[$sanitizeValueStrategy])) {
|
||||
result = sanitizeValueStrategies[$sanitizeValueStrategy](params);
|
||||
} else {
|
||||
result = params;
|
||||
}
|
||||
return result;
|
||||
};
|
||||
$translateInterpolator.setLocale = function (locale) {
|
||||
$locale = locale;
|
||||
};
|
||||
$translateInterpolator.getInterpolationIdentifier = function () {
|
||||
return $identifier;
|
||||
};
|
||||
$translateInterpolator.useSanitizeValueStrategy = function (value) {
|
||||
$sanitizeValueStrategy = value;
|
||||
return this;
|
||||
};
|
||||
$translateInterpolator.interpolate = function (string, interpolateParams) {
|
||||
if ($sanitizeValueStrategy) {
|
||||
interpolateParams = sanitizeParams(interpolateParams);
|
||||
}
|
||||
return $interpolate(string)(interpolateParams);
|
||||
};
|
||||
return $translateInterpolator;
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
angular.module('pascalprecht.translate').directive('translate', [
|
||||
'$translate',
|
||||
'$q',
|
||||
'$interpolate',
|
||||
'$compile',
|
||||
'$parse',
|
||||
'$rootScope',
|
||||
function ($translate, $q, $interpolate, $compile, $parse, $rootScope) {
|
||||
return {
|
||||
restrict: 'AE',
|
||||
scope: true,
|
||||
compile: function (tElement, tAttr) {
|
||||
var translateValuesExist = tAttr.translateValues ? tAttr.translateValues : undefined;
|
||||
var translateInterpolation = tAttr.translateInterpolation ? tAttr.translateInterpolation : undefined;
|
||||
var translateValueExist = tElement[0].outerHTML.match(/translate-value-+/i);
|
||||
return function linkFn(scope, iElement, iAttr) {
|
||||
scope.interpolateParams = {};
|
||||
iAttr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId, '') || !angular.isDefined(translationId)) {
|
||||
scope.translationId = $interpolate(iElement.text().replace(/^\s+|\s+$/g, ''))(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
if (translateValuesExist) {
|
||||
iAttr.$observe('translateValues', function (interpolateParams) {
|
||||
if (interpolateParams) {
|
||||
scope.$parent.$watch(function () {
|
||||
angular.extend(scope.interpolateParams, $parse(interpolateParams)(scope.$parent));
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
if (translateValueExist) {
|
||||
var fn = function (attrName) {
|
||||
iAttr.$observe(attrName, function (value) {
|
||||
scope.interpolateParams[angular.lowercase(attrName.substr(14))] = value;
|
||||
});
|
||||
};
|
||||
for (var attr in iAttr) {
|
||||
if (iAttr.hasOwnProperty(attr) && attr.substr(0, 14) === 'translateValue' && attr !== 'translateValues') {
|
||||
fn(attr);
|
||||
}
|
||||
}
|
||||
}
|
||||
var applyElementContent = function (value, scope) {
|
||||
iElement.html(value);
|
||||
var globallyEnabled = $translate.isPostCompilingEnabled();
|
||||
var locallyDefined = typeof tAttr.translateCompile !== 'undefined';
|
||||
var locallyEnabled = locallyDefined && tAttr.translateCompile !== 'false';
|
||||
if (globallyEnabled && !locallyDefined || locallyEnabled) {
|
||||
$compile(iElement.contents())(scope);
|
||||
}
|
||||
};
|
||||
var updateTranslationFn = function () {
|
||||
if (!translateValuesExist && !translateValueExist) {
|
||||
return function () {
|
||||
var unwatch = scope.$watch('translationId', function (value) {
|
||||
if (scope.translationId && value) {
|
||||
$translate(value, {}, translateInterpolation).then(function (translation) {
|
||||
applyElementContent(translation, scope);
|
||||
unwatch();
|
||||
}, function (translationId) {
|
||||
applyElementContent(translationId, scope);
|
||||
unwatch();
|
||||
});
|
||||
}
|
||||
}, true);
|
||||
};
|
||||
} else {
|
||||
return function () {
|
||||
scope.$watch('interpolateParams', function (value) {
|
||||
if (scope.translationId && value) {
|
||||
$translate(scope.translationId, value, translateInterpolation).then(function (translation) {
|
||||
applyElementContent(translation, scope);
|
||||
}, function (translationId) {
|
||||
applyElementContent(translationId, scope);
|
||||
});
|
||||
}
|
||||
}, true);
|
||||
};
|
||||
}
|
||||
}();
|
||||
var unbind = $rootScope.$on('$translateChangeSuccess', updateTranslationFn);
|
||||
updateTranslationFn();
|
||||
scope.$on('$destroy', unbind);
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').directive('translateCloak', [
|
||||
'$rootScope',
|
||||
'$translate',
|
||||
function ($rootScope, $translate) {
|
||||
return {
|
||||
compile: function (tElement) {
|
||||
$rootScope.$on('$translateLoadingSuccess', function () {
|
||||
tElement.removeClass($translate.cloakClassName());
|
||||
});
|
||||
tElement.addClass($translate.cloakClassName());
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').filter('translate', [
|
||||
'$parse',
|
||||
'$translate',
|
||||
function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams, interpolation) {
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate.instant(translationId, interpolateParams, interpolation);
|
||||
};
|
||||
}
|
||||
]);
|
||||
+1
File diff suppressed because one or more lines are too long
+814
@@ -0,0 +1,814 @@
|
||||
/**
|
||||
* angular-translate - v2.0.1 - 2014-02-25
|
||||
* http://github.com/PascalPrecht/angular-translate
|
||||
* Copyright (c) 2014 ; Licensed
|
||||
*/
|
||||
angular.module('pascalprecht.translate', ['ng']).run([
|
||||
'$translate',
|
||||
function ($translate) {
|
||||
var key = $translate.storageKey(), storage = $translate.storage();
|
||||
if (storage) {
|
||||
if (!storage.get(key)) {
|
||||
if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.use($translate.preferredLanguage());
|
||||
} else {
|
||||
storage.set(key, $translate.use());
|
||||
}
|
||||
} else {
|
||||
$translate.use(storage.get(key));
|
||||
}
|
||||
} else if (angular.isString($translate.preferredLanguage())) {
|
||||
$translate.use($translate.preferredLanguage());
|
||||
}
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').provider('$translate', [
|
||||
'$STORAGE_KEY',
|
||||
function ($STORAGE_KEY) {
|
||||
var $translationTable = {}, $preferredLanguage, $availableLanguageKeys = [], $languageKeyAliases, $fallbackLanguage, $fallbackWasString, $uses, $nextLang, $storageFactory, $storageKey = $STORAGE_KEY, $storagePrefix, $missingTranslationHandlerFactory, $interpolationFactory, $interpolatorFactories = [], $interpolationSanitizationStrategy = false, $loaderFactory, $cloakClassName = 'translate-cloak', $loaderOptions, $notFoundIndicatorLeft, $notFoundIndicatorRight, $postCompilingEnabled = false, NESTED_OBJECT_DELIMITER = '.';
|
||||
var getLocale = function () {
|
||||
var nav = window.navigator;
|
||||
return (nav.language || nav.browserLanguage || nav.systemLanguage || nav.userLanguage || '').split('-').join('_');
|
||||
};
|
||||
var negotiateLocale = function (preferred) {
|
||||
var avail = [], locale = angular.lowercase(preferred), i = 0, n = $availableLanguageKeys.length;
|
||||
for (; i < n; i++) {
|
||||
avail.push(angular.lowercase($availableLanguageKeys[i]));
|
||||
}
|
||||
if (avail.indexOf(locale) > -1) {
|
||||
return locale;
|
||||
}
|
||||
if ($languageKeyAliases) {
|
||||
if ($languageKeyAliases[preferred]) {
|
||||
var alias = $languageKeyAliases[preferred];
|
||||
if (avail.indexOf(angular.lowercase(alias)) > -1) {
|
||||
return alias;
|
||||
}
|
||||
}
|
||||
}
|
||||
var parts = preferred.split('_');
|
||||
if (parts.length > 1 && avail.indexOf(angular.lowercase(parts[0])) > 1) {
|
||||
return parts[0];
|
||||
}
|
||||
};
|
||||
var translations = function (langKey, translationTable) {
|
||||
if (!langKey && !translationTable) {
|
||||
return $translationTable;
|
||||
}
|
||||
if (langKey && !translationTable) {
|
||||
if (angular.isString(langKey)) {
|
||||
return $translationTable[langKey];
|
||||
}
|
||||
} else {
|
||||
if (!angular.isObject($translationTable[langKey])) {
|
||||
$translationTable[langKey] = {};
|
||||
}
|
||||
angular.extend($translationTable[langKey], flatObject(translationTable));
|
||||
}
|
||||
return this;
|
||||
};
|
||||
this.translations = translations;
|
||||
this.cloakClassName = function (name) {
|
||||
if (!name) {
|
||||
return $cloakClassName;
|
||||
}
|
||||
$cloakClassName = name;
|
||||
return this;
|
||||
};
|
||||
var flatObject = function (data, path, result, prevKey) {
|
||||
var key, keyWithPath, keyWithShortPath, val;
|
||||
if (!path) {
|
||||
path = [];
|
||||
}
|
||||
if (!result) {
|
||||
result = {};
|
||||
}
|
||||
for (key in data) {
|
||||
if (!data.hasOwnProperty(key)) {
|
||||
continue;
|
||||
}
|
||||
val = data[key];
|
||||
if (angular.isObject(val)) {
|
||||
flatObject(val, path.concat(key), result, key);
|
||||
} else {
|
||||
keyWithPath = path.length ? '' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key : key;
|
||||
if (path.length && key === prevKey) {
|
||||
keyWithShortPath = '' + path.join(NESTED_OBJECT_DELIMITER);
|
||||
result[keyWithShortPath] = '@:' + keyWithPath;
|
||||
}
|
||||
result[keyWithPath] = val;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
this.addInterpolation = function (factory) {
|
||||
$interpolatorFactories.push(factory);
|
||||
return this;
|
||||
};
|
||||
this.useMessageFormatInterpolation = function () {
|
||||
return this.useInterpolation('$translateMessageFormatInterpolation');
|
||||
};
|
||||
this.useInterpolation = function (factory) {
|
||||
$interpolationFactory = factory;
|
||||
return this;
|
||||
};
|
||||
this.useSanitizeValueStrategy = function (value) {
|
||||
$interpolationSanitizationStrategy = value;
|
||||
return this;
|
||||
};
|
||||
this.preferredLanguage = function (langKey) {
|
||||
if (langKey) {
|
||||
$preferredLanguage = langKey;
|
||||
return this;
|
||||
}
|
||||
return $preferredLanguage;
|
||||
};
|
||||
this.translationNotFoundIndicator = function (indicator) {
|
||||
this.translationNotFoundIndicatorLeft(indicator);
|
||||
this.translationNotFoundIndicatorRight(indicator);
|
||||
return this;
|
||||
};
|
||||
this.translationNotFoundIndicatorLeft = function (indicator) {
|
||||
if (!indicator) {
|
||||
return $notFoundIndicatorLeft;
|
||||
}
|
||||
$notFoundIndicatorLeft = indicator;
|
||||
return this;
|
||||
};
|
||||
this.translationNotFoundIndicatorRight = function (indicator) {
|
||||
if (!indicator) {
|
||||
return $notFoundIndicatorRight;
|
||||
}
|
||||
$notFoundIndicatorRight = indicator;
|
||||
return this;
|
||||
};
|
||||
this.fallbackLanguage = function (langKey) {
|
||||
fallbackStack(langKey);
|
||||
return this;
|
||||
};
|
||||
var fallbackStack = function (langKey) {
|
||||
if (langKey) {
|
||||
if (angular.isString(langKey)) {
|
||||
$fallbackWasString = true;
|
||||
$fallbackLanguage = [langKey];
|
||||
} else if (angular.isArray(langKey)) {
|
||||
$fallbackWasString = false;
|
||||
$fallbackLanguage = langKey;
|
||||
}
|
||||
if (angular.isString($preferredLanguage)) {
|
||||
$fallbackLanguage.push($preferredLanguage);
|
||||
}
|
||||
return this;
|
||||
} else {
|
||||
if ($fallbackWasString) {
|
||||
return $fallbackLanguage[0];
|
||||
} else {
|
||||
return $fallbackLanguage;
|
||||
}
|
||||
}
|
||||
};
|
||||
this.use = function (langKey) {
|
||||
if (langKey) {
|
||||
if (!$translationTable[langKey] && !$loaderFactory) {
|
||||
throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
|
||||
}
|
||||
$uses = langKey;
|
||||
return this;
|
||||
}
|
||||
return $uses;
|
||||
};
|
||||
var storageKey = function (key) {
|
||||
if (!key) {
|
||||
if ($storagePrefix) {
|
||||
return $storagePrefix + $storageKey;
|
||||
}
|
||||
return $storageKey;
|
||||
}
|
||||
$storageKey = key;
|
||||
};
|
||||
this.storageKey = storageKey;
|
||||
this.useUrlLoader = function (url) {
|
||||
return this.useLoader('$translateUrlLoader', { url: url });
|
||||
};
|
||||
this.useStaticFilesLoader = function (options) {
|
||||
return this.useLoader('$translateStaticFilesLoader', options);
|
||||
};
|
||||
this.useLoader = function (loaderFactory, options) {
|
||||
$loaderFactory = loaderFactory;
|
||||
$loaderOptions = options || {};
|
||||
return this;
|
||||
};
|
||||
this.useLocalStorage = function () {
|
||||
return this.useStorage('$translateLocalStorage');
|
||||
};
|
||||
this.useCookieStorage = function () {
|
||||
return this.useStorage('$translateCookieStorage');
|
||||
};
|
||||
this.useStorage = function (storageFactory) {
|
||||
$storageFactory = storageFactory;
|
||||
return this;
|
||||
};
|
||||
this.storagePrefix = function (prefix) {
|
||||
if (!prefix) {
|
||||
return prefix;
|
||||
}
|
||||
$storagePrefix = prefix;
|
||||
return this;
|
||||
};
|
||||
this.useMissingTranslationHandlerLog = function () {
|
||||
return this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog');
|
||||
};
|
||||
this.useMissingTranslationHandler = function (factory) {
|
||||
$missingTranslationHandlerFactory = factory;
|
||||
return this;
|
||||
};
|
||||
this.usePostCompiling = function (value) {
|
||||
$postCompilingEnabled = !!value;
|
||||
return this;
|
||||
};
|
||||
this.determinePreferredLanguage = function (fn) {
|
||||
var locale = fn && angular.isFunction(fn) ? fn() : getLocale();
|
||||
if (!$availableLanguageKeys.length) {
|
||||
$preferredLanguage = locale;
|
||||
return this;
|
||||
} else {
|
||||
$preferredLanguage = negotiateLocale(locale);
|
||||
}
|
||||
};
|
||||
this.registerAvailableLanguageKeys = function (languageKeys, aliases) {
|
||||
if (languageKeys) {
|
||||
$availableLanguageKeys = languageKeys;
|
||||
if (aliases) {
|
||||
$languageKeyAliases = aliases;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
return $availableLanguageKeys;
|
||||
};
|
||||
this.$get = [
|
||||
'$log',
|
||||
'$injector',
|
||||
'$rootScope',
|
||||
'$q',
|
||||
function ($log, $injector, $rootScope, $q) {
|
||||
var Storage, defaultInterpolator = $injector.get($interpolationFactory || '$translateDefaultInterpolation'), pendingLoader = false, interpolatorHashMap = {}, langPromises = {}, fallbackIndex, startFallbackIteration;
|
||||
var $translate = function (translationId, interpolateParams, interpolationId) {
|
||||
var deferred = $q.defer();
|
||||
translationId = translationId.trim();
|
||||
var promiseToWaitFor = function () {
|
||||
var promise = $preferredLanguage ? langPromises[$preferredLanguage] : langPromises[$uses];
|
||||
fallbackIndex = 0;
|
||||
if ($storageFactory && !promise) {
|
||||
var langKey = Storage.get($storageKey);
|
||||
promise = langPromises[langKey];
|
||||
if ($fallbackLanguage && $fallbackLanguage.length) {
|
||||
var index = indexOf($fallbackLanguage, langKey);
|
||||
fallbackIndex = index > -1 ? index += 1 : 0;
|
||||
$fallbackLanguage.push($preferredLanguage);
|
||||
}
|
||||
}
|
||||
return promise;
|
||||
}();
|
||||
if (!promiseToWaitFor) {
|
||||
determineTranslation(translationId, interpolateParams, interpolationId).then(deferred.resolve, deferred.reject);
|
||||
} else {
|
||||
promiseToWaitFor.then(function () {
|
||||
determineTranslation(translationId, interpolateParams, interpolationId).then(deferred.resolve, deferred.reject);
|
||||
}, deferred.reject);
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
var indexOf = function (array, searchElement) {
|
||||
for (var i = 0, len = array.length; i < len; i++) {
|
||||
if (array[i] === searchElement) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
};
|
||||
var applyNotFoundIndicators = function (translationId) {
|
||||
if ($notFoundIndicatorLeft) {
|
||||
translationId = [
|
||||
$notFoundIndicatorLeft,
|
||||
translationId
|
||||
].join(' ');
|
||||
}
|
||||
if ($notFoundIndicatorRight) {
|
||||
translationId = [
|
||||
translationId,
|
||||
$notFoundIndicatorRight
|
||||
].join(' ');
|
||||
}
|
||||
return translationId;
|
||||
};
|
||||
var useLanguage = function (key) {
|
||||
$uses = key;
|
||||
$rootScope.$emit('$translateChangeSuccess');
|
||||
if ($storageFactory) {
|
||||
Storage.set($translate.storageKey(), $uses);
|
||||
}
|
||||
defaultInterpolator.setLocale($uses);
|
||||
angular.forEach(interpolatorHashMap, function (interpolator, id) {
|
||||
interpolatorHashMap[id].setLocale($uses);
|
||||
});
|
||||
$rootScope.$emit('$translateChangeEnd');
|
||||
};
|
||||
var loadAsync = function (key) {
|
||||
if (!key) {
|
||||
throw 'No language key specified for loading.';
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
$rootScope.$emit('$translateLoadingStart');
|
||||
pendingLoader = true;
|
||||
$injector.get($loaderFactory)(angular.extend($loaderOptions, { key: key })).then(function (data) {
|
||||
var translationTable = {};
|
||||
$rootScope.$emit('$translateLoadingSuccess');
|
||||
if (angular.isArray(data)) {
|
||||
angular.forEach(data, function (table) {
|
||||
angular.extend(translationTable, flatObject(table));
|
||||
});
|
||||
} else {
|
||||
angular.extend(translationTable, flatObject(data));
|
||||
}
|
||||
pendingLoader = false;
|
||||
deferred.resolve({
|
||||
key: key,
|
||||
table: translationTable
|
||||
});
|
||||
$rootScope.$emit('$translateLoadingEnd');
|
||||
}, function (key) {
|
||||
$rootScope.$emit('$translateLoadingError');
|
||||
deferred.reject(key);
|
||||
$rootScope.$emit('$translateLoadingEnd');
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
if ($storageFactory) {
|
||||
Storage = $injector.get($storageFactory);
|
||||
if (!Storage.get || !Storage.set) {
|
||||
throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or set() method!');
|
||||
}
|
||||
}
|
||||
if (angular.isFunction(defaultInterpolator.useSanitizeValueStrategy)) {
|
||||
defaultInterpolator.useSanitizeValueStrategy($interpolationSanitizationStrategy);
|
||||
}
|
||||
if ($interpolatorFactories.length) {
|
||||
angular.forEach($interpolatorFactories, function (interpolatorFactory) {
|
||||
var interpolator = $injector.get(interpolatorFactory);
|
||||
interpolator.setLocale($preferredLanguage || $uses);
|
||||
if (angular.isFunction(interpolator.useSanitizeValueStrategy)) {
|
||||
interpolator.useSanitizeValueStrategy($interpolationSanitizationStrategy);
|
||||
}
|
||||
interpolatorHashMap[interpolator.getInterpolationIdentifier()] = interpolator;
|
||||
});
|
||||
}
|
||||
var getTranslationTable = function (langKey) {
|
||||
var deferred = $q.defer();
|
||||
if ($translationTable.hasOwnProperty(langKey)) {
|
||||
deferred.resolve($translationTable[langKey]);
|
||||
return deferred.promise;
|
||||
} else {
|
||||
langPromises[langKey].then(function (data) {
|
||||
translations(data.key, data.table);
|
||||
deferred.resolve(data.table);
|
||||
}, deferred.reject);
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
var getFallbackTranslation = function (langKey, translationId, interpolateParams, Interpolator) {
|
||||
var deferred = $q.defer();
|
||||
getTranslationTable(langKey).then(function (translationTable) {
|
||||
if (translationTable.hasOwnProperty(translationId)) {
|
||||
Interpolator.setLocale(langKey);
|
||||
deferred.resolve(Interpolator.interpolate(translationTable[translationId], interpolateParams));
|
||||
Interpolator.setLocale($uses);
|
||||
} else {
|
||||
deferred.reject();
|
||||
}
|
||||
}, deferred.reject);
|
||||
return deferred.promise;
|
||||
};
|
||||
var getFallbackTranslationInstant = function (langKey, translationId, interpolateParams, Interpolator) {
|
||||
var result, translationTable = $translationTable[langKey];
|
||||
if (translationTable.hasOwnProperty(translationId)) {
|
||||
Interpolator.setLocale(langKey);
|
||||
result = Interpolator.interpolate(translationTable[translationId], interpolateParams);
|
||||
Interpolator.setLocale($uses);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
var resolveForFallbackLanguage = function (fallbackLanguageIndex, translationId, interpolateParams, Interpolator) {
|
||||
var deferred = $q.defer();
|
||||
if (fallbackLanguageIndex < $fallbackLanguage.length) {
|
||||
var langKey = $fallbackLanguage[fallbackLanguageIndex];
|
||||
getFallbackTranslation(langKey, translationId, interpolateParams, Interpolator).then(function (translation) {
|
||||
deferred.resolve(translation);
|
||||
}, function () {
|
||||
var nextFallbackLanguagePromise = resolveForFallbackLanguage(fallbackLanguageIndex + 1, translationId, interpolateParams, Interpolator);
|
||||
deferred.resolve(nextFallbackLanguagePromise);
|
||||
});
|
||||
} else {
|
||||
deferred.resolve(translationId);
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
var resolveForFallbackLanguageInstant = function (fallbackLanguageIndex, translationId, interpolateParams, Interpolator) {
|
||||
var result;
|
||||
if (fallbackLanguageIndex < $fallbackLanguage.length) {
|
||||
var langKey = $fallbackLanguage[fallbackLanguageIndex];
|
||||
result = getFallbackTranslationInstant(langKey, translationId, interpolateParams, Interpolator);
|
||||
if (!result) {
|
||||
result = resolveForFallbackLanguageInstant(fallbackLanguageIndex + 1, translationId, interpolateParams, Interpolator);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
var fallbackTranslation = function (translationId, interpolateParams, Interpolator) {
|
||||
return resolveForFallbackLanguage(startFallbackIteration > 0 ? startFallbackIteration : fallbackIndex, translationId, interpolateParams, Interpolator);
|
||||
};
|
||||
var fallbackTranslationInstant = function (translationId, interpolateParams, Interpolator) {
|
||||
return resolveForFallbackLanguageInstant(startFallbackIteration > 0 ? startFallbackIteration : fallbackIndex, translationId, interpolateParams, Interpolator);
|
||||
};
|
||||
var determineTranslation = function (translationId, interpolateParams, interpolationId) {
|
||||
var deferred = $q.defer();
|
||||
var table = $uses ? $translationTable[$uses] : $translationTable, Interpolator = interpolationId ? interpolatorHashMap[interpolationId] : defaultInterpolator;
|
||||
if (table && table.hasOwnProperty(translationId)) {
|
||||
var translation = table[translationId];
|
||||
if (translation.substr(0, 2) === '@:') {
|
||||
$translate(translation.substr(2), interpolateParams, interpolationId).then(deferred.resolve, deferred.reject);
|
||||
} else {
|
||||
deferred.resolve(Interpolator.interpolate(translation, interpolateParams));
|
||||
}
|
||||
} else {
|
||||
if ($missingTranslationHandlerFactory && !pendingLoader) {
|
||||
$injector.get($missingTranslationHandlerFactory)(translationId, $uses);
|
||||
}
|
||||
if ($uses && $fallbackLanguage && $fallbackLanguage.length) {
|
||||
fallbackTranslation(translationId, interpolateParams, Interpolator).then(function (translation) {
|
||||
deferred.resolve(translation);
|
||||
}, function (_translationId) {
|
||||
deferred.reject(applyNotFoundIndicators(_translationId));
|
||||
});
|
||||
} else {
|
||||
deferred.reject(applyNotFoundIndicators(translationId));
|
||||
}
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
var determineTranslationInstant = function (translationId, interpolateParams, interpolationId) {
|
||||
var result, table = $uses ? $translationTable[$uses] : $translationTable, Interpolator = interpolationId ? interpolatorHashMap[interpolationId] : defaultInterpolator;
|
||||
if (table && table.hasOwnProperty(translationId)) {
|
||||
var translation = table[translationId];
|
||||
if (translation.substr(0, 2) === '@:') {
|
||||
result = determineTranslationInstant(translation.substr(2), interpolateParams, interpolationId);
|
||||
} else {
|
||||
result = Interpolator.interpolate(translation, interpolateParams);
|
||||
}
|
||||
} else {
|
||||
if ($missingTranslationHandlerFactory && !pendingLoader) {
|
||||
$injector.get($missingTranslationHandlerFactory)(translationId, $uses);
|
||||
}
|
||||
if ($uses && $fallbackLanguage && $fallbackLanguage.length) {
|
||||
fallbackIndex = 0;
|
||||
result = fallbackTranslationInstant(translationId, interpolateParams, Interpolator);
|
||||
} else {
|
||||
result = applyNotFoundIndicators(translationId);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
$translate.preferredLanguage = function () {
|
||||
return $preferredLanguage;
|
||||
};
|
||||
$translate.cloakClassName = function () {
|
||||
return $cloakClassName;
|
||||
};
|
||||
$translate.fallbackLanguage = function (langKey) {
|
||||
if (langKey !== undefined && langKey !== null) {
|
||||
fallbackStack(langKey);
|
||||
if ($loaderFactory) {
|
||||
if ($fallbackLanguage && $fallbackLanguage.length) {
|
||||
for (var i = 0, len = $fallbackLanguage.length; i < len; i++) {
|
||||
if (!langPromises[$fallbackLanguage[i]]) {
|
||||
langPromises[$fallbackLanguage[i]] = loadAsync($fallbackLanguage[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$translate.use($translate.use());
|
||||
}
|
||||
if ($fallbackWasString) {
|
||||
return $fallbackLanguage[0];
|
||||
} else {
|
||||
return $fallbackLanguage;
|
||||
}
|
||||
};
|
||||
$translate.useFallbackLanguage = function (langKey) {
|
||||
if (langKey !== undefined && langKey !== null) {
|
||||
if (!langKey) {
|
||||
startFallbackIteration = 0;
|
||||
} else {
|
||||
var langKeyPosition = indexOf($fallbackLanguage, langKey);
|
||||
if (langKeyPosition > -1) {
|
||||
startFallbackIteration = langKeyPosition;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
$translate.proposedLanguage = function () {
|
||||
return $nextLang;
|
||||
};
|
||||
$translate.storage = function () {
|
||||
return Storage;
|
||||
};
|
||||
$translate.use = function (key) {
|
||||
if (!key) {
|
||||
return $uses;
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
$rootScope.$emit('$translateChangeStart');
|
||||
if (!$translationTable[key] && $loaderFactory) {
|
||||
$nextLang = key;
|
||||
langPromises[key] = loadAsync(key).then(function (translation) {
|
||||
translations(translation.key, translation.table);
|
||||
deferred.resolve(translation.key);
|
||||
if ($nextLang === key) {
|
||||
useLanguage(translation.key);
|
||||
$nextLang = undefined;
|
||||
}
|
||||
}, function (key) {
|
||||
$nextLang = undefined;
|
||||
$rootScope.$emit('$translateChangeError');
|
||||
deferred.reject(key);
|
||||
$rootScope.$emit('$translateChangeEnd');
|
||||
});
|
||||
} else {
|
||||
deferred.resolve(key);
|
||||
useLanguage(key);
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.storageKey = function () {
|
||||
return storageKey();
|
||||
};
|
||||
$translate.isPostCompilingEnabled = function () {
|
||||
return $postCompilingEnabled;
|
||||
};
|
||||
$translate.refresh = function (langKey) {
|
||||
if (!$loaderFactory) {
|
||||
throw new Error('Couldn\'t refresh translation table, no loader registered!');
|
||||
}
|
||||
var deferred = $q.defer();
|
||||
function resolve() {
|
||||
deferred.resolve();
|
||||
$rootScope.$emit('$translateRefreshEnd');
|
||||
}
|
||||
function reject() {
|
||||
deferred.reject();
|
||||
$rootScope.$emit('$translateRefreshEnd');
|
||||
}
|
||||
$rootScope.$emit('$translateRefreshStart');
|
||||
if (!langKey) {
|
||||
var tables = [];
|
||||
if ($fallbackLanguage && $fallbackLanguage.length) {
|
||||
for (var i = 0, len = $fallbackLanguage.length; i < len; i++) {
|
||||
tables.push(loadAsync($fallbackLanguage[i]));
|
||||
}
|
||||
}
|
||||
if ($uses) {
|
||||
tables.push(loadAsync($uses));
|
||||
}
|
||||
$q.all(tables).then(function (tableData) {
|
||||
angular.forEach(tableData, function (data) {
|
||||
if ($translationTable[data.key]) {
|
||||
delete $translationTable[data.key];
|
||||
}
|
||||
translations(data.key, data.table);
|
||||
});
|
||||
if ($uses) {
|
||||
useLanguage($uses);
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
} else if ($translationTable[langKey]) {
|
||||
loadAsync(langKey).then(function (data) {
|
||||
translations(data.key, data.table);
|
||||
if (langKey === $uses) {
|
||||
useLanguage($uses);
|
||||
}
|
||||
resolve();
|
||||
}, reject);
|
||||
} else {
|
||||
reject();
|
||||
}
|
||||
return deferred.promise;
|
||||
};
|
||||
$translate.instant = function (translationId, interpolateParams, interpolationId) {
|
||||
if (typeof translationId === 'undefined' || translationId === '') {
|
||||
return translationId;
|
||||
}
|
||||
translationId = translationId.trim();
|
||||
var result, possibleLangKeys = [];
|
||||
if ($preferredLanguage) {
|
||||
possibleLangKeys.push($preferredLanguage);
|
||||
}
|
||||
if ($uses) {
|
||||
possibleLangKeys.push($uses);
|
||||
}
|
||||
if ($fallbackLanguage && $fallbackLanguage.length) {
|
||||
possibleLangKeys = possibleLangKeys.concat($fallbackLanguage);
|
||||
}
|
||||
for (var i = 0, c = possibleLangKeys.length; i < c; i++) {
|
||||
var possibleLangKey = possibleLangKeys[i];
|
||||
if ($translationTable[possibleLangKey]) {
|
||||
if ($translationTable[possibleLangKey][translationId]) {
|
||||
result = determineTranslationInstant(translationId, interpolateParams, interpolationId);
|
||||
}
|
||||
}
|
||||
if (typeof result !== 'undefined') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!result) {
|
||||
result = translationId;
|
||||
if ($missingTranslationHandlerFactory && !pendingLoader) {
|
||||
$injector.get($missingTranslationHandlerFactory)(translationId, $uses);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
if ($loaderFactory) {
|
||||
if (angular.equals($translationTable, {})) {
|
||||
$translate.use($translate.use());
|
||||
}
|
||||
if ($fallbackLanguage && $fallbackLanguage.length) {
|
||||
for (var i = 0, len = $fallbackLanguage.length; i < len; i++) {
|
||||
langPromises[$fallbackLanguage[i]] = loadAsync($fallbackLanguage[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $translate;
|
||||
}
|
||||
];
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').factory('$translateDefaultInterpolation', [
|
||||
'$interpolate',
|
||||
function ($interpolate) {
|
||||
var $translateInterpolator = {}, $locale, $identifier = 'default', $sanitizeValueStrategy = null, sanitizeValueStrategies = {
|
||||
escaped: function (params) {
|
||||
var result = {};
|
||||
for (var key in params) {
|
||||
if (params.hasOwnProperty(key)) {
|
||||
result[key] = angular.element('<div></div>').text(params[key]).html();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
};
|
||||
var sanitizeParams = function (params) {
|
||||
var result;
|
||||
if (angular.isFunction(sanitizeValueStrategies[$sanitizeValueStrategy])) {
|
||||
result = sanitizeValueStrategies[$sanitizeValueStrategy](params);
|
||||
} else {
|
||||
result = params;
|
||||
}
|
||||
return result;
|
||||
};
|
||||
$translateInterpolator.setLocale = function (locale) {
|
||||
$locale = locale;
|
||||
};
|
||||
$translateInterpolator.getInterpolationIdentifier = function () {
|
||||
return $identifier;
|
||||
};
|
||||
$translateInterpolator.useSanitizeValueStrategy = function (value) {
|
||||
$sanitizeValueStrategy = value;
|
||||
return this;
|
||||
};
|
||||
$translateInterpolator.interpolate = function (string, interpolateParams) {
|
||||
if ($sanitizeValueStrategy) {
|
||||
interpolateParams = sanitizeParams(interpolateParams);
|
||||
}
|
||||
return $interpolate(string)(interpolateParams);
|
||||
};
|
||||
return $translateInterpolator;
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');
|
||||
angular.module('pascalprecht.translate').directive('translate', [
|
||||
'$translate',
|
||||
'$q',
|
||||
'$interpolate',
|
||||
'$compile',
|
||||
'$parse',
|
||||
'$rootScope',
|
||||
function ($translate, $q, $interpolate, $compile, $parse, $rootScope) {
|
||||
return {
|
||||
restrict: 'AE',
|
||||
scope: true,
|
||||
compile: function (tElement, tAttr) {
|
||||
var translateValuesExist = tAttr.translateValues ? tAttr.translateValues : undefined;
|
||||
var translateInterpolation = tAttr.translateInterpolation ? tAttr.translateInterpolation : undefined;
|
||||
var translateValueExist = tElement[0].outerHTML.match(/translate-value-+/i);
|
||||
return function linkFn(scope, iElement, iAttr) {
|
||||
scope.interpolateParams = {};
|
||||
iAttr.$observe('translate', function (translationId) {
|
||||
if (angular.equals(translationId, '') || !angular.isDefined(translationId)) {
|
||||
scope.translationId = $interpolate(iElement.text().replace(/^\s+|\s+$/g, ''))(scope.$parent);
|
||||
} else {
|
||||
scope.translationId = translationId;
|
||||
}
|
||||
});
|
||||
if (translateValuesExist) {
|
||||
iAttr.$observe('translateValues', function (interpolateParams) {
|
||||
if (interpolateParams) {
|
||||
scope.$parent.$watch(function () {
|
||||
angular.extend(scope.interpolateParams, $parse(interpolateParams)(scope.$parent));
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
if (translateValueExist) {
|
||||
var fn = function (attrName) {
|
||||
iAttr.$observe(attrName, function (value) {
|
||||
scope.interpolateParams[angular.lowercase(attrName.substr(14))] = value;
|
||||
});
|
||||
};
|
||||
for (var attr in iAttr) {
|
||||
if (iAttr.hasOwnProperty(attr) && attr.substr(0, 14) === 'translateValue' && attr !== 'translateValues') {
|
||||
fn(attr);
|
||||
}
|
||||
}
|
||||
}
|
||||
var applyElementContent = function (value, scope) {
|
||||
iElement.html(value);
|
||||
var globallyEnabled = $translate.isPostCompilingEnabled();
|
||||
var locallyDefined = typeof tAttr.translateCompile !== 'undefined';
|
||||
var locallyEnabled = locallyDefined && tAttr.translateCompile !== 'false';
|
||||
if (globallyEnabled && !locallyDefined || locallyEnabled) {
|
||||
$compile(iElement.contents())(scope);
|
||||
}
|
||||
};
|
||||
var updateTranslationFn = function () {
|
||||
if (!translateValuesExist && !translateValueExist) {
|
||||
return function () {
|
||||
var unwatch = scope.$watch('translationId', function (value) {
|
||||
if (scope.translationId && value) {
|
||||
$translate(value, {}, translateInterpolation).then(function (translation) {
|
||||
applyElementContent(translation, scope);
|
||||
unwatch();
|
||||
}, function (translationId) {
|
||||
applyElementContent(translationId, scope);
|
||||
unwatch();
|
||||
});
|
||||
}
|
||||
}, true);
|
||||
};
|
||||
} else {
|
||||
return function () {
|
||||
scope.$watch('interpolateParams', function (value) {
|
||||
if (scope.translationId && value) {
|
||||
$translate(scope.translationId, value, translateInterpolation).then(function (translation) {
|
||||
applyElementContent(translation, scope);
|
||||
}, function (translationId) {
|
||||
applyElementContent(translationId, scope);
|
||||
});
|
||||
}
|
||||
}, true);
|
||||
};
|
||||
}
|
||||
}();
|
||||
var unbind = $rootScope.$on('$translateChangeSuccess', updateTranslationFn);
|
||||
updateTranslationFn();
|
||||
scope.$on('$destroy', unbind);
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').directive('translateCloak', [
|
||||
'$rootScope',
|
||||
'$translate',
|
||||
function ($rootScope, $translate) {
|
||||
return {
|
||||
compile: function (tElement) {
|
||||
$rootScope.$on('$translateLoadingSuccess', function () {
|
||||
tElement.removeClass($translate.cloakClassName());
|
||||
});
|
||||
tElement.addClass($translate.cloakClassName());
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
angular.module('pascalprecht.translate').filter('translate', [
|
||||
'$parse',
|
||||
'$translate',
|
||||
function ($parse, $translate) {
|
||||
return function (translationId, interpolateParams, interpolation) {
|
||||
if (!angular.isObject(interpolateParams)) {
|
||||
interpolateParams = $parse(interpolateParams)();
|
||||
}
|
||||
return $translate.instant(translationId, interpolateParams, interpolation);
|
||||
};
|
||||
}
|
||||
]);
|
||||
+1
File diff suppressed because one or more lines are too long
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"name": "bower-angular-translate",
|
||||
"filename": "angular-translate.min.js",
|
||||
"description": "i18n for your Angular apps, made easy",
|
||||
"version": "2.0.1",
|
||||
"homepage": "http://angular-translate.github.io",
|
||||
"keywords": [
|
||||
"framework",
|
||||
"mvc",
|
||||
"AngularJS",
|
||||
"angular",
|
||||
"angular.js",
|
||||
"angular-translate"
|
||||
],
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Pascal Precht"
|
||||
},
|
||||
{
|
||||
"name": "Max Prychynenko"
|
||||
},
|
||||
{
|
||||
"name": "Jan Philipp"
|
||||
}
|
||||
],
|
||||
"repositories": [{
|
||||
"type": "git",
|
||||
"url": "https://github.com/angular-translate/bower-angular-translate"
|
||||
}],
|
||||
"bugs": "https://github.com/angular-translate/bower-angular-translate/issues",
|
||||
"licenses": [
|
||||
{
|
||||
"type": "MIT",
|
||||
"url": "https://github.com/angular-translate/bower-angular-translate/blob/master/LICENSE"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user