我试图在我的应用中使用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"]
}
但显示仍然是英文。我使用它错了吗?
答案 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()
创建的本地化对象。希望有所帮助。