2014-06-24 24 views
9

Tôi đang cố gắng sử dụng d3.locale() trong ứng dụng của mình để hiển thị tên tiếng Nga trong tháng. http://jsfiddle.net/j2feJ/2/ Ngoài ra, tôi cần shortMonths biến là bằng tiếng Anh, vì chúng bằng tiếng Anh trong cơ sở dữ liệu của tôi.Bản địa hóa của d3.js (ví dụ d3.locale về cách sử dụng)

var ru_RU = { 
    "decimal": ",", 
     "thousands": "\xa0", 
     "grouping": [3], 
     "currency": ["", " руб."], 
     "dateTime": "%A, %e %B %Y г. %X", 
     "date": "%d.%m.%Y", 
     "time": "%H:%M:%S", 
     "periods": ["AM", "PM"], 
     "days": ["воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота"], 
     "shortDays": ["вс", "пн", "вт", "ср", "чт", "пт", "сб"], 
     "months": ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"], 
     "shortMonths": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] 
} 

Nhưng hiển thị vẫn bằng tiếng Anh. Tôi có sử dụng sai không?

Trả lời

20

Gọi d3.locale() không thay đổi hoạt động bên trong của d3, nó chỉ tạo và trả về một đối tượng địa phương hóa. Bạn cần phải nắm bắt giá trị trả lại này và lưu trữ nó trong một biến để bạn có thể sử dụng nó sau này. Căn cứ vào đối tượng mà bạn đã tạo trong mã ví dụ của bạn, bạn có thể làm điều đó như thế này:

var RU = d3.locale(ru_RU); 

Sau đó, khi bạn cần một giá trị có tính cục bộ, bạn phải gọi cho nó một cách rõ ràng. Trong trường hợp của bạn, bạn muốn tên tháng đầy đủ được hiển thị dưới dạng nhãn trục x.

Để thực hiện việc này, bạn có thể thêm .tickFormat() vào trục x của mình và chỉ định định dạng phải là phiên bản địa hoá của tên tháng đầy đủ.

var xAxis = d3.svg.axis() 
    .scale(x) 
    .orient("bottom") 
    .ticks(5) 
    .tickPadding(8) 
    .tickFormat(RU.timeFormat("%B")); 

locale.timeFormat() tương đương với d3.time.format(), ngoại trừ việc nó sử dụng ngôn ngữ mà bạn đã tạo thay vì mặc định cho en_US. Trong trường hợp này locale là biến số RU mà chúng tôi đã tạo trước đó.

Đây là cập nhật JSFiddle.

Hãy nhớ rằng, mỗi lần bạn muốn có một chuỗi hoặc giá trị được bản địa hóa, bạn cần phải gọi cho nó một cách rõ ràng. Sử dụng locale.numberFormat() thay cho và locale.timeFormat() thay cho d3.time.format(), trong đó locale là đối tượng địa phương hóa được tạo với d3.locale(). Hy vọng rằng sẽ giúp.

+0

có cách nào để sử dụng các tệp có chứa dữ liệu cục bộ như các tệp đó và tải chúng https://app.timersolutions.com/js/d3/src/locale/? –