2013-06-21 15 views
10

Chúng tôi đang cố gắng để AngularJS quốc tế hóa các giá trị <input type='number' />.Có thể có AngularJS quốc tế hóa đầu vào số không?

Chúng tôi đã bao gồm tệp bản địa hóa (ví dụ: angular-locale_it-it.js), nhưng các giá trị vẫn được hiển thị bằng ngôn ngữ tiếng Anh.

Đây là vấn đề vì back-end (và quản lý) của chúng tôi dự kiến ​​giá trị số sẽ nằm trong miền địa phương của người dùng và nhận được 123.45 thay vì 123,45 gây ra lỗi.

Bạn có thể tìm thấy ví dụ on jsFiddle.

Nó hoạt động trong Chrome 27

Screenshot of the result in Chrome

nhưng nó không làm việc trong Firefox 21 và Internet Explorer 10.

Screenshot of the result in Firefox

+3

Tôi đang chạy vào cùng một vấn đề cho Đức tệ định dạng đầu vào. – Lucas

Trả lời

3

Điều này có thể không phải là câu trả lời mà bạn muốn, nhưng có lẽ nó giúp bạn một chút:

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

Sử dụng chỉ thị, bạn có thể lấy dữ liệu của đầu vào, phân tích cú pháp và sau đó đặt nó vào biến số $scope. Vui lòng xem: http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController ($parsers$formatters. Tôi lấy nó từ: Using angularjs filter in input element).

Chỉ thị có thể tìm kiếm dấu phẩy và thay thế bằng dấu chấm. Nó có thể trông như thế này:

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 

     } 
    }; 
}); 

Các lĩnh vực đầu vào:

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

Cũng lưu ý rằng các đầu vào hiện nay là một trường văn bản. Hãy xem điều này: http://jsbin.com/iyurol/1/

Dữ liệu nhập là trường số. Nhưng gõ 11,5 và nó sẽ xuất ùndefined (lưu ý rằng tôi sống ở Đức và chúng tôi đang sử dụng dấu phẩy). Vì vậy, trình duyệt không 'phân tích cú pháp' số chính xác nếu nó không có ký hiệu chấm, ngay cả khi bạn sống ở các vùng có ký hiệu bằng dấu phẩy ...

Hãy sửa tôi, nếu có điều gì sai về điều đó;)

0

Vì loại dữ liệu được định dạng thường là số nên chúng tôi không chuyển đổi số thành chuỗi trước khi gọi thay thế()? Tôi gặp lỗi khi dữ liệu mô hình có giá trị bằng số. Các công trình sau hoạt động tốt hơn:

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

Nó có thể không liên quan đến góc cạnh. IMHO sẽ được trình duyệt cung cấp. Nó nên được thúc đẩy bởi các thuộc tính lang:

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

Xem thêm chi tiết tại HTML5 number inputs – Comma and period as decimal marks

+0

Thật không may (như chúng tôi mong đợi) điều này không làm việc với IE11. – hgoebl

Các vấn đề liên quan