【问题标题】:Translating fullcalendar using I18n and coffee script使用 I18n 和咖啡脚本翻译 fullcalendar
【发布时间】:2013-08-16 17:38:50
【问题描述】:

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

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'

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

【问题讨论】:

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


    【解决方案1】:

    问题在于 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')]
    

    【讨论】:

    • 这就像一个魅力。感谢您的帮助,这真的为我在咖啡脚本上苦苦挣扎时节省了很多时间。
    • 不客气。在您刚开始时,使用coffeescript.orgTRY COFFEESCRIPT 工具非常有用。
    猜你喜欢
    • 1970-01-01
    • 2017-01-28
    • 2011-06-30
    • 1970-01-01
    • 2013-06-26
    • 2013-02-04
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    相关资源
    最近更新 更多