Я очень возбужден [приблизительно 110] RaphaГ «l. Я использовал его в одном проекте, и это работает как очарование.
[Несколько месяцев спустя ...]
Проблема в том, что вы пытаетесь определить формат «datetime» в en.yml, но код локализации Rails проверяет только «date» или « время »(смешивая« дата-время »с« время »).
Код ошибки в базовом коде i18n здесь , в строке 53:
type = object.respond_to?(:sec) ? 'time' : 'date'
Он проверяет, может ли данный объект ответить на "sec «; если это так, он читает материал "time" в en.yml, если нет, он читает формат "date". Нет даты и времени.
Как предложил Тираэль, вы можете заставить его подчиняться своей воле под дулом пистолета через код инициализации. Это, безусловно, сработает, но теперь вы поместили код локализации в ваши инициализаторы. Это потенциально запутанно и грязно, ИМО.
IMO, более чистый способ сделать это - добавить нужный формат DateTime в секцию «time» в en.yml, указав другой «формат», например, так:
en:
time:
formats:
short_datetime: %B %d, %Y
long_datetime: %B %d, %Y, at %r
hammer_datetime: STOP! %B %d, %Y, is HAMMERTIME!
# and so on... da dum... da dum...
То, что вы могли бы использовать следующим образом:
<%= l item.create_date, :format => :short_datetime %>
Это подход, который я использую сам.
Но для полноты вы могли бы также сделать это:
en:
datetime:
formats:
default: %B %d, %Y
И затем рассказать Rails, как его читать, вот так:
# In your Application Helper
def localize_datetime(dt)
# quick-and-dirty demo... doesn't accept different format options and stuff...
dt.strftime(I18n.t(:"datetime.formats.default", {:locale => I18n.locale }))
end
def ld(dt)
localize_datetime(dt)
end
# or something like that...
Затем используйте это так:
<%= ld item.create_date %>
Это сохранит вашу информацию о локализации в ваших файлах локализации, но требует грязных рук (код выше не проверяет ошибки, не принимает параметры и т. Д.) И заставляет вас использовать другую функцию для ее вывода (вместо просто «l», мучительно длинного «ld»).
И наконец (и, вероятно, по меньшей мере), мы могли бы просто сказать гномам Rails исправить эту функцию, чтобы она позволила «datetime». :)
Надеюсь, что это было полезно. Желаем удачи.
просто хочу уточнить, что если вы используете с активной записью, просто конвертируйте значение строки datetime
в объект date
, как в примере ниже.
en:
date:
formats:
default: "%Y-%m-%d"
short: "%b %d"
long: "%B %d, %Y"
<%= l(post.the_created_at.to_date, format: :long) %>