【问题标题】:Rails date i18n with custom formats not translatingRails date i18n 自定义格式不翻译
【发布时间】:2014-12-18 20:48:40
【问题描述】:

我创建了一个名为“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 时才有效,但我不想在每次需要显示日期时都调用方法 localize。

到目前为止,我的 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,并且我已经确定它是。

【问题讨论】:

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


    【解决方案1】:

    但是localize 或简短的l 方法是解决问题的方法。你无法摆脱它。如果没有该方法,则根本不会调用 I18n 模块。

    【讨论】:

    • 知道了。无论如何它必须是一种自动翻译日期的方法。
    • 您可以在 DateDateTime 上覆盖 to_s 以始终使用 I18n。但我认为对于这样一个简单的用例来说,这是一个糟糕的想法和令人惊讶的解决方案。还记得 Rails 2.3 吗?您必须将 h 添加到视图中的所有内容,现在只有 l 用于您要本地化的内容。
    • 你为什么认为这是个糟糕的主意?我觉得很有趣
    • 覆盖核心方法(如Date#to_s)稍后会咬你。因为系统的所有其他库和部分也不会使用原始实现,而是使用您的覆盖版本。您能确定所有其他库都可以处理更改格式吗?例如。数据库驱动程序编写时间戳、cookie 提升时间管理、计划的后台作业处理?
    猜你喜欢
    • 2013-05-26
    • 1970-01-01
    • 2011-04-12
    • 2015-04-20
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 2015-03-25
    • 2011-10-11
    相关资源
    最近更新 更多