d3.js的本地化(d3.locale使用示例)

时间:2014-06-24 11:35:11

标签: javascript d3.js

我试图在我的应用中使用d3.locale()来显示俄语月份名称。 http://jsfiddle.net/j2feJ/2/ 另外,我需要shortMonths变量为英文,因为它们在我的数据库中是英文的。

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"]
}

但显示仍然是英文。我使用它错了吗?

1 个答案:

答案 0 :(得分:21)

调用d3.locale()并不会改变d3的内部工作方式,它只会创建并返回一个本地化对象。您需要捕获此返回值并将其存储在变量中,以便以后可以使用它。给定您在示例代码中创建的对象,您可以这样做:

var RU = d3.locale(ru_RU);

然后,当您需要本地化值时,必须明确调用它。在您的情况下,您希望将完整的月份名称显示为x轴标签。

为此,您可以在x轴上添加.tickFormat(),并指定格式应该是完整月份名称的本地化版本。

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

locale.timeFormat()等同于d3.time.format(),但它使用您创建的区域设置而不是默认为en_US。在这种情况下,locale是我们之前创建的变量RU

以下是更新后的JSFiddle

请记住,每次需要本地化字符串或值时,都需要显式调用它。使用locale.numberFormat()代替d3.format()locale.timeFormat()代替d3.time.format(),其中locale是使用d3.locale()创建的本地化对象。希望有所帮助。