gpt4 book ai didi

ruby-on-rails - 如何在 Rails、表单构建器和错误消息中本地化日期格式?

转载 作者:行者123 更新时间:2023-12-04 06:36:01 25 4
gpt4 key购买 nike

我花了一天的大部分时间来尝试在我的应用程序中本地化日期。

阅读本文http://guides.rubyonrails.org/i18n.html似乎 I18n.l(date) 是这样做的方法。

如果我只想在我的 View 中直接渲染日期对象,这一切都很好。但是很多时候我想在表单字段中呈现日期:

= form_for @object do |f|
.field
= f.label :date
= f.text_field :date

这似乎在日期对象上调用 to_s 并使用它,没有本地化。

我尝试的第一个解决方法是修改日期类以使用 I18n.l:
class Date
def to_s
I18n.l(self)
end
end

这看起来不错,因为我不必记得每次渲染日期时都调用 I18n.l。但是,这样做会破坏我所有的数据库查询,因为特定于语言环境的格式在查询字符串中没有意义!

为了解决这个问题,我在补丁中添加了额外的逻辑:
class Date
def to_s(type = nil)
if(type == :db)
self.strftime("%Y-%m-%d")
else
I18n.l(self)
end
end
end

然而,这仍然不适合 - 因为当使用日期验证错误时,事件记录似乎使用发送到数据库的字符串值。

谁能与我分享您将如何在您的 View 、表单构建器和事件记录错误消息中一致地本地化日期格式?

谢谢你的帮助

最佳答案

重载 Date 的 to_s 方法对我来说是一个很大的禁忌。

我想不出一个神奇的解决方案,可以根据上下文以不同的方式格式化日期并设法可靠地做到这一点;)

我建议仅在您需要的地方继续指定日期格式,并可能覆盖 date.formats.default在您的语言环境文件中进行翻译,以使格式更适合您的用户(这也应该修复您的 text_field 中的格式)。

关于ruby-on-rails - 如何在 Rails、表单构建器和错误消息中本地化日期格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10622771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com