使用I18n和coffee脚本翻译完整日历



我在我的Ruby-On_Rails应用程序中使用fullcalendar。我想把它国际化。在我的咖啡脚本中,我有:

monthNames: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'] if $('#calendar').data('url') == 'es'

这非常适合英语和西班牙语。但如果我添加对第三种语言的支持,比如:

monthNames: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'] if $('#calendar').data('url') == 'es'
monthNames:['janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobre','novembre','décembre'] if $('#calendar').data('url') == 'fr'

然后它将适用于英语和法语,但不适用于西班牙语(默认为英语)。我是咖啡剧本的新手。

问题是CoffeeScript如何在属性初始化的上下文中处理后缀if。一个简短的例子应该会有所帮助;给定:

o =
  a: 6  if(x)
  a: 11 if(y)

你会得到这个JavaScript:

var o;
o = {
  a: x ? 6 : void 0,
  a: y ? 11 : void 0
};

但是在一个对象中不能有重复的关键点,所以最终会得到最后一个关键点。结果是,你实际上只是在说:

o =
  a: 11 if(y)

以一种复杂的方式。在您的情况下,无论如何都将使用法语条件中的值(因为它是最后一个),因此月份名称最终为undefined

您应该能够通过将月份名称移动到一个按语言索引的单独对象来解决您的问题:

monthsInLang =
  es: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']
  fr: ['janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobre','novembre','décembre']
  # Any others you want...

然后像这样设置你的monthNames

monthNames: monthsInLang[$('#calendar').data('url')]

最新更新