Rails的日期为i18n,自定义格式不翻译

时间:2014-12-18 20:48:41

标签: ruby-on-rails ruby ruby-on-rails-3 rails-i18n

我创建了一个名为'date_formats.rb'的初始化程序,它看起来像:

Date::DATE_FORMATS[:default] = "%B %e, %Y" # November 3, 2013
DateTime::DATE_FORMATS[:default] = "%B %e, %Y" # November 3, 2013 14:22
Time::DATE_FORMATS[:default] = "%B %d, %Y %H:%M"           # November 3, 2013 14:22

所以当我打电话给somemodel.created_at时,我得到的结果是:December 16, 2014 12:37。我喜欢这个,因为我不再需要与strftime斗争

当我需要这个日期用西班牙语打印时,问题就开始了。到目前为止我已经安装了 rails-18n gem,因为我必须翻译一些自定义文本,我已经有了 es.yml ,如下所示:

es:
  hello: "Hello world"
  Client: "Cliente"
  update: "Actualización"
  create: "Creación"
  identification_number: "Número de identificación"
  created_by: "Creado por"
  identification_type: "Tipo de identificación"
  name: "Nombre"
  observations: "Observaciones"
  status: "Estado"
  client_type: "Tipo de cliente"
  contract_start_date: "Fecha de inicio de contrato"
  contract_end_date: "Fecha de fin de contrato"
  contact_name: "Nombre del contacto"
  telephone: "Teléfono"
  email: "Email"
  address: "Dirección"
  created_by_id: "Id creador"
  date:
    order:
      - :day
      - :month
      - :year
    abbr_day_names:
      - dom
      - lun
      - mar
      - mié
      - jue
      - vie
      - sáb
    abbr_month_names:
      - ~
      - ene
      - feb
      - mar
      - abr
      - may
      - jun
      - jul
      - ago
      - sep
      - oct
      - nov
      - dic
    day_names:
      - domingo
      - lunes
      - martes
      - miércoles
      - jueves
      - viernes
      - sábado
    month_names:
      - ~
      - enero
      - febrero
      - marzo
      - abril
      - mayo
      - junio
      - julio
      - agosto
      - septiembre
      - octubre
      - noviembre
      - diciembre
    formats:
      short: "%d de %b"
      default: "%d/%m/%Y"
      long: "%A, %d de %B de %Y"
  time:
    formats:
      short: "%d de %b a las %H:%M hrs"
      default: "%a, %d de %b de %Y a las %H:%M:%S %Z"
      long: "%A, %d de %B de %Y a las %I:%M %p"
    am: "am"
    pm: "pm"

它没有翻译我的约会。它只有在我调用它l somemodel.created_at时才有效,但我不想在每次需要显示日期时调用方法本地化。

到目前为止,我的 application.rb 看起来像这样:

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
config.i18n.available_locales = ['es', :es]
config.i18n.default_locale = :es
I18n.locale = config.i18n.locale = config.i18n.default_locale

请注意,我已经尝试了很多变通方法,以确保它正在加载正确的.yml,并且我已经确定它。

1 个答案:

答案 0 :(得分:0)

localize或短l方法是实现这一诀窍的方法。你无法摆脱它。如果没有该方法,则根本不会调用I18n模块。