ruby-on-rails - 在 Rails i18n 本地化中显示日期模式字符串

标签 ruby-on-rails rails-i18n

我想获取Rails中本地化日期格式的模板字符串。我要做什么:

date_in_us = get_date_string(:en) # 'mm/dd/yyyy'
date_in_gb = get_date_string(:en-gb) # 'dd/mm/yyyy'

所以要明确的是,我并不是在尝试本地化真实日期,而是尝试获取日期格式字符串,以便可以将其显示为文本字段中的占位符。

我在互联网上搜索的所有内容都不断让我回到实际本地化日期。 :-/

最佳答案

这不起作用,因为格式不是这样指定的。对于英语,this日期格式是如何指定的:

formats:
  default: "%Y-%m-%d"
  long: "%B %d, %Y"
  short: "%b %d"

Here如果您好奇,请查看这些百分比占位符的文档。

为了解决您的问题,我将创建一个日期,将其本地化,然后替换部件:

date = Date.new(2000, 12, 31)
I18n.l(date).sub('2000', 'yyyy').sub('12', 'mm').sub('31', 'dd')
# => "yyyy-mm-dd"

请注意,如果区域设置使用 2 位数年份格式,这可能不起作用。让我们尝试一些语言环境(使用rails-i18n 中的默认设置):

def get_date_string(locale = I18n.current)
  date = Date.new(2000, 12, 31)
  I18n.l(date, locale: locale)
    .sub('2000', 'yyyy')
    .sub('12', 'mm')
    .sub('31', 'dd')
end

formats = %i[en en-US en-GB es de fr pt].map do |locale|
  [locale, get_date_string(locale)]
end.to_h

格式将是:

{
  :en=>"yyyy-mm-dd",
  :"en-US"=>"mm-dd-yyyy",
  :"en-GB"=>"dd-mm-yyyy",
  :es=>"dd/mm/yyyy",
  :de=>"dd.mm.yyyy",
  :fr=>"dd/mm/yyyy",
  :pt=>"dd/mm/yyyy"
}

关于ruby-on-rails - 在 Rails i18n 本地化中显示日期模式字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56183243/

相关文章:

ruby-on-rails - 包含区域设置但不包含查询字符串的 Rails 根路径

ruby-on-rails - 用于 Rails 中带参数的 Flash 消息的 I18n

ruby-on-rails - 为什么 Assets 管道文件中的 Rails I18n.t 不起作用?

ruby-on-rails - Ruby .where 查看数组是否包含与查询不匹配的结果。

ruby-on-rails - Rails 3 路由错误 - "No Route Matches"

ruby-on-rails - 是否可以使用 Cucumber 来测试现有的 Rails 应用程序?

ruby-on-rails - Rails 国际化 (i18n) : Everything translating except layouts/application. html.erb

ruby-on-rails - 在 Rails 3.0.3 中使用 Net::HTTP 会导致 Timeout::Error

ruby-on-rails - 其中 dispatch.fcgi 提供与 "rackup"相同的行为

ruby-on-rails - Bundler 无法安装 gems : i18n gem v 0. 6.10 问题