Rails:如何使Date strftime意识到默认语言环境?

69

我的默认语言环境设置在environment.rb中,设为德语(de)。

我也看到所有的错误消息都是用德语显示的,因此服务器已经选取了这个语言环境。但是当我尝试使用strftime打印日期时,出现了以下问题:

some_date.strftime('%B, %y')

它打印出英文日期(January, 11),而非预期的德文日期(Januar, 11)。

如何根据默认语言环境打印日期?

3个回答

135

使用l方法(别名为localize)代替原始的strftime方法,像这样:

l(date, format: '%B %d, in the year %Y')

更多信息请点击此处

您还可以定义“命名”格式,其中一些格式(shortlong)已预定义。


如何以本地化的方式打印日期?它是否接受任何格式化字符串,例如“%B,%y”? - rangalo
26
我明白了:使用I18n.localize函数可以将日期(some_date)格式化为"%B, %y"的形式。 - rangalo
1
你需要确保已安装了这个 gem:https://github.com/svenfuchs/rails-i18n。这样,你就可以拥有不同的语言环境,并调用它们的 format: short 或其他你想要引用的内容。在这里查看有关引用的示例:https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en.yml。 - bcackerman
1
一旦你安装了我上面提到的那个 gem,你可以像这样做... l @item.created_at, :format => "%b %e, %Y", :locale => 'en' - bcackerman

30

您还可以让它更短:

l(some_date, :format => '%d %B %Y')

10
在 es.yml 文件中添加以下内容:
es:
  date:
    formats:
      default: "%d / %m / %Y"
在 index.html.erb 文件中添加如下内容:
<%= l somemodel.datefield %>

应该使用 time 而不是 date 吗?实际上这取决于传递的对象的类。 - Capripot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接