2

我已经在 Ruby on Rails 中配置了一个带有西班牙语翻译的应用程序。

现在我需要解析一个翻译后的日期,例如:

Jueves,2012 年 11 月 22 日

我正在尝试这样做:

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

但它会引发invalid date错误。

我该怎么做?

4

3 回答 3

5

Date::parse应该懂西班牙语。但是,这de似乎使解析器关闭。如果你能把它变成这种格式,这将起作用

Date.parse "Jueves, 22 Noviembre, 2012"
=> Thu, 22 Nov 2012
于 2012-08-22T00:54:51.027 回答
2

我有一个非常相似的问题,我写了一个 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 …&gt;

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

于 2020-07-29T14:42:11.477 回答
-1

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

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

于 2012-11-16T15:01:34.577 回答