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

vuktfyat  于 2023-02-26  发布在  Ruby
关注(0)|答案(2)|浏览(114)

我想在Rails中获得本地化日期格式的模板字符串。我想做的是:

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

因此,需要说明的是,我并不试图本地化一个真实的日期,我试图获取日期格式字符串,以便将其显示为文本字段中的占位符。
我在互联网上搜索的所有东西都让我回到了真正的本地化日期。:-/

xj3cbfub

xj3cbfub1#

这是行不通的,因为这不是指定格式的方式。对于英语,这是指定日期格式的方式:

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

如果你好奇的话,这里有这些百分比占位符的文档。
为了解决您的问题,我将创建一个日期,将其本地化,然后替换部分:

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

注意,如果语言环境使用2位数的年份格式,这可能不起作用。让我们在一些语言环境中尝试一下(使用rails-i18 n的默认值):

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

formats将为:

{
  :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"
}
cdmah0mi

cdmah0mi2#

默认情况下,所有翻译都应该放在config/locales目录中,并划分为文件。
下面是一个带有日期模式的en.yml示例。

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

因此,以下所有等效查找都将返回:short date格式“%B %d”:

I18n.t 'date.formats.short'
I18n.t 'formats.short', scope: :date
I18n.t :short, scope: 'date.formats'
I18n.t :short, scope: [:date, :formats]

请查看此guide,了解如何在Ruby on Rails中进行i18 n本地化

相关问题