我已经在 Ruby on Rails 中配置了一个带有西班牙语翻译的应用程序。
现在我需要解析一个翻译后的日期,例如:
Jueves,2012 年 11 月 22 日
我正在尝试这样做:
Date.strptime('Jueves, 22 de Noviembre, 2012', '%A, %e de %B, %Y')
但它会引发invalid date
错误。
我该怎么做?
我已经在 Ruby on Rails 中配置了一个带有西班牙语翻译的应用程序。
现在我需要解析一个翻译后的日期,例如:
Jueves,2012 年 11 月 22 日
我正在尝试这样做:
Date.strptime('Jueves, 22 de Noviembre, 2012', '%A, %e de %B, %Y')
但它会引发invalid date
错误。
我该怎么做?
Date::parse
应该懂西班牙语。但是,这de
似乎使解析器关闭。如果你能把它变成这种格式,这将起作用
Date.parse "Jueves, 22 Noviembre, 2012"
=> Thu, 22 Nov 2012
我有一个非常相似的问题,我写了一个 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 …>
您可以部分或全部重新定义日期部分和格式的匹配器,全局或仅针对单个解析器实例(以保留您的全局设置),并使用正则表达式的所有功能。自述文件和源代码中有更多示例。希望你会发现这个库很有用。
所以,答案是:至少现在是不可能的。
让它工作的唯一方法是在客户端使用 javascript,并在将字段发送到服务器之前将格式转换为另一种格式。然后 Rails 解析它不会有任何问题。