10

我们正在尝试让 AngularJS 国际化<input type='number' />价值观。

我们已经包含了本地化文件(例如angular-locale_it-it.js),但仍然使用英语语言环境显示这些值。

这是一个问题,因为我们的后端(和管理)期望数值在用户的区域设置中,并且接收123.45而不是123,45导致错误。

您可以在 jsFiddle 上找到一个示例。

它适用于 Chrome 27

Chrome 中结果的屏幕截图

但它不适用于 Firefox 21 和 Internet Explorer 10。

Firefox 中结果的屏幕截图

4

3 回答 3

3

这可能不是您想要的答案,但可能对您有所帮助:

JsBin:http: //jsbin.com/iyulaj/1/

使用指令,您可以获取输入数据,对其进行解析,然后将其放入$scope变量中。请参阅:http ://docs.angularjs.org/api/ng.directive:ngModel.NgModelController ($parsers$formatters。我取自:Using angularjs filter in input element)。

该指令可以搜索逗号并将其替换为点。它可能看起来像这样:

angular.module('MyModule').directive('numberinput', function () {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function(scope, element, attrs, ngModelController) {

            ngModelController.$parsers.push(function(data) {
                //convert data from view format to model format
                return data.replace(',', "."); //converted
            });

            ngModelController.$formatters.push(function(data) {
                //convert data from model format to view format
                return data.replace('.', ","); //converted
            });

            // http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController

        }
    };
});

输入字段:

<input ng-model='value' type='text' numberinput='' />

另请注意,输入现在是一个文本字段。看看这个:http: //jsbin.com/iyurol/1/

输入是一个数字字段。但是输入11,5它会输出ùndefined(请注意,我住在德国,我们使用的是逗号符号)。因此,如果数字不是点符号,浏览器不会正确“解析”数字,即使您居住在使用逗号符号的区域......

请纠正我,如果有什么问题;)

于 2013-06-28T16:55:06.447 回答
2

它可能与角度无关。恕我直言,应该由浏览器提供。它应该由lang属性驱动:

<!DOCTYPE html>
<html lang="it">
...

在 HTML5 数字输入中查看更多详细信息– 逗号和句点作为小数点

于 2015-05-26T13:14:10.510 回答
0

由于要格式化的数据类型通常是数字,我们不应该在调用replace()之前将数字转换为字符串吗?当模型数据具有数值时出现错误。以下效果更好:

      ngModelController.$formatters.push(function(data) {
          //convert data from model format to view format
          return (''+data).replace('.', ","); //converted
      });
于 2015-02-07T10:04:55.107 回答