Rails 4用不同的语言解析日期

Alm*_*ron 6 internationalization rails-i18n ruby-on-rails-4

我有一个text_field :birthday_line在我的用户表单中,我需要解析用户的birthday属性.所以我在User课堂上做这样的事.

attr_accessor :birthday_line
before_save :set_birthday

def set_birthday
  self.birthday = Date.strptime(birthday_line, I18n.translate("date.formats.default")
end
Run Code Online (Sandbox Code Playgroud)

但问题是,由于某种原因,它给了我一个错误,说Invalid date我何时尝试传入一个27 ?????? 1987 ?.应该被解析的字符串1987-01-27.我的格式和月份名称config/locales/ru.yml

ru:
  date:
    formats:
      default: "%d %B %Y ?."
    month_names: [~, ??????, ???????, ?????, ??????, ???, ????, ????, ???????, ????????, ???????, ??????, ???????]
Run Code Online (Sandbox Code Playgroud)

似乎是正确的.

Date.parse 也没有帮助,它只是解析日期编号(27)并将月份和年份放到今天的日期(因此它将是2013年9月27日而不是1987年1月27日).

mmi*_*ike 3

我遇到了同样的问题以及我可以建议的内容:

\n\n
string_with_cyrillic_date = \'27 \xd0\xaf\xd0\xbd\xd0\xb2\xd0\xb0\xd1\x80\xd1\x8f 1987\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

1)像这样创建数组的数组

\n\n
months = [["\xd1\x8f\xd0\xbd\xd0\xb2\xd0\xb0\xd1\x80\xd1\x8f", "Jan"], ["\xd1\x84\xd0\xb5\xd0\xb2\xd1\x80\xd0\xb0\xd0\xbb\xd1\x8f", "Feb"], ["\xd0\xbc\xd0\xb0\xd1\x80\xd1\x82\xd0\xb0", "Mar"], ["\xd0\xb0\xd0\xbf\xd1\x80\xd0\xb5\xd0\xbb\xd1\x8f", "Apr"], ["\xd0\xbc\xd0\xb0\xd1\x8f", "May"], ["\xd0\xb8\xd1\x8e\xd0\xbd\xd1\x8f", "Jun"], ["\xd0\xb8\xd1\x8e\xd0\xbb\xd1\x8f", "Jul"], ["\xd0\xb0\xd0\xb2\xd0\xb3\xd1\x83\xd1\x81\xd1\x82\xd0\xb0", "Aug"], ["\xd1\x81\xd0\xb5\xd0\xbd\xd1\x82\xd1\x8f\xd0\xb1\xd1\x80\xd1\x8f", "Sep"], ["\xd0\xbe\xd0\xba\xd1\x82\xd1\x8f\xd0\xb1\xd1\x80\xd1\x8f", "Oct"], ["\xd0\xbd\xd0\xbe\xd1\x8f\xd0\xb1\xd1\x80\xd1\x8f", "Nov"], ["\xd0\xb4\xd0\xb5\xd0\xba\xd0\xb0\xd0\xb1\xd1\x80\xd1\x8f", "Dec"]]\n
Run Code Online (Sandbox Code Playgroud)\n\n

2)现在你可以迭代这个并找到你的西里尔月份:

\n\n
months.each do |cyrillic_month, latin_month|\n  if string_with_cyrillic_date.match cyrillic_month      \n    DateTime.parse string_with_cyrillic_date.gsub!(/#{cyrillic_month}/, latin_month) \n  end\nend\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在您将收到您期望的日期

\n\n
27 Jan 1987\n
Run Code Online (Sandbox Code Playgroud)\n