解析使用Ruby意大利日期(Parse Italian Date with Ruby)

2019-09-21 12:23发布

我想用Date.parse,但它并没有与意大利月份名称的工作!

Date.parse “1991年8月26日”=>孙,2009年7月26日

有什么方法吗?

Answer 1:

所有我能想出是差不多的schnaader的想法:让之间的映射MONTHNAMES ,等等,然后遍历映射,做gsub 。 那是:

english_to_italian = {
  'english' => 'italian',
  ...
  'august' => 'agosto',
  ...
}

english_to_italian.each do |en, it|
  date_string.gsub!(/\b#{en}\b/i, it)
end

date = Date.parse(date_string)

Date.italy (同Date::ITALY ,我认为)方法值得指出的是,万一有一些我不知道的日历差异。

真的,我很惊讶,我无法找到此的通用解决方案。 也许有Rails的,可能做一些国际化的模块?

UPDATE:这可能让你更接近,但它并不像它会做的一切: http://github.com/rafaelrosafu/i18n_localize_core/tree/master



Answer 2:

嗯,你可以使用字符串替换例程或正则表达式来月转换成英文翻译,之后调用Date.parse。 毕竟,你只需要更换12倍可能的值,还是有更复杂的字符串,也?

请注意,在Date类不同的东西,可以帮助你在这里,例如常数MonthNames中和ABBR_MONTHNAMES包含英文月份名称及其缩略语。

简单的示例代码只是为了说明我的意思:

# Note that you perhaps might want to
# convert input strings to lowercase
myString = "26 agosto 1991" 

# replace italian month names
myString.gsub("...", "januar")
...
myString.gsub("agosto", "august")
...
myString.gsub("...", "december")

# now it should parse correctly
Date.parse(myString)


Answer 3:

另一企图在正在修建https://github.com/ZenCocoon/I18n-date-parser的目标是支持你的I18n与工作任何语言。

仍然面临着一个奇怪的问题,但会到那里;-)



文章来源: Parse Italian Date with Ruby