ruby-on-rails - local_time 的国际化(Rails)
问题描述
简单的问题,但很重要。我的视图中有一个字段:@event.start_time
我将 local_time 应用于该字段,因为该表默认使用 UTC,但用户可以来自任何地方。
我想将时间从英语翻译成当前用户的语言环境。截至目前,我的领域看起来像<%= local_time(@event.start) %>
。
我试过<%= I18n.l(local_time(@event.start), format: :long) %>
了,显然它不起作用,因为它需要一个日期对象,而不是一个字符串。
请问有人知道怎么处理吗?
谢谢
解决方案
您不能在这里直接使用国际化,local_time gem 支持它,但为此您必须提供翻译集,例如,如果您检查i18n.coffee
gem 的文件,您会发现默认的英文翻译集已经添加,同样您可以为别人添加。
例子:
LocalTime.config.i18n["es"] = {
date: {
dayNames: [ … ],
monthNames: [ … ],
…
},
time: {
…
},
datetime: {
…
}
}
LocalTime.config.locale = "es"
来源: https ://github.com/basecamp/local_time#configuration
另一种选择是,如果您将他们的时区保存在您的数据库中,您可以将 UTC 时间转换为特定时区,然后传递给I18n.l
它将以您需要的格式转换时间。为此,您可以Time.zone
直接将 设置为用户的时区或使用in_time_zone
方法将 UTC 时间转换为用户的时间。要直接设置,您Time.zone
可以像这样添加:before_action
ApplicationController
before_action :set_time_zone
def set_time_zone
Time.zone = current_user.time_zone if current_user
end
现在,每当您获取此特定会话的时间时,它都会在用户的时区中返回它,因此您不必每次都转换它。
推荐阅读
- ios - 使用未解析的标识符“GradientView”
- html - Bootstrap 单个全宽列
- ios - App Tracking Transparency 如何影响显示广告的应用程序?- IDFA iOS14
- oracle - 为什么这个查询没有返回结果
- python - 使用 boto 和 IAM ARN 在 S3 上放置文件
- typescript - 在工厂类中推断类型
- android - 应用程序主题更改不影响第一个 MainActivity.its reamain darkmode 每次应用程序第一次午餐时。导航其主题更新后
- java - Hibernate 从事务中删除有缺陷的实体
- python - 如何正确实例化这段代码?
- sql - 字符串拆分,排序并与表 SQL 中的另一列进行比较