Отображение строки шаблона даты в локализации Rails i18n - PullRequest
0 голосов
/ 17 мая 2019

Я бы хотел получить строку шаблона локализованного формата даты в Rails. Для чего я иду:

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

Итак, чтобы быть ясным, я не пытаюсь локализовать реальную дату, я пытаюсь получить строку формата даты, чтобы я мог отобразить ее в качестве заполнителя в текстовом поле.

Все, что я искал в интернете, продолжает возвращать меня к фактической локализации даты. : - /

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Это не сработает, потому что это не тот формат, который указан.Для английского языка это , как указываются форматы даты:

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"

Обратите внимание, что это может не сработать, если в локали используется двухзначный формат года.Давайте попробуем это для некоторых локалей (используя значение по умолчанию из 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"
}
0 голосов
/ 07 июня 2019

По умолчанию все переводы должны быть помещены в каталог config / locales, разделенный на файлы.

Ниже приведен пример en.yml с шаблонами дат.

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

Итак, всеиз следующих эквивалентных поисков вернет: краткий формат даты "% 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]

Пожалуйста, проверьте это руководство о том, как i18n локализация работает в Ruby on Rails

...