如何在Ruby on Rails中解析翻译日期?

时间:2012-08-21 22:33:54

标签: ruby-on-rails internationalization

我已经在Ruby on Rails中配置了一个应用程序,并且翻译成西班牙语。

现在我需要解析翻译日期,例如:

  

Jueves,12 de Noviembre del 2012

我试图这样做:

Date.strptime('Jueves, 22 de Noviembre, 2012', '%A, %e de %B, %Y')

但它会引发invalid date错误。

我该怎么做?

3 个答案:

答案 0 :(得分:5)

Date::parse应该了解西班牙语。但是,de似乎抛弃了解析器。如果你能把它变成这种格式,这将有效

Date.parse "Jueves, 22 Noviembre, 2012"
=> Thu, 22 Nov 2012

答案 1 :(得分:1)

我有一个非常类似的问题,我写了一个gem专门用于解析任何非英语文本日期(使用公历),它称为Quando。 gem自述文件非常有用,并提供了代码示例,但是总而言之,这是这样的:

require 'quando'

Quando.configure do |c|
  # First, tell the library how to identify Spanish months in your dates:
  c.jan = /enero/i
  c.feb = /febrero/i
  c.mar = /marzo/i
  c.apr = /abril/i
  c.may = /mayo/i
  c.jun = /junio/i
  c.jul = /julio/i
  c.aug = /agosto/i
  c.sep = /septiembre/i
  c.oct = /octubre/i
  c.nov = /noviembre/i
  c.dec = /diciembre/i

  # Then, define pattern matchers for different date variations that you need to parse.
  # c.day is a predefined regexp that matches numbers from 1 to 31;
  # c.month_txt is a regexp that combines all month names that you previously defined;
  # c.year is a predefined regexp that matches 4-digit numbers;
  # c.dlm matches date parts separators, like . , - / etc. See readme for more information.
  c.formats = [
    /#{c.day} \s #{c.month_txt} ,\s #{c.year} $/xi, # matches "22 Mayo, 2012" or similar
    /#{c.year} - #{c.month_txt} - #{c.day}/xi, # matches "2012-Mayo-22" or similar
    # Add more matchers as needed. The higher in the order take preference.
  ]
end

# Then parse the date:
Quando.parse('Jueves, 22 Noviembre, 2012') # => #<Date: 2012-11-22 …>

您可以全局地或仅针对单个解析器实例重新定义日期部分和格式的匹配器,以部分或全部地定义匹配器(以保留全局设置),并使用正则表达式的所有功能。 自述文件和源代码中还有更多示例。希望您会发现该库有用。

答案 2 :(得分:-1)

所以,答案是:这是不可能的,至少现在是这样。

让它工作的唯一方法是在客户端使用javascript,并在将字段发送到服务器之前将格式转换为另一种格式。然后Rails解析它就不会有任何问题。