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日).
我遇到了同样的问题以及我可以建议的内容:
\n\nstring_with_cyrillic_date = \'27 \xd0\xaf\xd0\xbd\xd0\xb2\xd0\xb0\xd1\x80\xd1\x8f 1987\'\nRun Code Online (Sandbox Code Playgroud)\n\n1)像这样创建数组的数组
\n\nmonths = [["\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"]]\nRun Code Online (Sandbox Code Playgroud)\n\n2)现在你可以迭代这个并找到你的西里尔月份:
\n\nmonths.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\nRun Code Online (Sandbox Code Playgroud)\n\n现在您将收到您期望的日期
\n\n27 Jan 1987\nRun Code Online (Sandbox Code Playgroud)\n