RAILS:未定义的方法`map'由于缺少I18n翻译而造成的

时间:2017-03-02 19:18:19

标签: ruby-on-rails ruby-on-rails-4 simple-form

我将RAILS 4 datetimenew.html.erb字段的格式从:string更改为datetime,导致错误如下:

undefined method `map' for "translation missing: zh-CN.date.order":String

导致上述错误的视图代码为:

<%= f.input :start_time, :label => t("Start Time"), required: true, :as => :datetime, :ampm => true, :minute_step => 10, :start_year => Date.today.year - 1, :end_year => Date.today.year + 1, :format => 'YYYY/MM/DD/HH/MM', :use_month_numbers => true, :include_blank => true %>

RAILS源代码爆炸在actionview/helpers/date_helper.rb

def translated_date_order
  date_order = I18n.translate(:'date.order', :locale => @options[:locale], :default => [])
  date_order = date_order.map { |element| element.to_sym }  #<<<<<<===blows up

  forbidden_elements = date_order - [:year, :month, :day]
  if forbidden_elements.any?
    raise StandardError,
      "#{@options[:locale]}.date.order only accepts :year, :month and :day"
  end

  date_order
end

我在zh-CN.yml下有一个文件/config/locale/,它为除此之外的其他人提供翻译。

zh-CN.yml的更新部分:

zh-CN:

  #maint_recordx
  Mfg Batches  : '订单批次一览'
  New Batch  : '新批次'
  Update Batch : '更新批次'
  Edit Batch : '更新批次'
...........

2 个答案:

答案 0 :(得分:3)

在被同样的错误咬了之后,我发现Rails设置了以下键:

:'date.order'

到值:

["year", "month", "day"]

表示默认的:en区域设置

您可以通过在rails控制台中运行以下代码段来确认默认的rails install:

date_order = I18n.translate(:'date.order', :locale => :en, :default => [])

注意我刚刚将@options[:locale]切换为默认:en

你引用的rails helper,需要一个数组作为date_order值,如果没有得到的话会爆炸。

在我的情况下,我不正确地配置了I18n :: Backend :: ActiveRecord gem,因此它干扰了I18n返回的值。您可能有类似的问题阻止了返回:'date.order'密钥的正确值。

编辑:

为了解决这个问题,您可能只需要安装gem&#39; rails-i18n'。它将处理为支持的语言环境返回正确的日期格式。在我的情况下,我的es.yml语言环境文件中有一个自定义配置,返回了错误的日期格式。

答案 1 :(得分:0)

宾果!!!您只需将缺少的关键翻译添加到本地翻译中。 我通过添加

解决了
en:
  date:
    order: ["day", "month", "year"]

config/locales/en.yml