Angularjs指令货币格式根据选择的翻译语言



我正在用货币格式格式化a数字,用小数和逗号/点标记千位。

app.directive('format', ['$filter', function ($filter) {
    return {
        require: '?ngModel',
        link: function (scope, elem, attrs, ctrl) {
            if (!ctrl) return;
            ctrl.$formatters.unshift(function (a) {
                return $filter(attrs.format)(ctrl.$modelValue)
            });
            elem.bind('blur', function(event) {
                var plainNumber = elem.val().replace(/[^d|-+|.+]/g, '');
                elem.val($filter(attrs.format)(plainNumber));
            });
        }
    };
}]);

我的应用程序有两种语言界面,德语和英语,它们在与货币相关的数字符号方面有所不同。
我如何考虑用户选择的语言,使格式适合用户的选择?

这是我的语言翻译代码:

app.config(['$translateProvider',
function ($translateProvider) {    
    $translateProvider.useStaticFilesLoader({
        prefix: 'assets/i18n/',
        suffix: '.json'
    });    
    $translateProvider.preferredLanguage('en');    
    $translateProvider.useLocalStorage();
}]);

主控制器:

$scope.language = {
    listIsOpen: false,
    available: {
        'en': 'English',
        'de_DE': 'Deutsch'
    },
    init: function () {
        var proposedLanguage = $translate.proposedLanguage() || $translate.use();
        var preferredLanguage = $translate.preferredLanguage();
        $scope.language.selected = $scope.language.available[(proposedLanguage || preferredLanguage)];
    },
    set: function (localeId, ev) {
        $translate.use(localeId);
        $scope.language.selected = $scope.language.available[localeId];
        $scope.language.listIsOpen = !$scope.language.listIsOpen;
    }
};
$rootScope.$on('$translateChangeSuccess', function () {
    var lang = $translate.use();
    $http.get('assets/i18n/'+lang+'.json').success(function(data) {
        $rootScope.i18nTranslationJSON = data;
        $rootScope.$emit('myTranslationsLoaded');
    });
});
$scope.language.init();

在尝试重新发明轮子之前,您是否看过本机$locale服务?您可以使用本地过滤器根据您想使用的区域设置格式化货币、日期和数字。

要在不重新加载页面的情况下动态地更改语言,可以使用angular-dynamic-locale模块。

最新更新