在 Rails i18n 本地化中显示日期模式字符串
Displaying the date pattern string in Rails i18n localization
我想获取 Rails 中本地化日期格式的模板字符串。我要做什么:
date_in_us = get_date_string(:en) # 'mm/dd/yyyy'
date_in_gb = get_date_string(:en-gb) # 'dd/mm/yyyy'
明确地说,我不是在尝试本地化真实日期,而是在尝试获取日期格式字符串,以便将其显示为文本字段中的占位符。
我在 Internet 上搜索的所有内容都让我回想起实际本地化约会。 :-/
那是行不通的,因为这不是指定格式的方式。对于英语,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"
请注意,如果语言环境使用两位数的年份格式,这可能不起作用。让我们尝试一些语言环境(使用 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
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"
}
默认情况下,所有翻译都应放在 config/locales 目录中,分为文件。
下面是带有日期模式的示例en.yml
。
en:
date:
formats:
default: "%Y-%m-%d"
short: "%b %d"
long: "%B %d, %Y"
因此,以下所有等效查找都将 return :short date format "%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]
请在 Rails
上查看此 guide 以了解如何在 Ruby 中进行国际化本地化
我想获取 Rails 中本地化日期格式的模板字符串。我要做什么:
date_in_us = get_date_string(:en) # 'mm/dd/yyyy'
date_in_gb = get_date_string(:en-gb) # 'dd/mm/yyyy'
明确地说,我不是在尝试本地化真实日期,而是在尝试获取日期格式字符串,以便将其显示为文本字段中的占位符。
我在 Internet 上搜索的所有内容都让我回想起实际本地化约会。 :-/
那是行不通的,因为这不是指定格式的方式。对于英语,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"
请注意,如果语言环境使用两位数的年份格式,这可能不起作用。让我们尝试一些语言环境(使用 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
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"
}
默认情况下,所有翻译都应放在 config/locales 目录中,分为文件。
下面是带有日期模式的示例en.yml
。
en:
date:
formats:
default: "%Y-%m-%d"
short: "%b %d"
long: "%B %d, %Y"
因此,以下所有等效查找都将 return :short date format "%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]
请在 Rails
上查看此 guide 以了解如何在 Ruby 中进行国际化本地化