使用I18n和咖啡脚本翻译fullcalendar

时间:2013-08-14 16:32:03

标签: ruby-on-rails ruby internationalization coffeescript fullcalendar

我在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'

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

1 个答案:

答案 0 :(得分:2)

问题是CoffeeScript如何在属性初始化的上下文中处理后缀if。一个简短的例子可以帮助;鉴于此:

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

你得到this 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')]