多种 AngularJS 货币格式,使用 i18n(欧元、德国)
Multiple AngularJS currency formats, using i18n (Euro, DE)
我的 angular 应用程序需要以不同格式显示货币,例如:$
、£
、2.105,10€
- 欧元符号 + 不同的分隔符 - 可以是通过包含 i18n angular-locale_de-de.js
变体来实现。
问题是我必须根据 JSON 的语言环境值显示格式,这在应用程序初始化后发生,因此无论 JSON 是什么,货币仍然是默认值说并且似乎没有办法将货币显示为 - ,000
+ i18n docs
表示您只能使用一种语言环境。
一个常见的做法是在索引文件中使用 angular-locale- + $localevar +.js
,我的应用程序直到 ajax 响应才知道语言环境并使用 grunt
来构建应用程序.我该如何解决这个问题?
我可以使用任何替代库吗?对 angular 处理多种格式的难度感到非常沮丧。
这是一个fiddlehttp://jsfiddle.net/awsd2s5r/
如果您只处理一些语言环境并且不介意开销,只需包含所需的每个语言环境文件,并在收到 ajax 响应后使用插件 angular-dynamic-locale 重新加载语言做类似的事情:
tmhDynamicLocale.set(ajax_reply.locale)
如果您真的很关心性能,您还可以使用像这样的过滤器动态加载所需的语言环境:
(function () {
'use strict';
angular.module('app.filter').filter('loadScript', [ '$q', function($q) {
var loaded = [];
return function get(link) {
if (loaded.indexOf(link) !== -1)
return {};
loaded.push(link);
var deferred = $q.defer();
var s = document.createElement('script');
s.type = 'text/javascript';
s.src = link;
s.async = true;
s.onreadystatechange = s.onload = function() {
var state = s.readyState;
if (!state)
deferred.resolve();
else
deferred.reject();
};
document.body.appendChild(s);
return deferred.promise;
};
}]);
})();
我的 angular 应用程序需要以不同格式显示货币,例如:$
、£
、2.105,10€
- 欧元符号 + 不同的分隔符 - 可以是通过包含 i18n angular-locale_de-de.js
变体来实现。
问题是我必须根据 JSON 的语言环境值显示格式,这在应用程序初始化后发生,因此无论 JSON 是什么,货币仍然是默认值说并且似乎没有办法将货币显示为 - ,000
+ i18n docs
表示您只能使用一种语言环境。
一个常见的做法是在索引文件中使用 angular-locale- + $localevar +.js
,我的应用程序直到 ajax 响应才知道语言环境并使用 grunt
来构建应用程序.我该如何解决这个问题?
我可以使用任何替代库吗?对 angular 处理多种格式的难度感到非常沮丧。
这是一个fiddlehttp://jsfiddle.net/awsd2s5r/
如果您只处理一些语言环境并且不介意开销,只需包含所需的每个语言环境文件,并在收到 ajax 响应后使用插件 angular-dynamic-locale 重新加载语言做类似的事情:
tmhDynamicLocale.set(ajax_reply.locale)
如果您真的很关心性能,您还可以使用像这样的过滤器动态加载所需的语言环境:
(function () {
'use strict';
angular.module('app.filter').filter('loadScript', [ '$q', function($q) {
var loaded = [];
return function get(link) {
if (loaded.indexOf(link) !== -1)
return {};
loaded.push(link);
var deferred = $q.defer();
var s = document.createElement('script');
s.type = 'text/javascript';
s.src = link;
s.async = true;
s.onreadystatechange = s.onload = function() {
var state = s.readyState;
if (!state)
deferred.resolve();
else
deferred.reject();
};
document.body.appendChild(s);
return deferred.promise;
};
}]);
})();