多个AngularJS货币格式,使用i18n(Euro,DE)

时间:2016-04-18 08:28:50

标签: javascript angularjs gruntjs internationalization currency

我的角度应用需要以不同格式显示货币,例如:$2.105,10€ - +不同分隔符后的欧元符号 - 可以通过包含i18n {来实现{1}}变体。

问题是我必须根据JSON的区域设置值显示格式,该值在应用程序初始化后发生,因此无论JSON说什么,货币仍然是默认值,并且不存在似乎是一种显示货币的方式 - angular-locale_de-de.js + $12,000表示您只能使用一种语言环境。

通常的做法是在索引文件中使用i18n docs,我的应用程序在ajax响应之前不知道区域设置并使用angular-locale- + $localevar +.js构建应用程序。我该如何解决这个问题?

我可以使用的任何替代库吗?对于角度如何处理多种格式感到非常沮丧。

这是一个小提琴http://jsfiddle.net/awsd2s5r/

1 个答案:

答案 0 :(得分:1)

如果您只处理一些区域设置并且不介意开销,只需包含所需的每个区域设置文件,并在收到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;
        };
    }]);

})();